summaryrefslogtreecommitdiff
path: root/gold/ChangeLog
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2015-03-09 10:10:29 -0700
committerCary Coutant <ccoutant@google.com>2015-03-09 10:12:06 -0700
commite16631979e847a6b39db3435bea7708b9f34b36d (patch)
tree81496b855792790e6ebe28028a07670e26737e53 /gold/ChangeLog
parent9a9df97001814c87929826e6538762f3be07c4a4 (diff)
Fix failure in exception_static_test.
Because the __EH_FRAME_BEGIN__ symbol is provided in an empty .eh_frame section in crtbeginT.o, if crt1.o has a non-empty .eh_frame section, we place all optimized .eh_frame sections into the output section ahead of the __EH_FRAME_BEGIN__ symbol, which breaks EH for statically-linked binaries. This patch fixes the problem by delaying the attachment of the optimized .eh_frame sections to the output section until we see the end marker section (or to the end of pass 1 if we never see an end marker). gold/ PR gold/14675 * ehframe.cc (Eh_frame::add_ehframe_input_section): Change return type; return enum indicating whether .eh_frame section is empty, optimizable, unrecognized, or an end marker. Adjust explicit instantiations. * ehframe.h (Eh_frame::Eh_frame_section_disposition): New enum type. (Eh_frame::add_ehframe_input_section): Change return type. * gold.cc (queue_middle_tasks): Call Layout::finalize_eh_frame_section. * layout.cc (Layout::layout_eh_frame): Don't add optimized sections to the .eh_frame output section until we see the end marker. (Layout::finalize_eh_frame_section): New. * layout.h: (Layout::finalize_eh_frame_section): New.
Diffstat (limited to 'gold/ChangeLog')
-rw-r--r--gold/ChangeLog14
1 files changed, 14 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 24d3560774..14a8610e35 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,17 @@
+2015-03-09 Cary Coutant <ccoutant@google.com>
+
+ PR gold/14675
+ * ehframe.cc (Eh_frame::add_ehframe_input_section): Change return type;
+ return enum indicating whether .eh_frame section is empty, optimizable,
+ unrecognized, or an end marker. Adjust explicit instantiations.
+ * ehframe.h (Eh_frame::Eh_frame_section_disposition): New enum type.
+ (Eh_frame::add_ehframe_input_section): Change return type.
+ * gold.cc (queue_middle_tasks): Call Layout::finalize_eh_frame_section.
+ * layout.cc (Layout::layout_eh_frame): Don't add optimized sections
+ to the .eh_frame output section until we see the end marker.
+ (Layout::finalize_eh_frame_section): New.
+ * layout.h: (Layout::finalize_eh_frame_section): New.
+
2015-03-05 H.J. Lu <hongjiu.lu@intel.com>
* output.cc (Relobj::initialize_input_to_output_map<size>):