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.
This commit is contained in:
parent
52d45da3f2
commit
4519d07138
@ -1,3 +1,10 @@
|
|||||||
|
2016-09-30 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2016-09-30 Alan Modra <amodra@gmail.com>
|
2016-09-30 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* ldlang.c (ignore_bfd_errors): Update params.
|
* ldlang.c (ignore_bfd_errors): Update params.
|
||||||
|
19
ld/ldmain.c
19
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_assert_handler_type default_bfd_assert_handler;
|
||||||
|
static bfd_error_handler_type default_bfd_error_handler;
|
||||||
|
|
||||||
struct bfd_link_info link_info;
|
struct bfd_link_info link_info;
|
||||||
|
|
||||||
@ -172,15 +173,24 @@ ld_cleanup (void)
|
|||||||
unlink_if_ordinary (output_filename);
|
unlink_if_ordinary (output_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there's a BFD assertion, we'll notice and exit with an error
|
/* Hook to notice BFD assertions. */
|
||||||
unless otherwise instructed. */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ld_bfd_assert_handler (const char *fmt, const char *bfdver,
|
ld_bfd_assert_handler (const char *fmt, const char *bfdver,
|
||||||
const char *file, int line)
|
const char *file, int line)
|
||||||
{
|
{
|
||||||
(*default_bfd_assert_handler) (fmt, bfdver, file, line);
|
|
||||||
config.make_executable = FALSE;
|
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
|
int
|
||||||
@ -217,6 +227,9 @@ main (int argc, char **argv)
|
|||||||
leave no trace. */
|
leave no trace. */
|
||||||
default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler);
|
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);
|
xatexit (ld_cleanup);
|
||||||
|
|
||||||
/* Set up the sysroot directory. */
|
/* Set up the sysroot directory. */
|
||||||
|
Loading…
Reference in New Issue
Block a user