This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix internal error in do_relocate_sections when using plugins.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bd9e0d4628f1265c42516f90c4f162cefa787294

commit bd9e0d4628f1265c42516f90c4f162cefa787294
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Sat Mar 21 17:47:49 2015 -0700

    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.

Diff:
---
 gold/ChangeLog | 6 ++++++
 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.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]