diff options
author | Alan Modra <amodra@bigpond.net.au> | 2012-06-25 01:49:07 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2012-06-25 01:49:07 +0000 |
commit | cf62de24b483829a634646198c87f771fb9e22ce (patch) | |
tree | 11b03e528acad2cd43ab6d5a3ad72db07c5e9055 /ld | |
parent | c4a0588076274d523b8cf9ac87032e06d8f129a7 (diff) | |
download | binutils-redhat-cf62de24b483829a634646198c87f771fb9e22ce.tar.gz |
* ldlang.c (load_symbols): Close file and set flags.loaded
after parsing script file.
(open_input_bfds): Don't segv on closed script.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldlang.c | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 58b6beb249..b9b325efa9 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2012-06-25 Alan Modra <amodra@gmail.com> + + * ldlang.c (load_symbols): Close file and set flags.loaded + after parsing script file. + (open_input_bfds): Don't segv on closed script. + 2012-06-24 H.J. Lu <hongjiu.lu@intel.com> * configure.tgt: Enable elf_k1om for x86_64-*-linux-gnux32. diff --git a/ld/ldlang.c b/ld/ldlang.c index ddf3be22eb..7dd2fa4f50 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2668,6 +2668,7 @@ load_symbols (lang_input_statement_type *entry, { bfd_error_type err; struct lang_input_statement_flags save_flags; + extern FILE *yyin; err = bfd_get_error (); @@ -2715,6 +2716,9 @@ load_symbols (lang_input_statement_type *entry, save_flags.missing_file |= input_flags.missing_file; input_flags = save_flags; pop_stat_ptr (); + fclose (yyin); + yyin = NULL; + entry->flags.loaded = TRUE; return TRUE; } @@ -3224,6 +3228,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) #endif && !s->input_statement.flags.whole_archive && s->input_statement.flags.loaded + && s->input_statement.the_bfd != NULL && bfd_check_format (s->input_statement.the_bfd, bfd_archive)) s->input_statement.flags.loaded = FALSE; @@ -3233,6 +3238,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode) && plugin_insert == NULL && s->input_statement.flags.loaded && s->input_statement.flags.add_DT_NEEDED_for_regular + && s->input_statement.the_bfd != NULL && ((s->input_statement.the_bfd->flags) & DYNAMIC) != 0 && plugin_should_reload (s->input_statement.the_bfd)) { |