/* Generic BFD library interface and support routines.
- Copyright (C) 1990-2016 Free Software Foundation, Inc.
+ Copyright (C) 1990-2017 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
.
. {* Flags bits to be saved in bfd_preserve_save. *}
.#define BFD_FLAGS_SAVED \
-. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \
-. | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
+. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
+. | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
+. | BFD_USE_ELF_STT_COMMON)
.
. {* Flags bits which are for BFD use only. *}
.#define BFD_FLAGS_FOR_BFD_USE_MASK \
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);
.
*/
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;
else
fprintf (stderr, "BFD: ");
- va_start (ap, fmt);
new_fmt = fmt;
bufp = buf;
}
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. */
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
{
bfd_error_handler_type pold;
- pold = _bfd_error_handler;
- _bfd_error_handler = pnew;
+ pold = _bfd_error_internal;
+ _bfd_error_internal = pnew;
return pold;
}
_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
int bfd_line)
{
- (*_bfd_error_handler) (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
+ _bfd_error_handler (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
}
/* Similar to _bfd_error_handler, a program can decide to exit on an
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
_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
void
bfd_assert (const char *file, int line)
{
+ /* xgettext:c-format */
(*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
BFD_VERSION_STRING, file, line);
}
_bfd_abort (const char *file, int line, const char *fn)
{
if (fn != NULL)
- (*_bfd_error_handler)
+ _bfd_error_handler
+ /* xgettext:c-format */
(_("BFD %s internal error, aborting at %s:%d in %s\n"),
BFD_VERSION_STRING, file, line, fn);
else
- (*_bfd_error_handler)
+ _bfd_error_handler
+ /* xgettext:c-format */
(_("BFD %s internal error, aborting at %s:%d\n"),
BFD_VERSION_STRING, file, line);
- (*_bfd_error_handler) (_("Please report this bug.\n"));
+ _bfd_error_handler (_("Please report this bug.\n"));
_exit (EXIT_FAILURE);
}
*/
-/*
-FUNCTION
- bfd_merge_private_bfd_data
-
-SYNOPSIS
- bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
-
-DESCRIPTION
- Merge private BFD information from the BFD @var{ibfd} to the
- the output file BFD @var{obfd} when linking. Return <<TRUE>>
- on success, <<FALSE>> on error. Possible error returns are:
-
- o <<bfd_error_no_memory>> -
- Not enough memory exists to create private data for @var{obfd}.
-
-.#define bfd_merge_private_bfd_data(ibfd, obfd) \
-. BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
-. (ibfd, obfd))
-
-*/
-
/*
FUNCTION
bfd_set_private_flags