[lld] r318548 - COFF: Stop emitting a non-standard COFF symbol table into PEs.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 17 11:51:20 PST 2017


Author: pcc
Date: Fri Nov 17 11:51:20 2017
New Revision: 318548

URL: http://llvm.org/viewvc/llvm-project?rev=318548&view=rev
Log:
COFF: Stop emitting a non-standard COFF symbol table into PEs.

Now that our support for PDB emission is reasonably good, there is
no longer a need to emit a COFF symbol table.

Also fix a bug where we would fail to emit a string table for long
section names if /debug was not specified.

Differential Revision: https://reviews.llvm.org/D40189

Removed:
    lld/trunk/test/COFF/strtab-size.s
    lld/trunk/test/COFF/symtab.test
Modified:
    lld/trunk/COFF/Driver.cpp
    lld/trunk/COFF/Options.td
    lld/trunk/COFF/Writer.cpp
    lld/trunk/test/COFF/delayimports32.test
    lld/trunk/test/COFF/long-section-name.test
    lld/trunk/test/COFF/lto-opt-level.ll

Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Fri Nov 17 11:51:20 2017
@@ -1012,8 +1012,6 @@ void LinkerDriver::link(ArrayRef<const c
       Args.hasFlag(OPT_allowisolation, OPT_allowisolation_no, true);
   Config->NxCompat = Args.hasFlag(OPT_nxcompat, OPT_nxcompat_no, true);
   Config->TerminalServerAware = Args.hasFlag(OPT_tsaware, OPT_tsaware_no, true);
-  if (Args.hasArg(OPT_nosymtab))
-    Config->WriteSymtab = false;
 
   Config->MapFile = getMapFile(Args);
 

Modified: lld/trunk/COFF/Options.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Options.td?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/COFF/Options.td (original)
+++ lld/trunk/COFF/Options.td Fri Nov 17 11:51:20 2017
@@ -120,7 +120,6 @@ def help_q : Flag<["/?", "-?"], "">, Ali
 def debug_dwarf : F<"debug:dwarf">;
 def export_all_symbols : F<"export-all-symbols">;
 def nopdb : F<"nopdb">, HelpText<"Disable PDB generation for DWARF users">;
-def nosymtab : F<"nosymtab">;
 def lldmingw : F<"lldmingw">;
 def msvclto : F<"msvclto">;
 def output_def : Joined<["/", "-"], "output-def:">;

Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Fri Nov 17 11:51:20 2017
@@ -118,7 +118,7 @@ private:
   void createExportTable();
   void assignAddresses();
   void removeEmptySections();
-  void createSymbolAndStringTable();
+  void createStringTable();
   void openFile(StringRef OutputPath);
   template <typename PEHeaderTy> void writeHeader();
   void createSEHTable(OutputSection *RData);
@@ -127,9 +127,6 @@ private:
   void writeBuildId();
   void sortExceptionTable();
 
-  llvm::Optional<coff_symbol16> createSymbol(Defined *D);
-  size_t addEntryToStringTable(StringRef Str);
-
   OutputSection *findSection(StringRef Name);
   OutputSection *createSection(StringRef Name);
   void addBaserels(OutputSection *Dest);
@@ -154,7 +151,7 @@ private:
   ArrayRef<uint8_t> SectionTable;
 
   uint64_t FileSize;
-  uint32_t PointerToSymbolTable = 0;
+  uint32_t PointerToStringTable = 0;
   uint64_t SizeOfImage;
   uint64_t SizeOfHeaders;
 };
