diff options
author | Alan Modra <amodra@gmail.com> | 2016-09-30 11:33:13 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-09-30 11:38:45 +0930 |
commit | 4519d071387f374932616b588ddb4ec8cabe2a52 (patch) | |
tree | d2ef00842746410d31e5e60090dbea5e373f0ec1 /ld/ldmain.c | |
parent | 52d45da3f275b5d1c8ef2e96a7760585c736133b (diff) | |
download | binutils-4519d071387f374932616b588ddb4ec8cabe2a52.zip binutils-4519d071387f374932616b588ddb4ec8cabe2a52.tar.gz binutils-4519d071387f374932616b588ddb4ec8cabe2a52.tar.bz2 |
Better ld --fatal-warnings support
* ldmain.c (default_bfd_error_handler): New function pointer.
(ld_bfd_error_handler): New function.
(main): Arrange to call it on bfd errors/warnings.
(ld_bfd_assert_handler): Enable tail call.
Diffstat (limited to 'ld/ldmain.c')
-rw-r--r-- | ld/ldmain.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/ld/ldmain.c b/ld/ldmain.c index e7a8dff..29ef77f 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -158,6 +158,7 @@ static struct bfd_link_callbacks link_callbacks = }; static bfd_assert_handler_type default_bfd_assert_handler; +static bfd_error_handler_type default_bfd_error_handler; struct bfd_link_info link_info; @@ -172,15 +173,24 @@ ld_cleanup (void) unlink_if_ordinary (output_filename); } -/* If there's a BFD assertion, we'll notice and exit with an error - unless otherwise instructed. */ +/* Hook to notice BFD assertions. */ static void ld_bfd_assert_handler (const char *fmt, const char *bfdver, const char *file, int line) { - (*default_bfd_assert_handler) (fmt, bfdver, file, line); config.make_executable = FALSE; + (*default_bfd_assert_handler) (fmt, bfdver, file, line); +} + +/* Hook the bfd error/warning handler for --fatal-warnings. */ + +static void +ld_bfd_error_handler (const char *fmt, va_list ap) +{ + if (config.fatal_warnings) + config.make_executable = FALSE; + (*default_bfd_error_handler) (fmt, ap); } int @@ -217,6 +227,9 @@ main (int argc, char **argv) leave no trace. */ default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler); + /* Also hook the bfd error/warning handler for --fatal-warnings. */ + default_bfd_error_handler = bfd_set_error_handler (ld_bfd_error_handler); + xatexit (ld_cleanup); /* Set up the sysroot directory. */ |