Temporarily revert r270070

It broke buildbot:
http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/4817/steps/ninja%20check%201/logs/stdio

Actually it is just because D20273 not yet commited, but these 2 were crossing with each other,
and I`ll better find the way to land them separatelly soon.

Initial commit message:

[llvm-mc] - Teach llvm-mc to generate compressed debug sections in zlib style.

Before this patch llvm-mc generated zlib-gnu styled sections. 
That means no SHF_COMPRESSED flag was set, magic 'zlib' signature
was used in combination with full size field. Sections were renamed to "*.z*".
This patch reimplements the compression style to zlib one as zlib-gnu looks
to be depricated everywhere.

Differential revision: http://reviews.llvm.org/D20331

llvm-svn: 270075
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 7250806..900dcf5 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -979,6 +979,26 @@
   return RelaSection;
 }
 
+// Include the debug info compression header:
+// "ZLIB" followed by 8 bytes representing the uncompressed size of the section,
+// useful for consumers to preallocate a buffer to decompress into.
+static bool
+prependCompressionHeader(uint64_t Size,
+                         SmallVectorImpl<char> &CompressedContents) {
+  const StringRef Magic = "ZLIB";
+  if (Size <= Magic.size() + sizeof(Size) + CompressedContents.size())
+    return false;
+  if (sys::IsLittleEndianHost)
+    sys::swapByteOrder(Size);
+  CompressedContents.insert(CompressedContents.begin(),
+                            Magic.size() + sizeof(Size), 0);
+  std::copy(Magic.begin(), Magic.end(), CompressedContents.begin());
+  std::copy(reinterpret_cast<char *>(&Size),
+            reinterpret_cast<char *>(&Size + 1),
+            CompressedContents.begin() + Magic.size());
+  return true;
+}
+
 void ELFObjectWriter::writeSectionData(const MCAssembler &Asm, MCSection &Sec,
                                        const MCAsmLayout &Layout) {
   MCSectionELF &Section = static_cast<MCSectionELF &>(Sec);
@@ -1009,30 +1029,12 @@
     return;
   }
 
-  uint64_t HdrSize =
-      is64Bit() ? sizeof(ELF::Elf32_Chdr) : sizeof(ELF::Elf64_Chdr);
-  if (UncompressedData.size() <= HdrSize + CompressedContents.size()) {
+  if (!prependCompressionHeader(UncompressedData.size(), CompressedContents)) {
     getStream() << UncompressedData;
     return;
   }
-
-  // Set the compressed flag. That is zlib style.
-  Section.setFlags(Section.getFlags() | ELF::SHF_COMPRESSED);
-
-  // Platform specific header is followed by compressed data.
-  if (is64Bit()) {
-    // Write Elf64_Chdr header.
-    write(static_cast<ELF::Elf64_Word>(ELF::ELFCOMPRESS_ZLIB));
-    write(static_cast<ELF::Elf64_Word>(0)); // ch_reserved field.
-    write(static_cast<ELF::Elf64_Xword>(UncompressedData.size()));
-    write(static_cast<ELF::Elf64_Xword>(Sec.getAlignment()));
-  } else {
-    // Write Elf32_Chdr header otherwise.
-    write(static_cast<ELF::Elf32_Word>(ELF::ELFCOMPRESS_ZLIB));
-    write(static_cast<ELF::Elf32_Word>(UncompressedData.size()));
-    write(static_cast<ELF::Elf32_Word>(Sec.getAlignment()));
-  }
-
+  Asm.getContext().renameELFSection(&Section,
+                                    (".z" + SectionName.drop_front(1)).str());
   getStream() << CompressedContents;
 }
 
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index aa15ff6..67463e5 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -285,6 +285,22 @@
              Segment, Section, TypeAndAttributes, Reserved2, Kind, Begin);
 }
 
+void MCContext::renameELFSection(MCSectionELF *Section, StringRef Name) {
+  StringRef GroupName;
+  if (const MCSymbol *Group = Section->getGroup())
+    GroupName = Group->getName();
+
+  unsigned UniqueID = Section->getUniqueID();
+  ELFUniquingMap.erase(
+      ELFSectionKey{Section->getSectionName(), GroupName, UniqueID});
+  auto I = ELFUniquingMap.insert(std::make_pair(
+                                     ELFSectionKey{Name, GroupName, UniqueID},
+                                     Section))
+               .first;
+  StringRef CachedName = I->first.SectionName;
+  const_cast<MCSectionELF *>(Section)->setSectionName(CachedName);
+}
+
 MCSectionELF *MCContext::createELFRelSection(StringRef Name, unsigned Type,
                                              unsigned Flags, unsigned EntrySize,
                                              const MCSymbolELF *Group,