@@ -293,7 +290,7 @@ void Writer::run() {
   assignAddresses();
   removeEmptySections();
   setSectionPermissions();
-  createSymbolAndStringTable();
+  createStringTable();
 
   // We must do this before opening the output file, as it depends on being able
   // to read the contents of the existing output file.
@@ -470,72 +467,7 @@ void Writer::removeEmptySections() {
     Sec->SectionIndex = Idx++;
 }
 
-size_t Writer::addEntryToStringTable(StringRef Str) {
-  assert(Str.size() > COFF::NameSize);
-  size_t OffsetOfEntry = Strtab.size() + 4; // +4 for the size field
-  Strtab.insert(Strtab.end(), Str.begin(), Str.end());
-  Strtab.push_back('\0');
-  return OffsetOfEntry;
-}
-
-Optional<coff_symbol16> Writer::createSymbol(Defined *Def) {
-  // Relative symbols are unrepresentable in a COFF symbol table.
-  if (isa<DefinedSynthetic>(Def))
-    return None;
-
-  // Don't write dead symbols or symbols in codeview sections to the symbol
-  // table.
-  if (!Def->isLive())
-    return None;
-  if (auto *D = dyn_cast<DefinedRegular>(Def))
-    if (D->getChunk()->isCodeView())
-      return None;
-
-  coff_symbol16 Sym;
-  StringRef Name = Def->getName();
-  if (Name.size() > COFF::NameSize) {
-    Sym.Name.Offset.Zeroes = 0;
-    Sym.Name.Offset.Offset = addEntryToStringTable(Name);
-  } else {
-    memset(Sym.Name.ShortName, 0, COFF::NameSize);
-    memcpy(Sym.Name.ShortName, Name.data(), Name.size());
-  }
-
-  if (auto *D = dyn_cast<DefinedCOFF>(Def)) {
-    COFFSymbolRef Ref = D->getCOFFSymbol();
-    Sym.Type = Ref.getType();
-    Sym.StorageClass = Ref.getStorageClass();
-  } else {
-    Sym.Type = IMAGE_SYM_TYPE_NULL;
-    Sym.StorageClass = IMAGE_SYM_CLASS_EXTERNAL;
-  }
-  Sym.NumberOfAuxSymbols = 0;
-
-  switch (Def->kind()) {
-  case Symbol::DefinedAbsoluteKind:
-    Sym.Value = Def->getRVA();
-    Sym.SectionNumber = IMAGE_SYM_ABSOLUTE;
-    break;
-  default: {
-    uint64_t RVA = Def->getRVA();
-    OutputSection *Sec = nullptr;
-    for (OutputSection *S : OutputSections) {
-      if (S->getRVA() > RVA)
-        break;
-      Sec = S;
-    }
-    Sym.Value = RVA - Sec->getRVA();
-    Sym.SectionNumber = Sec->SectionIndex;
-    break;
-  }
-  }
-  return Sym;
-}
-
-void Writer::createSymbolAndStringTable() {
-  if (!Config->Debug || !Config->WriteSymtab)
-    return;
-
+void Writer::createStringTable() {
   // Name field in the section table is 8 byte long. Longer names need
   // to be written to the string table. First, construct string table.
   for (OutputSection *Sec : OutputSections) {
@@ -549,31 +481,19 @@ void Writer::createSymbolAndStringTable(
     // to libunwind.
     if ((Sec->getPermissions() & IMAGE_SCN_MEM_DISCARDABLE) == 0)
       continue;
-    Sec->setStringTableOff(addEntryToStringTable(Name));
+    Sec->setStringTableOff(Strtab.size() + 4); // +4 for the size field
+    Strtab.insert(Strtab.end(), Name.begin(), Name.end());
+    Strtab.push_back('\0');
   }
 
-  for (ObjFile *File : ObjFile::Instances) {
-    for (Symbol *B : File->getSymbols()) {
-      auto *D = dyn_cast<Defined>(B);
-      if (!D || D->WrittenToSymtab)
-        continue;
-      D->WrittenToSymtab = true;
-
-      if (Optional<coff_symbol16> Sym = createSymbol(D))
-        OutputSymtab.push_back(*Sym);
-    }
-  }
+  if (Strtab.empty())
+    return;
 
   OutputSection *LastSection = OutputSections.back();
-  // We position the symbol table to be adjacent to the end of the last section.
-  uint64_t FileOff = LastSection->getFileOff() +
-                     alignTo(LastSection->getRawSize(), SectorSize);
-  if (!OutputSymtab.empty()) {
-    PointerToSymbolTable = FileOff;
-    FileOff += OutputSymtab.size() * sizeof(coff_symbol16);
-  }
-  FileOff += Strtab.size() + 4;
-  FileSize = alignTo(FileOff, SectorSize);
+  // We position the string table to be adjacent to the end of the last section.
+  PointerToStringTable = LastSection->getFileOff() +
+                         alignTo(LastSection->getRawSize(), SectorSize);
+  FileSize = alignTo(PointerToStringTable + Strtab.size() + 4, SectorSize);
 }
 
 // Visits all sections to assign incremental, non-overlapping RVAs and
@@ -760,22 +680,18 @@ template <typename PEHeaderTy> void Writ
   SectionTable = ArrayRef<uint8_t>(
       Buf - OutputSections.size() * sizeof(coff_section), Buf);
 
-  if (OutputSymtab.empty())
+  // The string table normally follows the symbol table, but because we always
+  // emit an empty symbol table, the string table appears at the location of the
+  // symbol table.
+  COFF->PointerToSymbolTable = PointerToStringTable;
+  COFF->NumberOfSymbols = 0;
+  if (Strtab.empty())
     return;
 
-  COFF->PointerToSymbolTable = PointerToSymbolTable;
-  uint32_t NumberOfSymbols = OutputSymtab.size();
-  COFF->NumberOfSymbols = NumberOfSymbols;
-  auto *SymbolTable = reinterpret_cast<coff_symbol16 *>(
-      Buffer->getBufferStart() + COFF->PointerToSymbolTable);
-  for (size_t I = 0; I != NumberOfSymbols; ++I)
-    SymbolTable[I] = OutputSymtab[I];
-  // Create the string table, it follows immediately after the symbol table.
-  // The first 4 bytes is length including itself.
-  Buf = reinterpret_cast<uint8_t *>(&SymbolTable[NumberOfSymbols]);
-  write32le(Buf, Strtab.size() + 4);
-  if (!Strtab.empty())
-    memcpy(Buf + 4, Strtab.data(), Strtab.size());
+  auto *StringTable = Buffer->getBufferStart() + PointerToStringTable;
+  // Create the string table. The first 4 bytes is length including itself.
+  write32le(StringTable, Strtab.size() + 4);
+  memcpy(StringTable + 4, Strtab.data(), Strtab.size());
 }
 
 void Writer::openFile(StringRef Path) {

Modified: lld/trunk/test/COFF/delayimports32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/delayimports32.test?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/test/COFF/delayimports32.test (original)
+++ lld/trunk/test/COFF/delayimports32.test Fri Nov 17 11:51:20 2017
@@ -73,7 +73,7 @@ BASEREL-NEXT: ]
 
 DISASM:      202b:      68 20 10 40 00  pushl   $4198432
 DISASM-NEXT: 2030:      68 00 40 40 00  pushl   $4210688
-DISASM-NEXT: 2035:      e8 c6 ff ff ff  calll   -58 <_main at 0>
+DISASM-NEXT: 2035:      e8 c6 ff ff ff  calll   -58 <.text>
 DISASM-NEXT: 203a:      5a      popl    %edx
 DISASM-NEXT: 203b:      59      popl    %ecx
 DISASM-NEXT: 203c:      ff e0   jmpl    *%eax
@@ -81,7 +81,7 @@ DISASM-NEXT: 203e:      51      pushl
 DISASM-NEXT: 203f:      52      pushl   %edx
 DISASM-NEXT: 2040:      68 24 10 40 00  pushl   $4198436
 DISASM-NEXT: 2045:      68 00 40 40 00  pushl   $4210688
-DISASM-NEXT: 204a:      e8 b1 ff ff ff  calll   -79 <_main at 0>
+DISASM-NEXT: 204a:      e8 b1 ff ff ff  calll   -79 <.text>
 DISASM-NEXT: 204f:      5a      popl    %edx
 DISASM-NEXT: 2050:      59      popl    %ecx
 DISASM-NEXT: 2051:      ff e0   jmpl    *%eax

Modified: lld/trunk/test/COFF/long-section-name.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/long-section-name.test?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/test/COFF/long-section-name.test (original)
+++ lld/trunk/test/COFF/long-section-name.test Fri Nov 17 11:51:20 2017
@@ -1,6 +1,8 @@
 # RUN: yaml2obj < %s > %t.obj
-# RUN: lld-link /debug /out:%t.exe /entry:main %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
 # RUN: llvm-readobj -sections %t.exe | FileCheck %s
+# RUN: lld-link /debug /out:%t2.exe /entry:main %t.obj
+# RUN: llvm-readobj -sections %t2.exe | FileCheck %s
 
 # CHECK: Name: .eh_fram (
 # CHECK: Name: .data_long_section_name

Modified: lld/trunk/test/COFF/lto-opt-level.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-opt-level.ll?rev=318548&r1=318547&r2=318548&view=diff
==============================================================================
--- lld/trunk/test/COFF/lto-opt-level.ll (original)
+++ lld/trunk/test/COFF/lto-opt-level.ll Fri Nov 17 11:51:20 2017
@@ -1,10 +1,10 @@
 ; RUN: llvm-as -o %t.obj %s
-; RUN: lld-link /out:%t0.exe /entry:main /subsystem:console /opt:lldlto=0 /debug %t.obj
-; RUN: llvm-nm %t0.exe | FileCheck --check-prefix=CHECK-O0 %s
-; RUN: lld-link /out:%t2.exe /entry:main /subsystem:console /opt:lldlto=2 /debug %t.obj
-; RUN: llvm-nm %t2.exe | FileCheck --check-prefix=CHECK-O2 %s
-; RUN: lld-link /out:%t2a.exe /entry:main /subsystem:console /debug %t.obj
-; RUN: llvm-nm %t2a.exe | FileCheck --check-prefix=CHECK-O2 %s
+; RUN: lld-link /out:%t0.exe /entry:main /subsystem:console /opt:lldlto=0 /lldmap:%t0.map %t.obj
+; RUN: FileCheck --check-prefix=CHECK-O0 %s < %t0.map
+; RUN: lld-link /out:%t2.exe /entry:main /subsystem:console /opt:lldlto=2 /lldmap:%t2.map %t.obj
+; RUN: FileCheck --check-prefix=CHECK-O2 %s < %t2.map
+; RUN: lld-link /out:%t2a.exe /entry:main /subsystem:console /lldmap:%t2a.map %t.obj
+; RUN: FileCheck --check-prefix=CHECK-O2 %s < %t2a.map
 
 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc"

Removed: lld/trunk/test/COFF/strtab-size.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/strtab-size.s?rev=318547&view=auto
==============================================================================
--- lld/trunk/test/COFF/strtab-size.s (original)
+++ lld/trunk/test/COFF/strtab-size.s (removed)
@@ -1,216 +0,0 @@
-# REQEUIRES: x86
-
-# Test that the strtab size is included in the allocation even if the
-# strtab itself is empty. To achieve this, we need a number of symbols N
-# where alignTo(N*18, 512) < alignTo(N*18 + 4, 512), where the first
-# positive N fulfilling that is 199.
-
-# RUN: llvm-mc -triple=x86_64-windows-msvc %s -filetype=obj -o %t.obj
-# RUN: lld-link -out:%t.exe -entry:main %t.obj -debug
-
-# If the size of the strtab isn't allocated for, llvm-readobj would
-# output SymbolCount: 0 (and dumpbin.exe would error out with "invalid file
-# or disk full, cannot seek to 0x1602").
-
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-# CHECK: SymbolCount: 199
-
-.global main
-.text
-main:
-sym0:
-sym1:
-sym2:
-sym3:
-sym4:
-sym5:
-sym6:
-sym7:
-sym8:
-sym9:
-sym10:
-sym11:
-sym12:
-sym13:
-sym14:
-sym15:
-sym16:
-sym17:
-sym18:
-sym19:
-sym20:
-sym21:
-sym22:
-sym23:
-sym24:
-sym25:
-sym26:
-sym27:
-sym28:
-sym29:
-sym30:
-sym31:
-sym32:
-sym33:
-sym34:
-sym35:
-sym36:
-sym37:
-sym38:
-sym39:
-sym40:
-sym41:
-sym42:
-sym43:
-sym44:
-sym45:
-sym46:
-sym47:
-sym48:
-sym49:
-sym50:
-sym51:
-sym52:
-sym53:
-sym54:
-sym55:
-sym56:
-sym57:
-sym58:
-sym59:
-sym60:
-sym61:
-sym62:
-sym63:
-sym64:
-sym65:
-sym66:
-sym67:
-sym68:
-sym69:
-sym70:
-sym71:
-sym72:
-sym73:
-sym74:
-sym75:
-sym76:
-sym77:
-sym78:
-sym79:
-sym80:
-sym81:
-sym82:
-sym83:
-sym84:
-sym85:
-sym86:
-sym87:
-sym88:
-sym89:
-sym90:
-sym91:
-sym92:
-sym93:
-sym94:
-sym95:
-sym96:
-sym97:
-sym98:
-sym99:
-sym100:
-sym101:
-sym102:
-sym103:
-sym104:
-sym105:
-sym106:
-sym107:
-sym108:
-sym109:
-sym110:
-sym111:
-sym112:
-sym113:
-sym114:
-sym115:
-sym116:
-sym117:
-sym118:
-sym119:
-sym120:
-sym121:
-sym122:
-sym123:
-sym124:
-sym125:
-sym126:
-sym127:
-sym128:
-sym129:
-sym130:
-sym131:
-sym132:
-sym133:
-sym134:
-sym135:
-sym136:
-sym137:
-sym138:
-sym139:
-sym140:
-sym141:
-sym142:
-sym143:
-sym144:
-sym145:
-sym146:
-sym147:
-sym148:
-sym149:
-sym150:
-sym151:
-sym152:
-sym153:
-sym154:
-sym155:
-sym156:
-sym157:
-sym158:
-sym159:
-sym160:
-sym161:
-sym162:
-sym163:
-sym164:
-sym165:
-sym166:
-sym167:
-sym168:
-sym169:
-sym170:
-sym171:
-sym172:
-sym173:
-sym174:
-sym175:
-sym176:
-sym177:
-sym178:
-sym179:
-sym180:
-sym181:
-sym182:
-sym183:
-sym184:
-sym185:
-sym186:
-sym187:
-sym188:
-sym189:
-sym190:
-sym191:
-sym192:
-sym193:
-sym194:
-  ret

Removed: lld/trunk/test/COFF/symtab.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/symtab.test?rev=318547&view=auto
==============================================================================
--- lld/trunk/test/COFF/symtab.test (original)
+++ lld/trunk/test/COFF/symtab.test (removed)
@@ -1,236 +0,0 @@
-# RUN: yaml2obj < %s > %t.obj
-# RUN: lld-link /debug /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
-# RUN: llvm-readobj -symbols %t.exe | FileCheck %s
-# RUN: lld-link /debug /opt:noref /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
-# RUN: llvm-readobj -symbols %t.exe | FileCheck %s
-
-# RUN: lld-link /debug /nosymtab /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
-# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=NO %s
-
-# CHECK:      Symbols [
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: .text
-# CHECK-NEXT:     Value: 0
-# CHECK-NEXT:     Section: .text (2)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: Static (0x3)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: .text2
-# CHECK-NEXT:     Value: 0
-# CHECK-NEXT:     Section: .text (2)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: Static (0x3)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: .data
-# CHECK-NEXT:     Value: 0
-# CHECK-NEXT:     Section: .data (1)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: Static (0x3)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: MessageBoxA
-# CHECK-NEXT:     Value: 80
-# CHECK-NEXT:     Section: .text (2)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: External (0x2)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: ExitProcess
-# CHECK-NEXT:     Value: 64
-# CHECK-NEXT:     Section: .text (2)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: External (0x2)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: message
-# CHECK-NEXT:     Value: 6
-# CHECK-NEXT:     Section: .text2 (3)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: Static (0x3)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: main
-# CHECK-NEXT:     Value: 0
-# CHECK-NEXT:     Section: .text (2)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: External (0x2)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: caption
-# CHECK-NEXT:     Value: 0
-# CHECK-NEXT:     Section: .text2 (3)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: Static (0x3)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Symbol {
-# CHECK-NEXT:     Name: abs_symbol
-# CHECK-NEXT:     Value: 2662186735
-# CHECK-NEXT:     Section: IMAGE_SYM_ABSOLUTE (-1)
-# CHECK-NEXT:     BaseType: Null (0x0)
-# CHECK-NEXT:     ComplexType: Null (0x0)
-# CHECK-NEXT:     StorageClass: External (0x2)
-# CHECK-NEXT:     AuxSymbolCount: 0
-# CHECK-NEXT:   }
-# CHECK-NEXT: ]
-
-# NO: Symbols [
-
---- !COFF
-header:
-  Machine:         IMAGE_FILE_MACHINE_AMD64
-  Characteristics: []
-sections:
-  - Name:            .text
-    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
-    Alignment:       4096
-    SectionData:     B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
-    Relocations:
-      - VirtualAddress:  0
-        SymbolName:      abs_symbol
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  7
-        SymbolName:      caption
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  12
-        SymbolName:      message
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  18
-        SymbolName:      MessageBoxA
-        Type:            IMAGE_REL_AMD64_REL32
-      - VirtualAddress:  24
-        SymbolName:      ExitProcess
-        Type:            IMAGE_REL_AMD64_REL32
-      - VirtualAddress:  30
-        SymbolName:      __ImageBase
-        Type:            IMAGE_REL_AMD64_ADDR64
-  - Name:            .text2
-    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
-    Alignment:       4096
-    SectionData:     B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
-    Relocations:
-      - VirtualAddress:  0
-        SymbolName:      abs_symbol
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  7
-        SymbolName:      caption
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  12
-        SymbolName:      message
-        Type:            IMAGE_REL_AMD64_ADDR64
-      - VirtualAddress:  18
-        SymbolName:      MessageBoxA
-        Type:            IMAGE_REL_AMD64_REL32
-      - VirtualAddress:  24
-        SymbolName:      ExitProcess
-        Type:            IMAGE_REL_AMD64_REL32
-      - VirtualAddress:  30
-        SymbolName:      __ImageBase
-        Type:            IMAGE_REL_AMD64_ADDR64
-  - Name:            .data
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
-    Alignment:       4
-    SectionData:     48656C6C6F0048656C6C6F20576F726C6400
-symbols:
-  - Name:            "@comp.id"
-    Value:           10394907
-    SectionNumber:   65535
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            .text
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          28
-      NumberOfRelocations: 6
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          0
-  - Name:            .text2
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          28
-      NumberOfRelocations: 6
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          0
-  - Name:            .data
-    Value:           0
-    SectionNumber:   3
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          18
-      NumberOfRelocations: 0
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          0
-  - Name:            MessageBoxA
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            ExitProcess
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            message
-    Value:           6
-    SectionNumber:   2
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            main
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            caption
-    Value:           0
-    SectionNumber:   2
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            abs_symbol
-    Value:           0xDEADBEEF
-    SectionNumber:   -1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            __ImageBase
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-...




More information about the llvm-commits mailing list