Skip to content
  • Cary Coutant's avatar
    Fix failure in exception_static_test. · e1663197
    Cary Coutant authored
    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.
    e1663197