Fix failure in exception_static_test.
authorCary Coutant <ccoutant@google.com>
Mon, 9 Mar 2015 17:10:29 +0000 (10:10 -0700)
committerCary Coutant <ccoutant@google.com>
Mon, 9 Mar 2015 17:12:06 +0000 (10:12 -0700)
commite16631979e847a6b39db3435bea7708b9f34b36d
tree81496b855792790e6ebe28028a07670e26737e53
parent9a9df97001814c87929826e6538762f3be07c4a4
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.
gold/ChangeLog
gold/ehframe.cc
gold/ehframe.h
gold/gold.cc
gold/layout.cc
gold/layout.h