diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2012-04-26 13:51:14 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2012-04-26 13:51:14 +0000 |
commit | 3b66a14146bd861b160d19a101ba63dceb47c55f (patch) | |
tree | 6c815af71b7f50a183d0ae2213a12772dfeed8b8 /ld | |
parent | 2b56b3f35a62c569ff20889aa22aef7fde73f81d (diff) | |
download | gdb-3b66a14146bd861b160d19a101ba63dceb47c55f.zip gdb-3b66a14146bd861b160d19a101ba63dceb47c55f.tar.gz gdb-3b66a14146bd861b160d19a101ba63dceb47c55f.tar.bz2 |
Make bfd asserts cause linker errors.
* ldmain.c (default_bfd_assert_handler): New variable.
(ld_bfd_assert_handler): New function.
(main): Call bfd_set_assert_handler.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/ldmain.c | 18 |
2 files changed, 25 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index d1b7e7a..94aa546 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2012-04-26 Hans-Peter Nilsson <hp@axis.com> + + Make bfd asserts cause linker errors. + * ldmain.c (default_bfd_assert_handler): New variable. + (ld_bfd_assert_handler): New function. + (main): Call bfd_set_assert_handler. + 2012-04-24 Alan Modra <amodra@gmail.com> * ld/ldlang.c (size_input_section): Use sec_info_type rather than diff --git a/ld/ldmain.c b/ld/ldmain.c index b2810a7..3bdaf4d 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -160,6 +160,8 @@ static struct bfd_link_callbacks link_callbacks = ldlang_override_segment_assignment }; +static bfd_assert_handler_type default_bfd_assert_handler; + struct bfd_link_info link_info; static void @@ -173,6 +175,17 @@ 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. */ + +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; +} + int main (int argc, char **argv) { @@ -199,6 +212,11 @@ main (int argc, char **argv) bfd_set_error_program_name (program_name); + /* We want to notice and fail on those nasty BFD assertions which are + likely to signal incorrect output being generated but otherwise may + leave no trace. */ + default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler); + xatexit (ld_cleanup); /* Set up the sysroot directory. */ |