summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2017-06-05 12:49:21 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2017-06-05 12:49:21 +0000
commit60a0ea161e81c7edcf77c68c3f7b998b448eddc8 (patch)
tree5e0d1b4e45ca54c19972c3fa1918be316617c928
parentfbe891ee05a5f6594025c800b468908911217500 (diff)
downloadbcm5719-llvm-60a0ea161e81c7edcf77c68c3f7b998b448eddc8.tar.gz
bcm5719-llvm-60a0ea161e81c7edcf77c68c3f7b998b448eddc8.zip
[ELF] - Make LLD remove gnu-lib compression prefix (".z") after decompression when using -r
This is PR33289. Previously LLD leaved section naming as is and that lead to wrong result, because we decompress sections when using -r, and hence should remove ".z" prefix. Differential revision: https://reviews.llvm.org/D33885 llvm-svn: 304711
-rw-r--r--lld/ELF/Writer.cpp9
-rw-r--r--lld/test/ELF/relocatable-compressed-input.s45
2 files changed, 50 insertions, 4 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 79ca67e7acd..4b36d884071 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -93,6 +93,11 @@ private:
} // anonymous namespace
StringRef elf::getOutputSectionName(StringRef Name) {
+ // ".zdebug_" is a prefix for ZLIB-compressed sections.
+ // Because we decompressed input sections, we want to remove 'z'.
+ if (Name.startswith(".zdebug_"))
+ return Saver.save("." + Name.substr(2));
+
if (Config->Relocatable)
return Name;
@@ -122,10 +127,6 @@ StringRef elf::getOutputSectionName(StringRef Name) {
if (Name == "COMMON")
return ".bss";
- // ".zdebug_" is a prefix for ZLIB-compressed sections.
- // Because we decompressed input sections, we want to remove 'z'.
- if (Name.startswith(".zdebug_"))
- return Saver.save("." + Name.substr(2));
return Name;
}
diff --git a/lld/test/ELF/relocatable-compressed-input.s b/lld/test/ELF/relocatable-compressed-input.s
new file mode 100644
index 00000000000..bdfb2073a1e
--- /dev/null
+++ b/lld/test/ELF/relocatable-compressed-input.s
@@ -0,0 +1,45 @@
+# REQUIRES: zlib
+
+# RUN: llvm-mc -compress-debug-sections=zlib-gnu -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
+# RUN: llvm-readobj -sections %t1 | FileCheck -check-prefix=GNU %s
+# GNU: Name: .zdebug_str
+
+# RUN: ld.lld %t1 -o %t2 -r
+# RUN: llvm-readobj -sections -section-data %t2 | FileCheck %s
+
+## Check we decompress section and remove ".z" prefix specific for zlib-gnu compression.
+# CHECK: Section {
+# CHECK: Index:
+# CHECK: Name: .debug_str
+# CHECK-NEXT: Type: SHT_PROGBITS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: SHF_MERGE
+# CHECK-NEXT: SHF_STRINGS
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address:
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: Size:
+# CHECK-NEXT: Link:
+# CHECK-NEXT: Info:
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 1
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: {{.*}} |short unsigned i|
+# CHECK-NEXT: 0010: {{.*}} |nt.unsigned int.|
+# CHECK-NEXT: 0020: {{.*}} |long unsigned in|
+# CHECK-NEXT: 0030: {{.*}} |t.char.unsigned |
+# CHECK-NEXT: 0040: {{.*}} |char.|
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+
+.section .debug_str,"MS",@progbits,1
+.LASF2:
+ .string "short unsigned int"
+.LASF3:
+ .string "unsigned int"
+.LASF0:
+ .string "long unsigned int"
+.LASF8:
+ .string "char"
+.LASF1:
+ .string "unsigned char"
OpenPOWER on IntegriCloud