Fix corrupted .eh_frame section with LTO and --gc-sections.
authorCary Coutant <ccoutant@google.com>
Tue, 25 Nov 2014 21:55:42 +0000 (13:55 -0800)
committerCary Coutant <ccoutant@google.com>
Tue, 25 Nov 2014 21:56:21 +0000 (13:56 -0800)
commitc924eb67e143722e4098d84c1cb91123a51c988f
tree2e1410cddd8f1a119ea4e76e73cf1b481ad55c7c
parent61e6682207163bfc02b2fc0c54c084cf8f2c5f10
Fix corrupted .eh_frame section with LTO and --gc-sections.

When --gc-sections is turned on during an LTO link, the .eh_frame sections
from deferred files are processed before those from the replacement files.
As a result, the section end-cap from crtendS.o is placed ahead of
the .eh_frame data from the replacement files. This patch fixes the bug
by skipping the layout of the deferred sections during GC pass 2.

gold/
PR gold/17639
* object.cc (Sized_relobj_file): Initialize is_deferred_layout_.
(Sized_relobj_file::do_layout): Handle deferred sections properly
during GC pass 1. Don't add reloc sections to deferred list twice.
* object.h (Sized_relobj_file::is_deferred_layout): New function.
(Sized_relobj_file::is_deferred_layout_): New data member.
gold/ChangeLog
gold/object.cc
gold/object.h