PATCH: Fix gold handling of relocations to discarded comdat sections
Cary Coutant
ccoutant@google.com
Thu May 1 01:31:00 GMT 2008
This patch fixes the way gold handles relocations to discarded comdat
sections. Like gnu ld, gold will now print a warning when it sees a
relocation to a discarded comdat section, unless the section being
relocated is a debug info section, .eh_frame, or .gcc_except_table. If
it's a debug info section, it will attempt to match the discarded
section with the corresponding kept section and apply the relocation
as if the relocation had referred to a symbol in the kept section.
Otherwise, it will substitute a zero.
This fixes a couple of problems observed by gdb with the .debug_ranges
section and unwinding through a signal handler.
Approved off list, and committed.
-cary
* layout.cc (Layout::include_section): Refactored check for debug
info section.
(Layout::add_comdat): Add new parameters. Change type
of signature parameter. Add object and shndx to signatures table.
(Layout::find_kept_object): New function.
* layout.h: Include <cstring>.
(Layout::is_debug_info_section): New function.
(Layout::add_comdat): Add new parameters.
(Layout::find_kept_object): New function.
(Layout::Kept_section): New struct.
(Layout::Signatures): Change type of map range.
* object.cc (Relobj::output_section_address): New function.
(Sized_relobj::include_section_group): Add new parameters. Change
calls to Layout::add_comdat. Change to build table of kept comdat
groups and table mapping discarded sections to kept sections.
(Sized_relobj::include_linkonce_section): Likewise. Add new parameter.
(Sized_relobj::do_layout): Change calls to include_section_group and
include_linkonce_section.
(Sized_relobj::do_finalize_local_symbols): Do not set local symbol
value to zero when section is discarded.
(Sized_relobj::map_to_kept_section): New function.
* object.h (Relobj::output_section_address): New function.
(Relobj::Comdat_group): New type.
(Relobj::find_comdat_group): New function.
(Relobj::Comdat_group_table): New type.
(Relobj::Kept_comdat_section): New type.
(Relobj::Kept_comdat_section_table): New type.
(Relobj::add_comdat_group): New function.
(Relobj::set_kept_comdat_section): New function.
(Relobj::get_kept_comdat_section): New function.
(Relobj::comdat_groups_): New field.
(Relobj::kept_comdat_sections_): New field.
(Symbol_value::input_value): Update comment.
(Sized_relobj::map_to_kept_section) New function.
(Sized_relobj::include_linkonce_section): Add new parameter.
* target-reloc.h (Comdat_behavior): New type.
(get_comdat_behavior): New function.
(relocate_section): Add code to map a discarded section to the
corresponding kept section when applying a relocation.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: comdat-patch-c.txt
URL: <https://sourceware.org/pipermail/binutils/attachments/20080501/3b224827/attachment.txt>
More information about the Binutils
mailing list