<div dir="ltr">Awesome - thanks!</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 12, 2016 at 3:45 PM Rui Ueyama via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ruiu<br class="gmail_msg">
Date: Wed Oct 12 17:36:31 2016<br class="gmail_msg">
New Revision: 284068<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=284068&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=284068&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
Support GNU-style ZLIB-compressed input sections.<br class="gmail_msg">
<br class="gmail_msg">
Previously, we supported only SHF_COMPRESSED sections because it's<br class="gmail_msg">
new and it's the ELF standard. But there are object files compressed<br class="gmail_msg">
in the GNU style out there, so we had to support it.<br class="gmail_msg">
<br class="gmail_msg">
Sections compressed in the GNU style start with ".zdebug_" and<br class="gmail_msg">
contain different headers than the ELF standard's one. In this<br class="gmail_msg">
patch, getRawCompressedData is responsible to handle it.<br class="gmail_msg">
<br class="gmail_msg">
A tricky thing about GNU-style compressed sections is that we have<br class="gmail_msg">
to rename them when creating output sections. ".zdebug_" prefix<br class="gmail_msg">
implies the section is compressed. We need to rename ".zdebug_"<br class="gmail_msg">
".debug" because our output sections are not compressed.<br class="gmail_msg">
We do that in this patch.<br class="gmail_msg">
<br class="gmail_msg">
Modified:<br class="gmail_msg">
    lld/trunk/ELF/InputSection.cpp<br class="gmail_msg">
    lld/trunk/ELF/InputSection.h<br class="gmail_msg">
    lld/trunk/ELF/LinkerScript.cpp<br class="gmail_msg">
    lld/trunk/ELF/Writer.cpp<br class="gmail_msg">
    lld/trunk/ELF/Writer.h<br class="gmail_msg">
    lld/trunk/test/ELF/compressed-debug-input.s<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/ELF/InputSection.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/ELF/InputSection.cpp (original)<br class="gmail_msg">
+++ lld/trunk/ELF/InputSection.cpp Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -23,6 +23,7 @@<br class="gmail_msg">
 using namespace llvm;<br class="gmail_msg">
 using namespace llvm::ELF;<br class="gmail_msg">
 using namespace llvm::object;<br class="gmail_msg">
+using namespace llvm::support;<br class="gmail_msg">
 using namespace llvm::support::endian;<br class="gmail_msg">
<br class="gmail_msg">
 using namespace lld;<br class="gmail_msg">
@@ -40,12 +41,19 @@ static ArrayRef<uint8_t> getSectionConte<br class="gmail_msg">
   return check(File->getObj().getSectionContents(Hdr));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+// ELF supports ZLIB-compressed section. Returns true if the section<br class="gmail_msg">
