Make bfd_error_handler_type like vprintf
authorAlan Modra <amodra@gmail.com>
Fri, 30 Sep 2016 01:33:52 +0000 (11:03 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 30 Sep 2016 02:08:39 +0000 (11:38 +0930)
It was like printf, which means you can't use bfd_set_error_handler to
hook in a function to do something and then call the original handler.

The patch also deletes some unused functions and makes pointers local.

bfd/
* bfd-in.h: Include stdarg.h.
* bfd.c (bfd_error_handler_type): Make like vprintf.
(_bfd_error_internal): Rename from _bfd_error_handler.  Make static.
(error_handler_internal): New function, split out from..
(_bfd_default_error_handler): ..here.  Rename to _bfd_error_handler.
(bfd_set_error_handler): Update.
(bfd_get_error_handler, bfd_get_assert_handler): Delete.
(_bfd_assert_handler): Make static.
* coffgen.c (null_error_handler): Update params.
* elf-bfd.h (struct elf_backend_data <link_order_error_handler>):
Don't use bfd_error_handler_type.
* elf64-mmix.c (mmix_dump_bpo_gregs): Likewise.
* elfxx-target.h (elf_backend_link_order_error_handler): Default
to _bfd_error_handler.
* libbfd-in.h (_bfd_default_error_handler): Don't declare.
(bfd_assert_handler_type): Likewise.
(_bfd_error_handler): Update.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
ld/
* ldlang.c (ignore_bfd_errors): Update params.

12 files changed:
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/bfd.c
bfd/coffgen.c
bfd/elf-bfd.h
bfd/elf64-mmix.c
bfd/elfxx-target.h
bfd/libbfd-in.h
bfd/libbfd.h
ld/ChangeLog
ld/ldlang.c

index 79445617df304ae1dfa2c8da0375d999295e6e9d..37333a3b5b5d494059592b91d6fbf802dec9f91a 100644 (file)
@@ -1,3 +1,25 @@
+2016-09-30  Alan Modra  <amodra@gmail.com>
+
+       * bfd-in.h: Include stdarg.h.
+       * bfd.c (bfd_error_handler_type): Make like vprintf.
+       (_bfd_error_internal): Rename from _bfd_error_handler.  Make static.
+       (error_handler_internal): New function, split out from..
+       (_bfd_default_error_handler): ..here.  Rename to _bfd_error_handler.
+       (bfd_set_error_handler): Update.
+       (bfd_get_error_handler, bfd_get_assert_handler): Delete.
+       (_bfd_assert_handler): Make static.
+       * coffgen.c (null_error_handler): Update params.
+       * elf-bfd.h (struct elf_backend_data <link_order_error_handler>):
+       Don't use bfd_error_handler_type.
+       * elf64-mmix.c (mmix_dump_bpo_gregs): Likewise.
+       * elfxx-target.h (elf_backend_link_order_error_handler): Default
+       to _bfd_error_handler.
+       * libbfd-in.h (_bfd_default_error_handler): Don't declare.
+       (bfd_assert_handler_type): Likewise.
+       (_bfd_error_handler): Update.
+       * bfd-in2.h: Regenerate.
+       * libbfd.h: Regenerate.
+
 2016-09-28  Akihiko Odaki  <akihiko.odaki.4i@stu.hosei.ac.jp>
 
        PR ld/20636
index fa3da8327c5cf6f7801564564713a4d02127f6e1..4b3bcfd02aa364ea7278695a1910f792b292e032 100644 (file)
@@ -34,6 +34,7 @@ extern "C" {
 
 #include "ansidecl.h"
 #include "symcat.h"
+#include <stdarg.h>
 #include <sys/stat.h>
 
 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
index 00eb857020bdf5f54ae18ea8b939c7cac632aae1..1dc1c74462f8e237e8f6756b55dba540e9985dbe 100644 (file)
@@ -41,6 +41,7 @@ extern "C" {
 
 #include "ansidecl.h"
 #include "symcat.h"
+#include <stdarg.h>
 #include <sys/stat.h>
 
 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
@@ -6928,14 +6929,12 @@ const char *bfd_errmsg (bfd_error_type error_tag);
 void bfd_perror (const char *message);
 
 
-typedef void (*bfd_error_handler_type) (const char *, ...);
+typedef void (*bfd_error_handler_type) (const char *, va_list);
 
 bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
 
 void bfd_set_error_program_name (const char *);
 
-bfd_error_handler_type bfd_get_error_handler (void);
-
 
 typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
                                          const char *bfd_version,
@@ -6944,8 +6943,6 @@ typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
 
 bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
 
-bfd_assert_handler_type bfd_get_assert_handler (void);
-
 long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
 
 long bfd_canonicalize_reloc
index 806b9fb33f517618d9f51f6984e7b6cfa4e03896..4130d2db1ad9b5f17080103dd1d7d4a25b49945c 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -598,11 +598,11 @@ SUBSECTION
        problem.  They call a BFD error handler function.  This
        function may be overridden by the program.
 
-       The BFD error handler acts like printf.
+       The BFD error handler acts like vprintf.
 
 CODE_FRAGMENT
 .
-.typedef void (*bfd_error_handler_type) (const char *, ...);
+.typedef void (*bfd_error_handler_type) (const char *, va_list);
 .
 */
 
@@ -634,10 +634,9 @@ static const char *_bfd_error_program_name;
        integer_for_the_%d);
  */
 
-void
-_bfd_default_error_handler (const char *fmt, ...)
+static void
+error_handler_internal (const char *fmt, va_list ap)
 {
-  va_list ap;
   char *bufp;
   const char *new_fmt, *p;
   size_t avail = 1000;
@@ -651,7 +650,6 @@ _bfd_default_error_handler (const char *fmt, ...)
   else
     fprintf (stderr, "BFD: ");
 
-  va_start (ap, fmt);
   new_fmt = fmt;
   bufp = buf;
 
@@ -782,7 +780,6 @@ _bfd_default_error_handler (const char *fmt, ...)
     }
 
   vfprintf (stderr, new_fmt, ap);
-  va_end (ap);
 
   /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
      warning, so use the fputc function to avoid it.  */
@@ -796,7 +793,17 @@ _bfd_default_error_handler (const char *fmt, ...)
    function pointer permits a program linked against BFD to intercept
    the messages and deal with them itself.  */
 
-bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
+static bfd_error_handler_type _bfd_error_internal = error_handler_internal;
+
+void
+_bfd_error_handler (const char *fmt, ...)
+{
+  va_list ap;
+
+  va_start (ap, fmt);
+  _bfd_error_internal (fmt, ap);
+  va_end (ap);
+}
 
 /*
 FUNCTION
@@ -815,8 +822,8 @@ bfd_set_error_handler (bfd_error_handler_type pnew)
 {
   bfd_error_handler_type pold;
 
-  pold = _bfd_error_handler;
-  _bfd_error_handler = pnew;
+  pold = _bfd_error_internal;
+  _bfd_error_internal = pnew;
   return pold;
 }
 
@@ -840,23 +847,6 @@ bfd_set_error_program_name (const char *name)
   _bfd_error_program_name = name;
 }
 
-/*
-FUNCTION
-       bfd_get_error_handler
-
-SYNOPSIS
-       bfd_error_handler_type bfd_get_error_handler (void);
-
-DESCRIPTION
-       Return the BFD error handler function.
-*/
-
-bfd_error_handler_type
-bfd_get_error_handler (void)
-{
-  return _bfd_error_handler;
-}
-
 /*
 SUBSECTION
        BFD assert handler
@@ -898,7 +888,7 @@ _bfd_default_assert_handler (const char *bfd_formatmsg,
    internal BFD error.  We use a non-variadic type to simplify passing
    on parameters to other functions, e.g. _bfd_error_handler.  */
 
-bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
+static bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
 
 /*
 FUNCTION
@@ -921,23 +911,6 @@ bfd_set_assert_handler (bfd_assert_handler_type pnew)
   _bfd_assert_handler = pnew;
   return pold;
 }
-
-/*
-FUNCTION
-       bfd_get_assert_handler
-
-SYNOPSIS
-       bfd_assert_handler_type bfd_get_assert_handler (void);
-
-DESCRIPTION
-       Return the BFD assert handler function.
-*/
-
-bfd_assert_handler_type
-bfd_get_assert_handler (void)
-{
-  return _bfd_assert_handler;
-}
 \f
 /*
 INODE
index 75512fbd7d16c5f3111588139e549f4c5e30f6a6..b9b8860da16503bbf9c4e2cffb8e91f8379a8052 100644 (file)
@@ -1218,7 +1218,8 @@ coff_write_native_symbol (bfd *abfd,
 }
 
 static void
-null_error_handler (const char * fmt ATTRIBUTE_UNUSED, ...)
+null_error_handler (const char *fmt ATTRIBUTE_UNUSED,
+                   va_list ap ATTRIBUTE_UNUSED)
 {
 }
 
index 6bebbbef27e56713772bd9f8e2860c56b54d5c92..7f78b1d448e53fdd34e02ce2dec8be32a293c5b3 100644 (file)
@@ -1326,7 +1326,7 @@ struct elf_backend_data
      Elf_Internal_Shdr *osection);
                
   /* Used to handle bad SHF_LINK_ORDER input.  */
-  bfd_error_handler_type link_order_error_handler;
+  void (*link_order_error_handler) (const char *, ...);
 
   /* Name of the PLT relocation section.  */
   const char *relplt_name;
index 2038813067041be5f6e0da334710dade234556c8..9c56f7c7250b668a01a079ee2bb3136ccb047c59 100644 (file)
@@ -172,7 +172,7 @@ extern void mmix_elf_symbol_processing (bfd *, asymbol *);
 
 /* Only intended to be called from a debugger.  */
 extern void mmix_dump_bpo_gregs
-  (struct bfd_link_info *, bfd_error_handler_type);
+  (struct bfd_link_info *, void (*) (const char *, ...));
 
 static void
 mmix_set_relaxable_size (bfd *, asection *, void *);
@@ -2485,7 +2485,7 @@ bpo_reloc_request_sort_fn (const void * p1, const void * p2)
 
 void
 mmix_dump_bpo_gregs (struct bfd_link_info *link_info,
-                    bfd_error_handler_type pf)
+                    void (*pf) (const char *fmt, ...))
 {
   bfd *bpo_greg_owner;
   asection *bpo_gregs_section;
index ba130122054fe990265b5479160915640a35711b..6bab686d2ff38d5807091cd37b1f5345c2aa48c0 100644 (file)
 #endif
 
 #ifndef elf_backend_link_order_error_handler
-#define elf_backend_link_order_error_handler _bfd_default_error_handler
+#define elf_backend_link_order_error_handler _bfd_error_handler
 #endif
 
 #ifndef elf_backend_common_definition
index cde3aad6c0a235bb176e1af8136984f91ad82cd2..f27adc9205258ca078d680af29b7898f8c4cd561 100644 (file)
@@ -109,9 +109,7 @@ extern void *bfd_realloc2
 extern void *bfd_zmalloc2
   (bfd_size_type, bfd_size_type);
 
-extern void _bfd_default_error_handler (const char *s, ...);
-extern bfd_error_handler_type _bfd_error_handler;
-extern bfd_assert_handler_type _bfd_assert_handler;
+extern void _bfd_error_handler (const char *s, ...);
 
 /* These routines allocate and free things on the BFD's objalloc.  */
 
index 1eb988f38d54c2ab3af98d2b6c13600cd3cdbb07..99ff2d3dadf4f2b3997530927d59976770b8f344 100644 (file)
@@ -114,9 +114,7 @@ extern void *bfd_realloc2
 extern void *bfd_zmalloc2
   (bfd_size_type, bfd_size_type);
 
-extern void _bfd_default_error_handler (const char *s, ...);
-extern bfd_error_handler_type _bfd_error_handler;
-extern bfd_assert_handler_type _bfd_assert_handler;
+extern void _bfd_error_handler (const char *s, ...);
 
 /* These routines allocate and free things on the BFD's objalloc.  */
 
index c5367a31f7211f58c96c8c647710eabf07e8ef2c..3d08e3c4be7e3a711b020d0704c796c199ee4895 100644 (file)
@@ -1,3 +1,7 @@
+2016-09-30  Alan Modra  <amodra@gmail.com>
+
+       * ldlang.c (ignore_bfd_errors): Update params.
+
 2016-09-29  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/20528
index 07c218214d349098d89910d7e7195663b0262a0f..0a38d0b6f77ab8f06ddfc15542af08067ca01d05 100644 (file)
@@ -5984,7 +5984,8 @@ lang_end (void)
    BFD.  */
 
 static void
-ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
+ignore_bfd_errors (const char *fmt ATTRIBUTE_UNUSED,
+                  va_list ap ATTRIBUTE_UNUSED)
 {
   /* Don't do anything.  */
 }