* ldmain.h (overflow_cutoff_limit): Declare.
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 7 May 2003 04:14:57 +0000 (04:14 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Wed, 7 May 2003 04:14:57 +0000 (04:14 +0000)
* ldmain.c (overflow_cutoff_limit): Define, initialized to 10.
(reloc_overflow): Limit error messages based on it.
* lexsup.c (parse_args) <OPTION_VERBOSE>: Set cutoff to
unlimited.

ld/ChangeLog
ld/ldmain.c
ld/ldmain.h
ld/lexsup.c

index 404d98f..60f9e39 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-07  Alexandre Oliva  <aoliva@redhat.com>
+
+       * ldmain.h (overflow_cutoff_limit): Declare.
+       * ldmain.c (overflow_cutoff_limit): Define, initialized to 10.
+       (reloc_overflow): Limit error messages based on it.
+       * lexsup.c (parse_args) <OPTION_VERBOSE>: Set cutoff to
+       unlimited.
+
 2003-05-05  Alan Modra  <amodra@bigpond.net.au>
 
        * ldlex.l: Accept C style comments in version scripts.
index 0b0b038..91818e0 100644 (file)
@@ -1362,6 +1362,15 @@ undefined_symbol (info, name, abfd, section, address, fatal)
   return TRUE;
 }
 
+/* Counter to limit the number of relocation overflow error messages
+   to print.  Errors are printed as it is decremented.  When it's
+   called and the counter is zero, a final message is printed
+   indicating more relocations were omitted.  When it gets to -1, no
+   such errors are printed.  If it's initially set to a value less
+   than -1, all such errors will be printed (--verbose does this).  */
+
+int overflow_cutoff_limit = 10;
+
 /* This is called when a reloc overflows.  */
 
 static bfd_boolean
@@ -1374,10 +1383,21 @@ reloc_overflow (info, name, reloc_name, addend, abfd, section, address)
      asection *section;
      bfd_vma address;
 {
+  if (overflow_cutoff_limit == -1)
+    return TRUE;
+
   if (abfd == (bfd *) NULL)
     einfo (_("%P%X: generated"));
   else
     einfo ("%X%C:", abfd, section, address);
+
+  if (overflow_cutoff_limit >= 0
+      && overflow_cutoff_limit-- == 0)
+    {
+      einfo (_(" additional relocation overflows omitted from the output\n"));
+      return TRUE;
+    }
+
   einfo (_(" relocation truncated to fit: %s %T"), reloc_name, name);
   if (addend != 0)
     einfo ("+%v", addend);
index d21b3fd..500a4c7 100644 (file)
@@ -36,6 +36,7 @@ extern bfd_boolean demangling;
 extern int g_switch_value;
 extern const char *output_filename;
 extern struct bfd_link_info link_info;
+extern int overflow_cutoff_limit;
 
 extern void add_ysym PARAMS ((const char *));
 extern void add_wrap PARAMS ((const char *));
index e8c2eba..b2f94f1 100644 (file)
@@ -1047,6 +1047,7 @@ parse_args (argc, argv)
          ldversion (1);
          version_printed = TRUE;
          trace_file_tries = TRUE;
+         overflow_cutoff_limit = -2;
          break;
        case 'v':
          ldversion (0);