aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/layout.cc9
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: