diff options
author | Ian Lance Taylor <ian@airs.com> | 2008-12-12 02:41:39 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2008-12-12 02:41:39 +0000 |
commit | c25081787282f9acff5b23cf4f0b110857f03286 (patch) | |
tree | 1ca200a09273dc7d1b650914d315f55270896776 | |
parent | 5f3563ea7a07d0c74d23f6c56281fb27dfc514d8 (diff) | |
download | gdb-c25081787282f9acff5b23cf4f0b110857f03286.zip gdb-c25081787282f9acff5b23cf4f0b110857f03286.tar.gz gdb-c25081787282f9acff5b23cf4f0b110857f03286.tar.bz2 |
PR 7091
* target-reloc.h (Default_scan_relocatable_relocs): For each
function, map r_type == 0 to RELOC_DISCARD.
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/target-reloc.h | 24 |
2 files changed, 26 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 85482bb..28ba299 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2008-12-11 Ian Lance Taylor <iant@google.com> + + PR 7091 + * target-reloc.h (Default_scan_relocatable_relocs): For each + function, map r_type == 0 to RELOC_DISCARD. + 2008-12-10 Cary Coutant <ccoutant@google.com> * layout.cc (Layout::add_comdat): Allow COMDAT group from a replacement diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 935d76b..3205e36 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -308,14 +308,24 @@ class Default_scan_relocatable_relocs // Return the strategy to use for a local symbol which is not a // section symbol, given the relocation type. inline Relocatable_relocs::Reloc_strategy - local_non_section_strategy(unsigned int, Relobj*) - { return Relocatable_relocs::RELOC_COPY; } + local_non_section_strategy(unsigned int r_type, Relobj*) + { + // We assume that relocation type 0 is NONE. Targets which are + // different must override. + if (r_type == 0) + return Relocatable_relocs::RELOC_DISCARD; + return Relocatable_relocs::RELOC_COPY; + } // Return the strategy to use for a local symbol which is a section // symbol, given the relocation type. inline Relocatable_relocs::Reloc_strategy local_section_strategy(unsigned int r_type, Relobj* object) { + // We assume that relocation type 0 is NONE. Targets which are + // different must override. + if (r_type == 0) + return Relocatable_relocs::RELOC_DISCARD; if (sh_type == elfcpp::SHT_RELA) return Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_RELA; else @@ -342,8 +352,14 @@ class Default_scan_relocatable_relocs // Return the strategy to use for a global symbol, given the // relocation type, the object, and the symbol index. inline Relocatable_relocs::Reloc_strategy - global_strategy(unsigned int, Relobj*, unsigned int) - { return Relocatable_relocs::RELOC_COPY; } + global_strategy(unsigned int r_type, Relobj*, unsigned int) + { + // We assume that relocation type 0 is NONE. Targets which are + // different must override. + if (r_type == 0) + return Relocatable_relocs::RELOC_DISCARD; + return Relocatable_relocs::RELOC_COPY; + } }; // Scan relocs during a relocatable link. This is a default |