diff options
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | gold/layout.cc | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index d73e1cd..f0f2c13 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2008-07-03 Ian Lance Taylor <iant@google.com> + + * layout.cc (Layout::include_section): Do not discard unrecognized + SHT_STRTAB sections. + 2008-06-30 Craig Silverstein <csilvers@cs.stanford.edu> * script.cc (Lex::can_continue_name): Make '?' allowable in diff --git a/gold/layout.cc b/gold/layout.cc index 2c8c524..62ccaae 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -210,12 +210,19 @@ Layout::include_section(Sized_relobj<size, big_endian>*, const char* name, case elfcpp::SHT_NULL: case elfcpp::SHT_SYMTAB: case elfcpp::SHT_DYNSYM: - case elfcpp::SHT_STRTAB: case elfcpp::SHT_HASH: case elfcpp::SHT_DYNAMIC: case elfcpp::SHT_SYMTAB_SHNDX: return false; + case elfcpp::SHT_STRTAB: + // Discard the sections which have special meanings in the ELF + // ABI. Keep others (e.g., .stabstr). We could also do this by + // checking the sh_link fields of the appropriate sections. + return (strcmp(name, ".dynstr") != 0 + && strcmp(name, ".strtab") != 0 + && strcmp(name, ".shstrtab") != 0); + case elfcpp::SHT_RELA: case elfcpp::SHT_REL: case elfcpp::SHT_GROUP: |