+// is compressed.<br class="gmail_msg">
+template <class ELFT><br class="gmail_msg">
+static bool isCompressed(const typename ELFT::Shdr *Hdr, StringRef Name) {<br class="gmail_msg">
+  return (Hdr->sh_flags & SHF_COMPRESSED) || Name.startswith(".zdebug");<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 template <class ELFT><br class="gmail_msg">
 InputSectionBase<ELFT>::InputSectionBase(elf::ObjectFile<ELFT> *File,<br class="gmail_msg">
                                          const Elf_Shdr *Hdr, StringRef Name,<br class="gmail_msg">
                                          Kind SectionKind)<br class="gmail_msg">
     : InputSectionData(SectionKind, Name, getSectionContents(File, Hdr),<br class="gmail_msg">
-                       Hdr->sh_flags & SHF_COMPRESSED, !Config->GcSections),<br class="gmail_msg">
+                       isCompressed<ELFT>(Hdr, Name), !Config->GcSections),<br class="gmail_msg">
       Header(Hdr), File(File), Repl(this) {<br class="gmail_msg">
   // The ELF spec states that a value of 0 means the section has<br class="gmail_msg">
   // no alignment constraits.<br class="gmail_msg">
@@ -100,30 +108,62 @@ typename ELFT::uint InputSectionBase<ELF<br class="gmail_msg">
   llvm_unreachable("invalid section kind");<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
-template <class ELFT> void InputSectionBase<ELFT>::uncompress() {<br class="gmail_msg">
-  if (!zlib::isAvailable())<br class="gmail_msg">
-    fatal(getName(this) +<br class="gmail_msg">
-          ": build lld with zlib to enable compressed sections support");<br class="gmail_msg">
-<br class="gmail_msg">
-  // A compressed section consists of a header of Elf_Chdr type<br class="gmail_msg">
-  // followed by compressed data.<br class="gmail_msg">
+// Returns compressed data and its size when uncompressed.<br class="gmail_msg">
+template <class ELFT><br class="gmail_msg">
+std::pair<ArrayRef<uint8_t>, uint64_t><br class="gmail_msg">
+InputSectionBase<ELFT>::getElfCompressedData(ArrayRef<uint8_t> Data) {<br class="gmail_msg">
+  // Compressed section with Elf_Chdr is the ELF standard.<br class="gmail_msg">
   if (Data.size() < sizeof(Elf_Chdr))<br class="gmail_msg">
-    fatal("corrupt compressed section");<br class="gmail_msg">
-<br class="gmail_msg">
+    fatal(getName(this) + ": corrupted compressed section");<br class="gmail_msg">
   auto *Hdr = reinterpret_cast<const Elf_Chdr *>(Data.data());<br class="gmail_msg">
-  Data = Data.slice(sizeof(Elf_Chdr));<br class="gmail_msg">
-<br class="gmail_msg">
   if (Hdr->ch_type != ELFCOMPRESS_ZLIB)<br class="gmail_msg">
     fatal(getName(this) + ": unsupported compression type");<br class="gmail_msg">
+  return {Data.slice(sizeof(*Hdr)), Hdr->ch_size};<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+// Returns compressed data and its size when uncompressed.<br class="gmail_msg">
+template <class ELFT><br class="gmail_msg">
+std::pair<ArrayRef<uint8_t>, uint64_t><br class="gmail_msg">
+InputSectionBase<ELFT>::getRawCompressedData(ArrayRef<uint8_t> Data) {<br class="gmail_msg">
+  // Compressed sections without Elf_Chdr header contain this header<br class="gmail_msg">
+  // instead. This is a GNU extension.<br class="gmail_msg">
+  struct ZlibHeader {<br class="gmail_msg">
+    char magic[4]; // should be "ZLIB"<br class="gmail_msg">
+    char Size[8];  // Uncompressed size in big-endian<br class="gmail_msg">
+  };<br class="gmail_msg">
+<br class="gmail_msg">
+  if (Data.size() < sizeof(ZlibHeader))<br class="gmail_msg">
+    fatal(getName(this) + ": corrupted compressed section");<br class="gmail_msg">
+  auto *Hdr = reinterpret_cast<const ZlibHeader *>(Data.data());<br class="gmail_msg">
+  if (memcmp(Hdr->magic, "ZLIB", 4))<br class="gmail_msg">
+    fatal(getName(this) + ": broken ZLIB-compressed section");<br class="gmail_msg">
+  return {Data.slice(sizeof(*Hdr)), read64be(Hdr->Size)};<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+template <class ELFT> void InputSectionBase<ELFT>::uncompress() {<br class="gmail_msg">
+  if (!zlib::isAvailable())<br class="gmail_msg">
+    fatal(getName(this) +<br class="gmail_msg">
+          ": build lld with zlib to enable compressed sections support");<br class="gmail_msg">
<br class="gmail_msg">
-  StringRef Buf((const char *)Data.data(), Data.size());<br class="gmail_msg">
-  size_t UncompressedDataSize = Hdr->ch_size;<br class="gmail_msg">
-  UncompressedData.reset(new char[UncompressedDataSize]);<br class="gmail_msg">
-  if (zlib::uncompress(Buf, UncompressedData.get(), UncompressedDataSize) !=<br class="gmail_msg">
-      zlib::StatusOK)<br class="gmail_msg">
-    fatal(getName(this) + ": error uncompressing section");<br class="gmail_msg">
-  Data = ArrayRef<uint8_t>((uint8_t *)UncompressedData.get(),<br class="gmail_msg">
-                           UncompressedDataSize);<br class="gmail_msg">
+  // This section is compressed. Here we decompress it. Ideally, all<br class="gmail_msg">
+  // compressed sections have SHF_COMPRESSED bit and their contents<br class="gmail_msg">
+  // start with headers of Elf_Chdr type. However, sections whose<br class="gmail_msg">
+  // names start with ".zdebug_" don't have the bit and contains a raw<br class="gmail_msg">
+  // ZLIB-compressed data (which is a bad thing because section names<br class="gmail_msg">
+  // shouldn't be significant in ELF.) We need to be able to read both.<br class="gmail_msg">
+  ArrayRef<uint8_t> Buf; // Compressed data<br class="gmail_msg">
+  size_t Size;           // Uncompressed size<br class="gmail_msg">
+  if (Header->sh_flags & SHF_COMPRESSED)<br class="gmail_msg">
+    std::tie(Buf, Size) = getElfCompressedData(Data);<br class="gmail_msg">
+  else<br class="gmail_msg">
+    std::tie(Buf, Size) = getRawCompressedData(Data);<br class="gmail_msg">
+<br class="gmail_msg">
+  // Uncompress Buf.<br class="gmail_msg">
+  UncompressedData.reset(new uint8_t[Size]);<br class="gmail_msg">
+  if (zlib::uncompress(StringRef((const char *)Buf.data(), Buf.size()),<br class="gmail_msg">
+                       (char *)UncompressedData.get(), Size) != zlib::StatusOK)<br class="gmail_msg">
+    fatal(getName(this) + ": error while uncompressing section");<br class="gmail_msg">
+  Data = ArrayRef<uint8_t>(UncompressedData.get(), Size);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 template <class ELFT><br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/ELF/InputSection.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.h?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.h?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/ELF/InputSection.h (original)<br class="gmail_msg">
+++ lld/trunk/ELF/InputSection.h Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -67,7 +67,7 @@ public:<br class="gmail_msg">
   ArrayRef<uint8_t> getData(const SectionPiece &P) const;<br class="gmail_msg">
<br class="gmail_msg">
   // If a section is compressed, this has the uncompressed section data.<br class="gmail_msg">
-  std::unique_ptr<char[]> UncompressedData;<br class="gmail_msg">
+  std::unique_ptr<uint8_t[]> UncompressedData;<br class="gmail_msg">
<br class="gmail_msg">
   std::vector<Relocation> Relocations;<br class="gmail_msg">
 };<br class="gmail_msg">
@@ -118,6 +118,13 @@ public:<br class="gmail_msg">
   void uncompress();<br class="gmail_msg">
<br class="gmail_msg">
   void relocate(uint8_t *Buf, uint8_t *BufEnd);<br class="gmail_msg">
+<br class="gmail_msg">
+private:<br class="gmail_msg">
+  std::pair<ArrayRef<uint8_t>, uint64_t><br class="gmail_msg">
+  getElfCompressedData(ArrayRef<uint8_t> Data);<br class="gmail_msg">
+<br class="gmail_msg">
+  std::pair<ArrayRef<uint8_t>, uint64_t><br class="gmail_msg">
+  getRawCompressedData(ArrayRef<uint8_t> Data);<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
 template <class ELFT> InputSectionBase<ELFT> InputSectionBase<ELFT>::Discarded;<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/ELF/LinkerScript.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/ELF/LinkerScript.cpp (original)<br class="gmail_msg">
+++ lld/trunk/ELF/LinkerScript.cpp Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -351,7 +351,7 @@ void LinkerScript<ELFT>::createSections(<br class="gmail_msg">
   for (ObjectFile<ELFT> *F : Symtab<ELFT>::X->getObjectFiles())<br class="gmail_msg">
     for (InputSectionBase<ELFT> *S : F->getSections())<br class="gmail_msg">
       if (!isDiscarded(S) && !S->OutSec)<br class="gmail_msg">
-        addSection(Factory, S, getOutputSectionName(S->Name));<br class="gmail_msg">
+        addSection(Factory, S, getOutputSectionName(S->Name, Opt.Alloc));<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 // Sets value of a section-defined symbol. Two kinds of<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/ELF/Writer.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/ELF/Writer.cpp (original)<br class="gmail_msg">
+++ lld/trunk/ELF/Writer.cpp Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -91,7 +91,7 @@ private:<br class="gmail_msg">
 };<br class="gmail_msg">
 } // anonymous namespace<br class="gmail_msg">
<br class="gmail_msg">
-StringRef elf::getOutputSectionName(StringRef Name) {<br class="gmail_msg">
+StringRef elf::getOutputSectionName(StringRef Name, BumpPtrAllocator &Alloc) {<br class="gmail_msg">
   if (Config->Relocatable)<br class="gmail_msg">
     return Name;<br class="gmail_msg">
<br class="gmail_msg">
@@ -103,6 +103,11 @@ StringRef elf::getOutputSectionName(Stri<br class="gmail_msg">
     if (Name.startswith(V) || Name == Prefix)<br class="gmail_msg">
       return Prefix;<br class="gmail_msg">
   }<br class="gmail_msg">
+<br class="gmail_msg">
+  // ".zdebug_" is a prefix for ZLIB-compressed sections.<br class="gmail_msg">
+  // Because we decompressed input sections, we want to remove 'z'.<br class="gmail_msg">
+  if (Name.startswith(".zdebug_"))<br class="gmail_msg">
+    return StringSaver(Alloc).save(Twine(".") + Name.substr(2));<br class="gmail_msg">
   return Name;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
@@ -699,7 +704,8 @@ template <class ELFT> void Writer<ELFT>:<br class="gmail_msg">
       }<br class="gmail_msg">
       OutputSectionBase<ELFT> *Sec;<br class="gmail_msg">
       bool IsNew;<br class="gmail_msg">
-      std::tie(Sec, IsNew) = Factory.create(IS, getOutputSectionName(IS->Name));<br class="gmail_msg">
+      StringRef OutsecName = getOutputSectionName(IS->Name, Alloc);<br class="gmail_msg">
+      std::tie(Sec, IsNew) = Factory.create(IS, OutsecName);<br class="gmail_msg">
       if (IsNew)<br class="gmail_msg">
         OutputSections.push_back(Sec);<br class="gmail_msg">
       Sec->addSection(IS);<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/ELF/Writer.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.h?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.h?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/ELF/Writer.h (original)<br class="gmail_msg">
+++ lld/trunk/ELF/Writer.h Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -10,13 +10,11 @@<br class="gmail_msg">
 #ifndef LLD_ELF_WRITER_H<br class="gmail_msg">
 #define LLD_ELF_WRITER_H<br class="gmail_msg">
<br class="gmail_msg">
+#include "llvm/ADT/StringRef.h"<br class="gmail_msg">
+#include "llvm/Support/Allocator.h"<br class="gmail_msg">
 #include <cstdint><br class="gmail_msg">
 #include <memory><br class="gmail_msg">
<br class="gmail_msg">
-namespace llvm {<br class="gmail_msg">
-  class StringRef;<br class="gmail_msg">
-}<br class="gmail_msg">
-<br class="gmail_msg">
 namespace lld {<br class="gmail_msg">
 namespace elf {<br class="gmail_msg">
 template <class ELFT> class OutputSectionBase;<br class="gmail_msg">
@@ -41,7 +39,8 @@ struct PhdrEntry {<br class="gmail_msg">
   bool HasLMA = false;<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
-llvm::StringRef getOutputSectionName(llvm::StringRef Name);<br class="gmail_msg">
+llvm::StringRef getOutputSectionName(llvm::StringRef Name,<br class="gmail_msg">
+                                     llvm::BumpPtrAllocator &Alloc);<br class="gmail_msg">
<br class="gmail_msg">
 template <class ELFT> void reportDiscarded(InputSectionBase<ELFT> *IS);<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified: lld/trunk/test/ELF/compressed-debug-input.s<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/compressed-debug-input.s?rev=284068&r1=284067&r2=284068&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/compressed-debug-input.s?rev=284068&r1=284067&r2=284068&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lld/trunk/test/ELF/compressed-debug-input.s (original)<br class="gmail_msg">
+++ lld/trunk/test/ELF/compressed-debug-input.s Wed Oct 12 17:36:31 2016<br class="gmail_msg">
@@ -1,52 +1,73 @@<br class="gmail_msg">
 # REQUIRES: zlib<br class="gmail_msg">
<br class="gmail_msg">
 # RUN: llvm-mc -compress-debug-sections=zlib -filetype=obj -triple=x86_64-unknown-linux %s -o %t<br class="gmail_msg">
-# RUN: llvm-readobj -sections %t | FileCheck -check-prefix=COMPRESSED %s<br class="gmail_msg">
+# RUN: llvm-readobj -sections %t | FileCheck -check-prefix=ZLIB %s<br class="gmail_msg">
+# ZLIB:      Section {<br class="gmail_msg">
+# ZLIB:        Index: 2<br class="gmail_msg">
+# ZLIB:        Name: .debug_str<br class="gmail_msg">
+# ZLIB-NEXT:   Type: SHT_PROGBITS<br class="gmail_msg">
+# ZLIB-NEXT:   Flags [<br class="gmail_msg">
+# ZLIB-NEXT:     SHF_COMPRESSED (0x800)<br class="gmail_msg">
+# ZLIB-NEXT:     SHF_MERGE (0x10)<br class="gmail_msg">
+# ZLIB-NEXT:     SHF_STRINGS (0x20)<br class="gmail_msg">
+# ZLIB-NEXT:   ]<br class="gmail_msg">
+# ZLIB-NEXT:   Address:<br class="gmail_msg">
+# ZLIB-NEXT:   Offset:<br class="gmail_msg">
+# ZLIB-NEXT:   Size:<br class="gmail_msg">
+# ZLIB-NEXT:   Link:<br class="gmail_msg">
+# ZLIB-NEXT:   Info:<br class="gmail_msg">
+# ZLIB-NEXT:   AddressAlignment: 1<br class="gmail_msg">
+# ZLIB-NEXT:   EntrySize: 1<br class="gmail_msg">
+# ZLIB-NEXT: }<br class="gmail_msg">
<br class="gmail_msg">
-# COMPRESSED:      Section {<br class="gmail_msg">
-# COMPRESSED:        Index: 2<br class="gmail_msg">
-# COMPRESSED:        Name: .debug_str<br class="gmail_msg">
-# COMPRESSED-NEXT:   Type: SHT_PROGBITS<br class="gmail_msg">
-# COMPRESSED-NEXT:   Flags [<br class="gmail_msg">
-# COMPRESSED-NEXT:     SHF_COMPRESSED (0x800)<br class="gmail_msg">
-# COMPRESSED-NEXT:     SHF_MERGE (0x10)<br class="gmail_msg">
-# COMPRESSED-NEXT:     SHF_STRINGS (0x20)<br class="gmail_msg">
-# COMPRESSED-NEXT:   ]<br class="gmail_msg">
-# COMPRESSED-NEXT:   Address:<br class="gmail_msg">
-# COMPRESSED-NEXT:   Offset:<br class="gmail_msg">
-# COMPRESSED-NEXT:   Size: 66<br class="gmail_msg">
-# COMPRESSED-NEXT:   Link:<br class="gmail_msg">
-# COMPRESSED-NEXT:   Info:<br class="gmail_msg">
-# COMPRESSED-NEXT:   AddressAlignment: 1<br class="gmail_msg">
-# COMPRESSED-NEXT:   EntrySize: 1<br class="gmail_msg">
-# COMPRESSED-NEXT: }<br class="gmail_msg">
+# RUN: llvm-mc -compress-debug-sections=zlib-gnu -filetype=obj -triple=x86_64-unknown-linux %s -o %t2<br class="gmail_msg">
+# RUN: llvm-readobj -sections %t2 | FileCheck -check-prefix=GNU %s<br class="gmail_msg">
+# GNU:      Section {<br class="gmail_msg">
+# GNU:        Index: 2<br class="gmail_msg">
+# GNU:        Name: .zdebug_str<br class="gmail_msg">
+# GNU-NEXT:   Type: SHT_PROGBITS<br class="gmail_msg">
+# GNU-NEXT:   Flags [<br class="gmail_msg">
+# GNU-NEXT:     SHF_MERGE (0x10)<br class="gmail_msg">
+# GNU-NEXT:     SHF_STRINGS (0x20)<br class="gmail_msg">
+# GNU-NEXT:   ]<br class="gmail_msg">
+# GNU-NEXT:   Address:<br class="gmail_msg">
+# GNU-NEXT:   Offset:<br class="gmail_msg">
+# GNU-NEXT:   Size:<br class="gmail_msg">
+# GNU-NEXT:   Link:<br class="gmail_msg">
+# GNU-NEXT:   Info:<br class="gmail_msg">
+# GNU-NEXT:   AddressAlignment: 1<br class="gmail_msg">
+# GNU-NEXT:   EntrySize: 1<br class="gmail_msg">
+# GNU-NEXT: }<br class="gmail_msg">
<br class="gmail_msg">
 # RUN: ld.lld %t -o %t.so -shared<br class="gmail_msg">
-# RUN: llvm-readobj -sections -section-data %t.so | FileCheck -check-prefix=UNCOMPRESSED %s<br class="gmail_msg">
+# RUN: llvm-readobj -sections -section-data %t.so | FileCheck -check-prefix=DATA %s<br class="gmail_msg">
<br class="gmail_msg">
-# UNCOMPRESSED:      Section {<br class="gmail_msg">
-# UNCOMPRESSED:        Index: 6<br class="gmail_msg">
-# UNCOMPRESSED:        Name: .debug_str<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Type: SHT_PROGBITS<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Flags [<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     SHF_MERGE (0x10)<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     SHF_STRINGS (0x20)<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   ]<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Address: 0x0<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Offset: 0x1060<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Size: 69<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Link: 0<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   Info: 0<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   AddressAlignment: 1<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   EntrySize: 1<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   SectionData (<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     0000: 73686F72 7420756E 7369676E 65642069  |short unsigned i|<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     0010: 6E740075 6E736967 6E656420 696E7400  |nt.unsigned int.|<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     0020: 6C6F6E67 20756E73 69676E65 6420696E  |long unsigned in|<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     0030: 74006368 61720075 6E736967 6E656420  |t.char.unsigned |<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:     0040: 63686172 00                          |char.|<br class="gmail_msg">
-# UNCOMPRESSED-NEXT:   )<br class="gmail_msg">
-# UNCOMPRESSED-NEXT: }<br class="gmail_msg">
+# RUN: ld.lld %t2 -o %t2.so -shared<br class="gmail_msg">
+# RUN: llvm-readobj -sections -section-data %t2.so | FileCheck -check-prefix=DATA %s<br class="gmail_msg">
+<br class="gmail_msg">
+# DATA:      Section {<br class="gmail_msg">
+# DATA:        Index: 6<br class="gmail_msg">
+# DATA:        Name: .debug_str<br class="gmail_msg">
+# DATA-NEXT:   Type: SHT_PROGBITS<br class="gmail_msg">
+# DATA-NEXT:   Flags [<br class="gmail_msg">
+# DATA-NEXT:     SHF_MERGE (0x10)<br class="gmail_msg">
+# DATA-NEXT:     SHF_STRINGS (0x20)<br class="gmail_msg">
+# DATA-NEXT:   ]<br class="gmail_msg">
+# DATA-NEXT:   Address: 0x0<br class="gmail_msg">
+# DATA-NEXT:   Offset: 0x1060<br class="gmail_msg">
+# DATA-NEXT:   Size: 69<br class="gmail_msg">
+# DATA-NEXT:   Link: 0<br class="gmail_msg">
+# DATA-NEXT:   Info: 0<br class="gmail_msg">
+# DATA-NEXT:   AddressAlignment: 1<br class="gmail_msg">
+# DATA-NEXT:   EntrySize: 1<br class="gmail_msg">
+# DATA-NEXT:   SectionData (<br class="gmail_msg">
+# DATA-NEXT:     0000: 73686F72 7420756E 7369676E 65642069  |short unsigned i|<br class="gmail_msg">
+# DATA-NEXT:     0010: 6E740075 6E736967 6E656420 696E7400  |nt.unsigned int.|<br class="gmail_msg">
+# DATA-NEXT:     0020: 6C6F6E67 20756E73 69676E65 6420696E  |long unsigned in|<br class="gmail_msg">
+# DATA-NEXT:     0030: 74006368 61720075 6E736967 6E656420  |t.char.unsigned |<br class="gmail_msg">
+# DATA-NEXT:     0040: 63686172 00                          |char.|<br class="gmail_msg">
+# DATA-NEXT:   )<br class="gmail_msg">
+# DATA-NEXT: }<br class="gmail_msg">
<br class="gmail_msg">
 .section .debug_str,"MS",@progbits,1<br class="gmail_msg">
 .LASF2:<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div>