[llvm] [llvm-objdump] Create PDB context for symbolizer (PR #201150)

via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 5 05:45:44 PDT 2026


https://github.com/Nerixyz updated https://github.com/llvm/llvm-project/pull/201150

>From aca5433ab375d3680256e47d512b663a4e102f8e Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Tue, 2 Jun 2026 18:28:23 +0200
Subject: [PATCH] [llvm-objdump] Create PDB context for symbolizer

---
 .../llvm/DebugInfo/Symbolize/Symbolize.h      |   2 +
 llvm/lib/DebugInfo/Symbolize/Symbolize.cpp    | 109 ++--
 .../tools/llvm-objdump/COFF/pdb-lines.yaml    | 507 ++++++++++++++++++
 3 files changed, 571 insertions(+), 47 deletions(-)
 create mode 100644 llvm/test/tools/llvm-objdump/COFF/pdb-lines.yaml

diff --git a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
index b1fad68834332..bf826357b9c02 100644
--- a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -212,6 +212,8 @@ class LLVMSymbolizer {
                                                       StringRef ArchName,
                                                       StringRef FullPath);
 
+  Expected<DIContext *> createPDBContext(const ObjectFile &Obj);
+
   /// Update the LRU cache order when a binary is accessed.
   void recordAccess(CachedBinary &Bin);
 
diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
index b9ab047fb1b76..6d116661e5c05 100644
--- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
+++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
@@ -740,6 +740,39 @@ LLVMSymbolizer::createModuleInfo(const ObjectFile *Obj,
   return InsertResult.first->second.get();
 }
 
+Expected<DIContext *> LLVMSymbolizer::createPDBContext(const ObjectFile &Obj) {
+  auto *CoffObject = dyn_cast<COFFObjectFile>(&Obj);
+  if (!CoffObject)
+    return nullptr;
+
+  StringRef PDBFileName = Opts.PDBName;
+  if (PDBFileName.empty()) {
+    const codeview::DebugInfo *DebugInfo;
+    auto EC = CoffObject->getDebugPDBInfo(DebugInfo, PDBFileName);
+    // Use DWARF if there're DWARF sections and we weren't asked for PDB.
+    bool HasDwarf =
+        llvm::any_of(Obj.sections(), [](SectionRef Section) -> bool {
+          if (Expected<StringRef> SectionName = Section.getName())
+            return SectionName.get() == ".debug_info";
+          return false;
+        });
+
+    if (EC || HasDwarf || !DebugInfo || PDBFileName.empty())
+      return nullptr;
+  }
+
+  using namespace pdb;
+  std::unique_ptr<IPDBSession> Session;
+
+  PDB_ReaderType ReaderType =
+      Opts.UseDIA ? PDB_ReaderType::DIA : PDB_ReaderType::Native;
+  if (auto Err = loadDataForEXE(ReaderType, Obj.getFileName(), Session)) {
+    // Return along the PDB filename to provide more context
+    return createFileError(PDBFileName, std::move(Err));
+  }
+  return new PDBContext(*CoffObject, std::move(Session));
+}
+
 Expected<SymbolizableModule *>
 LLVMSymbolizer::getOrCreateModuleInfo(StringRef ModuleName) {
   StringRef BinaryName = ModuleName;
@@ -770,29 +803,16 @@ LLVMSymbolizer::getOrCreateModuleInfo(StringRef ModuleName) {
   ObjectPair Objects = ObjectsOrErr.get();
 
   std::unique_ptr<DIContext> Context;
-  pdb::PDB_ReaderType ReaderType =
-      Opts.UseDIA ? pdb::PDB_ReaderType::DIA : pdb::PDB_ReaderType::Native;
-  const auto *CoffObject = dyn_cast<COFFObjectFile>(Objects.first);
-
-  // First, if the user specified a pdb file on the command line, use that.
-  if (CoffObject && !Opts.PDBName.empty()) {
-    using namespace pdb;
-    std::unique_ptr<IPDBSession> Session;
-    if (auto Err = loadDataForPDB(ReaderType, Opts.PDBName, Session)) {
-      Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>());
-      return createFileError(Opts.PDBName, std::move(Err));
-    }
-    Context.reset(new PDBContext(*CoffObject, std::move(Session)));
-  }
+  // We try the following in order
+  // - GSYM (if no PDB was given on the command line)
+  // - PDB
+  // - DWARF
 
-  if (!Context) {
-    // If this is a COFF object containing PDB info and not containing DWARF
-    // section, use a PDBContext to symbolize. Otherwise, use DWARF.
-    // Create a DIContext to symbolize as follows:
-    // - If there is a GSYM file, create a GsymContext.
-    // - Otherwise, if this is a COFF object containing PDB info, create a
-    // PDBContext.
-    // - Otherwise, create a DWARFContext.
+  // PDB was explicitly requested, use it.
+  bool PreferCoffPDB =
+      isa<COFFObjectFile>(Objects.first) && !Opts.PDBName.empty();
+
+  if (!PreferCoffPDB) {
     const auto GsymFile = lookUpGsymFile(BinaryName.str());
     if (!GsymFile.empty()) {
       auto ReaderOrErr = gsym::GsymReader::openFile(GsymFile);
@@ -802,34 +822,20 @@ LLVMSymbolizer::getOrCreateModuleInfo(StringRef ModuleName) {
     }
   }
 
-  if (!Context && CoffObject) {
-    const codeview::DebugInfo *DebugInfo;
-    StringRef PDBFileName;
-    auto EC = CoffObject->getDebugPDBInfo(DebugInfo, PDBFileName);
-    // Use DWARF if there're DWARF sections.
-    bool HasDwarf =
-        llvm::any_of(Objects.first->sections(), [](SectionRef Section) -> bool {
-          if (Expected<StringRef> SectionName = Section.getName())
-            return SectionName.get() == ".debug_info";
-          return false;
-        });
-    if (!EC && !HasDwarf && DebugInfo != nullptr && !PDBFileName.empty()) {
-      using namespace pdb;
-      std::unique_ptr<IPDBSession> Session;
-
-      if (auto Err = loadDataForEXE(ReaderType, Objects.first->getFileName(),
-                                    Session)) {
-        Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>());
-        // Return along the PDB filename to provide more context
-        return createFileError(PDBFileName, std::move(Err));
-      }
-      Context.reset(new PDBContext(*CoffObject, std::move(Session)));
+  if (!Context) {
+    Expected<DIContext *> PDBContextOrErr = createPDBContext(*Objects.first);
+    if (!PDBContextOrErr) {
+      Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>());
+      return PDBContextOrErr.takeError();
     }
+
+    Context.reset(*PDBContextOrErr);
   }
   if (!Context)
     Context = DWARFContext::create(
         *Objects.second, DWARFContext::ProcessDebugRelocations::Process,
         nullptr, Opts.DWPName);
+
   auto ModuleOrErr =
       createModuleInfo(Objects.first, std::move(Context), ModuleName);
   if (ModuleOrErr) {
@@ -858,9 +864,18 @@ LLVMSymbolizer::getOrCreateModuleInfo(const ObjectFile &Obj) {
   std::unique_ptr<DIContext> Context;
   if (useBTFContext(Obj))
     Context = BTFContext::create(Obj);
-  else
-    Context = DWARFContext::create(Obj);
-  // FIXME: handle COFF object with PDB info to use PDBContext
+  else {
+    Expected<DIContext *> PDBContextOrErr = createPDBContext(Obj);
+    if (!PDBContextOrErr) {
+      Modules.emplace(ObjName, std::unique_ptr<SymbolizableModule>());
+      return PDBContextOrErr.takeError();
+    }
+
+    if (*PDBContextOrErr)
+      Context.reset(*PDBContextOrErr);
+    else
+      Context = DWARFContext::create(Obj);
+  }
   return createModuleInfo(&Obj, std::move(Context), ObjName);
 }
 
diff --git a/llvm/test/tools/llvm-objdump/COFF/pdb-lines.yaml b/llvm/test/tools/llvm-objdump/COFF/pdb-lines.yaml
new file mode 100644
index 0000000000000..23eb8a4f52638
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/COFF/pdb-lines.yaml
@@ -0,0 +1,507 @@
+## This test checks that llvm-objdump can show line info from PDB files.
+# RUN: rm -rf %t.dir
+# RUN: mkdir %t.dir
+# RUN: yaml2obj %s --docnum=1 -o %t.dir/test-pdb.exe
+# RUN: llvm-pdbutil yaml2pdb %s --docnum=2 --pdb %t.dir/test-pdb.pdb
+# RUN: llvm-objdump -l -C %t.dir/test-pdb.exe | FileCheck %s
+
+# CHECK:      0000000140001000 <.text>:
+# CHECK-NEXT: ; square():
+# CHECK-NEXT: ; F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c:8
+# CHECK-NEXT: 140001000: 50                           pushq   %rax
+# CHECK-NEXT: 140001001: 89 4c 24 04                  movl    %ecx, 0x4(%rsp)
+# CHECK-NEXT: ; F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c:9
+# CHECK-NEXT: 140001005: 8b 44 24 04                  movl    0x4(%rsp), %eax
+# CHECK-NEXT: 140001009: 0f af 44 24 04               imull   0x4(%rsp), %eax
+# CHECK-NEXT: 14000100e: 59                           popq    %rcx
+# CHECK-NEXT: 14000100f: c3                           retq
+# CHECK-NEXT: ; main():
+# CHECK-NEXT: ; F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c:12
+# CHECK-NEXT: 140001010: 48 83 ec 28                  subq    $0x28, %rsp
+# CHECK-NEXT: 140001014: c7 44 24 24 00 00 00 00      movl    $0x0, 0x24(%rsp)
+# CHECK-NEXT: ; F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c:13
+# CHECK-NEXT: 14000101c: b9 04 00 00 00               movl    $0x4, %ecx
+# CHECK-NEXT: 140001021: e8 da ff ff ff               callq   0x140001000 <.text>
+# CHECK-NEXT: 140001026: 90                           nop
+# CHECK-NEXT: 140001027: 48 83 c4 28                  addq    $0x28, %rsp
+# CHECK-NEXT: 14000102b: c3                           retq
+
+## The files were generated from test-pdb.c:
+##
+## int square(int num) {
+##     return num * num;
+## }
+## 
+## int main() {
+##     return square(4);
+## }
+##
+## clang-cl test-pdb.c -fuse-ld=lld-link /Z7 /link /nodefaultlib /entry:main
+## llvm-pdbutil pdb2yaml test-pdb.pdb --all > test-pdb.pdb.yaml
+## obj2yaml test-pdb.exe -o test-pdb.exe.yaml
+## rm test-pdb.exe && rm test-pdb.pdb
+
+## The COFF executable.
+
+--- !COFF
+OptionalHeader:
+  AddressOfEntryPoint: 4112
+  ImageBase:       5368709120
+  SectionAlignment: 4096
+  FileAlignment:   512
+  MajorOperatingSystemVersion: 6
+  MinorOperatingSystemVersion: 0
+  MajorImageVersion: 0
+  MinorImageVersion: 0
+  MajorSubsystemVersion: 6
+  MinorSubsystemVersion: 0
+  Subsystem:       IMAGE_SUBSYSTEM_WINDOWS_CUI
+  DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA, IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE, IMAGE_DLL_CHARACTERISTICS_NX_COMPAT, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE ]
+  SizeOfStackReserve: 1048576
+  SizeOfStackCommit: 4096
+  SizeOfHeapReserve: 1048576
+  SizeOfHeapCommit: 4096
+  ExportTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  ImportTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  ResourceTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  ExceptionTable:
+    RelativeVirtualAddress: 12288
+    Size:            24
+  CertificateTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  BaseRelocationTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  Debug:
+    RelativeVirtualAddress: 8192
+    Size:            28
+  Architecture:
+    RelativeVirtualAddress: 0
+    Size:            0
+  GlobalPtr:
+    RelativeVirtualAddress: 0
+    Size:            0
+  TlsTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  LoadConfigTable:
+    RelativeVirtualAddress: 0
+    Size:            0
+  BoundImport:
+    RelativeVirtualAddress: 0
+    Size:            0
+  IAT:
+    RelativeVirtualAddress: 0
+    Size:            0
+  DelayImportDescriptor:
+    RelativeVirtualAddress: 0
+    Size:            0
+  ClrRuntimeHeader:
+    RelativeVirtualAddress: 0
+    Size:            0
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE ]
+sections:
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    VirtualAddress:  4096
+    VirtualSize:     44
+    SectionData:     50894C24048B4424040FAF44240459C34883EC28C744242400000000B904000000E8DAFFFFFF904883C428C3
+    SizeOfRawData:   512
+  - Name:            .rdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    VirtualAddress:  8192
+    VirtualSize:     144
+    SectionData:     000000004456456A0000000002000000620000001C2000001C060000525344539EF0FB1ACCD05EFF4C4C44205044422E01000000463A5C4465765C6C6C766D2D70726F6A6563745C6C6C766D5C746573745C746F6F6C735C6C6C766D2D6F626A64756D705C434F46465C496E707574735C746573742D7064622E70646200000001010100010200000104010004420000
+    SizeOfRawData:   512
+  - Name:            .pdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    VirtualAddress:  12288
+    VirtualSize:     24
+    SectionData:     001000001010000080200000101000002C10000088200000
+    SizeOfRawData:   512
+symbols:         []
+...
+
+## The PDB file.
+
+---
+StringTable:
+  - 'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c'
+PdbStream:
+  Age:             1
+  Guid:            '{1AFBF09E-D0CC-FF5E-4C4C-44205044422E}'
+  Signature:       452718750
+  Features:        [ VC140 ]
+  Version:         VC70
+DbiStream:
+  VerHeader:       V70
+  Age:             1
+  BuildNumber:     36363
+  PdbDllVersion:   0
+  PdbDllRbld:      0
+  Flags:           0
+  MachineType:     Amd64
+  Modules:
+    - Module:          'C:\Users\johannes\AppData\Local\Temp\test-pdb-39ef50.obj'
+      ObjFile:         'C:\Users\johannes\AppData\Local\Temp\test-pdb-39ef50.obj'
+      SourceFiles:
+        - 'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c'
+      Subsections:
+        - !Lines
+          CodeSize:        16
+          Flags:           [  ]
+          RelocOffset:     0
+          RelocSegment:    1
+          Blocks:
+            - FileName:        'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c'
+              Lines:
+                - Offset:          0
+                  LineStart:       8
+                  IsStatement:     false
+                  EndDelta:        0
+                - Offset:          5
+                  LineStart:       9
+                  IsStatement:     false
+                  EndDelta:        0
+              Columns:         []
+        - !Lines
+          CodeSize:        28
+          Flags:           [  ]
+          RelocOffset:     16
+          RelocSegment:    1
+          Blocks:
+            - FileName:        'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c'
+              Lines:
+                - Offset:          0
+                  LineStart:       12
+                  IsStatement:     false
+                  EndDelta:        0
+                - Offset:          12
+                  LineStart:       13
+                  IsStatement:     false
+                  EndDelta:        0
+              Columns:         []
+        - !FileChecksums
+          Checksums:
+            - FileName:        'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.c'
+              Kind:            MD5
+              Checksum:        315F8C23981DC54CD31EAF857C6779A1
+      Modi:
+        Signature:       4
+        Records:
+          - Kind:            S_OBJNAME
+            ObjNameSym:
+              Signature:       0
+              ObjectName:      'C:\Users\johannes\AppData\Local\Temp\test-pdb-39ef50.obj'
+          - Kind:            S_COMPILE3
+            Compile3Sym:
+              Flags:           [  ]
+              Machine:         X64
+              FrontendMajor:   22
+              FrontendMinor:   1
+              FrontendBuild:   4
+              FrontendQFE:     0
+              BackendMajor:    22014
+              BackendMinor:    0
+              BackendBuild:    0
+              BackendQFE:      0
+              Version:         'clang version 22.1.4 (https://github.com/llvm/llvm-project 35990504507d79e0b9deb809c8ee5e1b34ceef20)'
+          - Kind:            S_GPROC32
+            ProcSym:
+              PtrParent:       0
+              PtrEnd:          312
+              PtrNext:         0
+              CodeSize:        16
+              DbgStart:        0
+              DbgEnd:          0
+              FunctionType:    4097
+              Offset:          0
+              Segment:         1
+              Flags:           [ IsNoInline, HasOptimizedDebugInfo ]
+              DisplayName:     square
+          - Kind:            S_FRAMEPROC
+            FrameProcSym:
+              TotalFrameBytes: 8
+              PaddingFrameBytes: 0
+              OffsetToPadding: 0
+              BytesOfCalleeSavedRegisters: 0
+              OffsetOfExceptionHandler: 0
+              SectionIdOfExceptionHandler: 0
+              Flags:           [  ]
+          - Kind:            S_LOCAL
+            LocalSym:
+              Type:            116
+              Flags:           [ IsParameter ]
+              VarName:         num
+          - Kind:            S_DEFRANGE_FRAMEPOINTER_REL
+            DefRangeFramePointerRelSym:
+              Offset:          4
+              Range:
+                OffsetStart:     5
+                ISectStart:      1
+                Range:           11
+              Gaps:            []
+          - Kind:            S_END
+            ScopeEndSym:     {}
+          - Kind:            S_GPROC32
+            ProcSym:
+              PtrParent:       0
+              PtrEnd:          392
+              PtrNext:         0
+              CodeSize:        28
+              DbgStart:        0
+              DbgEnd:          0
+              FunctionType:    4099
+              Offset:          16
+              Segment:         1
+              Flags:           [ IsNoInline, HasOptimizedDebugInfo ]
+              DisplayName:     main
+          - Kind:            S_FRAMEPROC
+            FrameProcSym:
+              TotalFrameBytes: 40
+              PaddingFrameBytes: 0
+              OffsetToPadding: 0
+              BytesOfCalleeSavedRegisters: 0
+              OffsetOfExceptionHandler: 0
+              SectionIdOfExceptionHandler: 0
+              Flags:           [  ]
+          - Kind:            S_END
+            ScopeEndSym:     {}
+          - Kind:            S_BUILDINFO
+            BuildInfoSym:
+              BuildId:         4103
+    - Module:          '* Linker *'
+      ObjFile:         ''
+      Modi:
+        Signature:       4
+        Records:
+          - Kind:            S_OBJNAME
+            ObjNameSym:
+              Signature:       0
+              ObjectName:      '* Linker *'
+          - Kind:            S_COMPILE3
+            Compile3Sym:
+              Flags:           [  ]
+              Machine:         X64
+              FrontendMajor:   0
+              FrontendMinor:   0
+              FrontendBuild:   0
+              FrontendQFE:     0
+              BackendMajor:    14
+              BackendMinor:    10
+              BackendBuild:    25019
+              BackendQFE:      0
+              Version:         LLVM Linker
+          - Kind:            S_ENVBLOCK
+            EnvBlockSym:
+              Entries:
+                - cwd
+                - 'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs'
+                - exe
+                - 'C:\Users\johannes\scoop\apps\llvm\22.1.4\bin\lld-link.exe'
+                - pdb
+                - 'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs\test-pdb.pdb'
+                - cmd
+                - '-out:test-pdb.exe -libpath:F:\VisualStudio2026\VC\Tools\MSVC\14.51.36231\lib\x64 -libpath:F:\VisualStudio2026\VC\Tools\MSVC\14.51.36231\atlmfc\lib\x64 "-libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.28000.0\ucrt\x64" "-libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.28000.0\um\x64" -libpath:C:\Users\johannes\scoop\apps\llvm\22.1.4\lib\clang\22\lib\x86_64-pc-windows-msvc -libpath:C:\Users\johannes\scoop\apps\llvm\22.1.4\lib\clang\22\lib\windows -nologo -debug /nodefaultlib /entry:main'
+          - Kind:            S_SECTION
+            SectionSym:
+              SectionNumber:   1
+              Alignment:       12
+              Rva:             4096
+              Length:          44
+              Characteristics: 1610612768
+              Name:            .text
+          - Kind:            S_COFFGROUP
+            CoffGroupSym:
+              Size:            44
+              Characteristics: 1610612768
+              Offset:          0
+              Segment:         1
+              Name:            .text
+          - Kind:            S_SECTION
+            SectionSym:
+              SectionNumber:   2
+              Alignment:       12
+              Rva:             8192
+              Length:          144
+              Characteristics: 1073741888
+              Name:            .rdata
+          - Kind:            S_COFFGROUP
+            CoffGroupSym:
+              Size:            16
+              Characteristics: 1073741888
+              Offset:          128
+              Segment:         2
+              Name:            .xdata
+          - Kind:            S_SECTION
+            SectionSym:
+              SectionNumber:   3
+              Alignment:       12
+              Rva:             12288
+              Length:          24
+              Characteristics: 1073741888
+              Name:            .pdata
+          - Kind:            S_COFFGROUP
+            CoffGroupSym:
+              Size:            24
+              Characteristics: 1073741888
+              Offset:          0
+              Segment:         3
+              Name:            .pdata
+  SectionHeaders:
+    - Name:            .text
+      VirtualSize:     44
+      VirtualAddress:  4096
+      SizeOfRawData:   512
+      PointerToRawData: 1024
+      PointerToRelocations: 0
+      PointerToLinenumbers: 0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      Characteristics: 1610612768
+    - Name:            .rdata
+      VirtualSize:     144
+      VirtualAddress:  8192
+      SizeOfRawData:   512
+      PointerToRawData: 1536
+      PointerToRelocations: 0
+      PointerToLinenumbers: 0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      Characteristics: 1073741888
+    - Name:            .pdata
+      VirtualSize:     24
+      VirtualAddress:  12288
+      SizeOfRawData:   512
+      PointerToRawData: 2048
+      PointerToRelocations: 0
+      PointerToLinenumbers: 0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      Characteristics: 1073741888
+  SectionContribs:
+    Version:         Ver60
+    Items:
+      - ISect:           1
+        Offset:          0
+        Size:            44
+        Characteristics: 1615855648
+        Imod:            0
+        DataCrc:         3884831978
+        RelocCrc:        0
+        ISectCoff:       0
+      - ISect:           2
+        Offset:          0
+        Size:            28
+        Characteristics: 1073741888
+        Imod:            1
+        DataCrc:         0
+        RelocCrc:        0
+        ISectCoff:       0
+      - ISect:           2
+        Offset:          28
+        Size:            98
+        Characteristics: 1073741888
+        Imod:            1
+        DataCrc:         0
+        RelocCrc:        0
+        ISectCoff:       0
+      - ISect:           2
+        Offset:          128
+        Size:            16
+        Characteristics: 1076887616
+        Imod:            0
+        DataCrc:         1183868784
+        RelocCrc:        0
+        ISectCoff:       0
+      - ISect:           3
+        Offset:          0
+        Size:            24
+        Characteristics: 1076887616
+        Imod:            0
+        DataCrc:         2276661551
+        RelocCrc:        0
+        ISectCoff:       0
+TpiStream:
+  Version:         VC80
+  Records:
+    - Kind:            LF_ARGLIST
+      ArgList:
+        ArgIndices:      [ 116 ]
+    - Kind:            LF_PROCEDURE
+      Procedure:
+        ReturnType:      116
+        CallConv:        NearC
+        Options:         [ None ]
+        ParameterCount:  1
+        ArgumentList:    4096
+    - Kind:            LF_ARGLIST
+      ArgList:
+        ArgIndices:      [  ]
+    - Kind:            LF_PROCEDURE
+      Procedure:
+        ReturnType:      116
+        CallConv:        NearC
+        Options:         [ None ]
+        ParameterCount:  0
+        ArgumentList:    4098
+IpiStream:
+  Version:         VC80
+  Records:
+    - Kind:            LF_FUNC_ID
+      FuncId:
+        ParentScope:     0
+        FunctionType:    4097
+        Name:            square
+    - Kind:            LF_FUNC_ID
+      FuncId:
+        ParentScope:     0
+        FunctionType:    4099
+        Name:            main
+    - Kind:            LF_STRING_ID
+      StringId:
+        Id:              0
+        String:          'F:\Dev\llvm-project\llvm\test\tools\llvm-objdump\COFF\Inputs'
+    - Kind:            LF_STRING_ID
+      StringId:
+        Id:              0
+        String:          test-pdb.c
+    - Kind:            LF_STRING_ID
+      StringId:
+        Id:              0
+        String:          ''
+    - Kind:            LF_STRING_ID
+      StringId:
+        Id:              0
+        String:          'C:\Users\johannes\scoop\apps\llvm\22.1.4\bin\clang-cl.exe'
+    - Kind:            LF_STRING_ID
+      StringId:
+        Id:              0
+        String:          '"-cc1" "-triple" "x86_64-pc-windows-msvc19.51.36246" "-emit-obj" "-mincremental-linker-compatible" "-dumpdir" "a-" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-mrelocation-model" "pic" "-pic-level" "2" "-mframe-pointer=none" "-relaxed-aliasing" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-fms-volatile" "-funwind-tables=2" "-target-cpu" "x86-64" "-mllvm" "-x86-asm-syntax=intel" "-tune-cpu" "generic" "-D_MT" "-flto-visibility-public-std" "--dependent-lib=libcmt" "--dependent-lib=oldnames" "-stack-protector" "2" "-fdiagnostics-format" "msvc" "-gno-column-info" "-gcodeview" "-debug-info-kind=constructor" "-fdebug-compilation-dir=F:\\Dev\\llvm-project\\llvm\\test\\tools\\llvm-objdump\\COFF\\Inputs" "-fcoverage-compilation-dir=F:\\Dev\\llvm-project\\llvm\\test\\tools\\llvm-objdump\\COFF\\Inputs" "-resource-dir" "C:\\Users\\johannes\\scoop\\apps\\llvm\\22.1.4\\lib\\clang\\22" "-internal-isystem" "C:\\Users\\johannes\\scoop\\apps\\llvm\\22.1.4\\lib\\clang\\22\\include" "-internal-isystem" "F:\\VisualStudio2026\\VC\\Tools\\MSVC\\14.51.36231\\include" "-internal-isystem" "F:\\VisualStudio2026\\VC\\Tools\\MSVC\\14.51.36231\\atlmfc\\include" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.28000.0\\ucrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.28000.0\\shared" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.28000.0\\um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.28000.0\\winrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.28000.0\\cppwinrt" "-ferror-limit" "19" "-fno-use-cxa-atexit" "-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.51.36246" "-fskip-odr-check-in-gmf" "-fdelayed-template-parsing" "-fcolor-diagnostics" "-faddrsig" "-x" "c"'
+    - Kind:            LF_BUILDINFO
+      BuildInfo:
+        ArgIndices:      [ 4098, 4101, 4099, 4100, 4102 ]
+PublicsStream:
+  Records:
+    - Kind:            S_PUB32
+      PublicSym32:
+        Flags:           [ Function ]
+        Offset:          16
+        Segment:         1
+        Name:            main
+    - Kind:            S_PUB32
+      PublicSym32:
+        Flags:           [ Function ]
+        Offset:          0
+        Segment:         1
+        Name:            square
+...



More information about the llvm-commits mailing list