diff options
author | Cary Coutant <ccoutant@gmail.com> | 2015-03-21 17:47:49 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2015-03-21 17:49:21 -0700 |
commit | bd9e0d4628f1265c42516f90c4f162cefa787294 (patch) | |
tree | af18a161c887c88b7ecc8cf55f528dcf51a2c82c /gold | |
parent | 71883406817425ea853f6a0dd7847f3e0a17dfc9 (diff) | |
download | gdb-bd9e0d4628f1265c42516f90c4f162cefa787294.zip gdb-bd9e0d4628f1265c42516f90c4f162cefa787294.tar.gz gdb-bd9e0d4628f1265c42516f90c4f162cefa787294.tar.bz2 |
Fix internal error in do_relocate_sections when using plugins.
In a previous patch for PR 14675, to fix a problem with
the .eh_frame section when static linking, I added a step to
finalize the .eh_frame section at the end of the first link
pass. This patch caused PR 18152, where a plugin-claimed
object caused a non-claimed object's layout to be deferred
until replacement files were read. The call to
finalize_eh_frame_section() is happening before the layout of
the deferred objects, leading to the internal error in
do_relocate_sections.
This patch moves the finalization of the .eh_frame section to
after deferred objects have been processed.
gold/
PR gold/14675
PR gold/18152
* gold.cc (queue_middle_tasks): Finalize .eh_frame after laying out
deferred objects.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/gold.cc | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index f94e170..30de67c 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2015-03-21 Cary Coutant <ccoutant@google.com> + + PR gold/18152 + * gold.cc (queue_middle_tasks): Finalize .eh_frame after laying out + deferred objects. + 2015-03-11 Cary Coutant <ccoutant@google.com> * options.cc (General_options::finalize): Don't allow -z relro diff --git a/gold/gold.cc b/gold/gold.cc index e345887..39843c2 100644 --- a/gold/gold.cc +++ b/gold/gold.cc @@ -492,9 +492,6 @@ queue_middle_tasks(const General_options& options, if (timer != NULL) timer->stamp(0); - // Finalize the .eh_frame section. - layout->finalize_eh_frame_section(); - // Add any symbols named with -u options to the symbol table. symtab->add_undefined_symbols_from_command_line(layout); @@ -555,6 +552,9 @@ queue_middle_tasks(const General_options& options, plugins->layout_deferred_objects(); } + // Finalize the .eh_frame section. + layout->finalize_eh_frame_section(); + /* If plugins have specified a section order, re-arrange input sections according to a specified section order. If --section-ordering-file is also specified, do not do anything here. */ |