[llvm] [llvm-gsymutil] Option --symtab-file to specify a separate binary (PR #79898)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 29 20:00:09 PST 2024


https://github.com/kusmour updated https://github.com/llvm/llvm-project/pull/79898

>From 0b0570e375549922334ee61e3f4b85dcc97da2af Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Mon, 29 Jan 2024 12:08:08 -0800
Subject: [PATCH] [llvm-gsymutil] Option --symtab-file to specify a separate
 binary

Summary:
There are cases where separate debuginfo file only contains DWARF and symbol table exists in the executable.
Offer a flag to specify a separate file for llvm-gsymutil to extract symbol table from.

NOTE: Not supporting this flag for `MachOUniversalBinary` yet, as dSYM usually contains both

Test Plan:
Added FileCheck tests
```
./bin/llvm-lit -sv llvm/test/tools/llvm-gsymutil/X86/elf-dwarf-only.yaml
./bin/llvm-lit -sv llvm/test/tools/llvm-gsymutil/X86/elf-symtab.yaml
```
---
 .../llvm-gsymutil/X86/elf-dwarf-only.yaml     | 689 ++++++++++++++++++
 .../tools/llvm-gsymutil/X86/elf-symtab.yaml   | 654 +++++++++++++++++
 llvm/tools/llvm-gsymutil/Opts.td              |   3 +
 llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp    |  48 +-
 4 files changed, 1391 insertions(+), 3 deletions(-)
 create mode 100644 llvm/test/tools/llvm-gsymutil/X86/elf-dwarf-only.yaml
 create mode 100644 llvm/test/tools/llvm-gsymutil/X86/elf-symtab.yaml

diff --git a/llvm/test/tools/llvm-gsymutil/X86/elf-dwarf-only.yaml b/llvm/test/tools/llvm-gsymutil/X86/elf-dwarf-only.yaml
new file mode 100644
index 0000000000000..31d6ce4183aab
--- /dev/null
+++ b/llvm/test/tools/llvm-gsymutil/X86/elf-dwarf-only.yaml
@@ -0,0 +1,689 @@
+## Test loading ELF files with only DWARF.
+## First we make the ELF file from yaml,
+## then we convert the ELF file to GSYM,
+## then we do lookups on the newly created .gsym
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-gsymutil --convert %t -o %t.gsym 2>&1 | FileCheck %s --check-prefix=CONVERT
+# RUN: llvm-gsymutil --address 0x00000000004011e0 %t.gsym | FileCheck %s --check-prefix=LOOKUP
+
+# CONVERT: Input file: {{.*\.yaml\.tmp}}
+# CONVERT: Output file (x86_64): {{.*\.yaml\.tmp\.gsym}}
+# CONVERT: Loaded 2 functions from DWARF.
+# CONVERT: Loaded 0 functions from symbol table.
+# CONVERT: Pruned 0 functions, ended with 2 total
+
+# LOOKUP: Looking up addresses in "{{.*\.yaml\.tmp\.gsym}}":
+# LOOKUP: 0x00000000004011e0: main @ /tmp/test_gsymutil/main.cpp
+
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_X86_64
+  Entry:           0x4010B0
+ProgramHeaders:
+  - Type:            PT_PHDR
+    Flags:           [ PF_R ]
+    VAddr:           0x400040
+    Align:           0x8
+  - Type:            PT_INTERP
+    Flags:           [ PF_R ]
+    FirstSec:        .interp
+    LastSec:         .interp
+    VAddr:           0x400318
+  - Type:            PT_LOAD
+    Flags:           [ PF_R ]
+    FirstSec:        .interp
+    LastSec:         .rela.plt
+    VAddr:           0x400000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_X, PF_R ]
+    FirstSec:        .init
+    LastSec:         .fini
+    VAddr:           0x401000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_R ]
+    FirstSec:        .rodata
+    LastSec:         .eh_frame
+    VAddr:           0x402000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_W, PF_R ]
+    FirstSec:        .init_array
+    LastSec:         .bss
+    VAddr:           0x403DA8
+    Align:           0x1000
+  - Type:            PT_DYNAMIC
+    Flags:           [ PF_W, PF_R ]
+    FirstSec:        .dynamic
+    LastSec:         .dynamic
+    VAddr:           0x403DC0
+    Align:           0x8
+  - Type:            PT_NOTE
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.property
+    LastSec:         .note.gnu.property
+    VAddr:           0x400338
+    Align:           0x8
+  - Type:            PT_NOTE
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.build-id
+    LastSec:         .note.ABI-tag
+    VAddr:           0x400358
+    Align:           0x4
+  - Type:            PT_GNU_PROPERTY
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.property
+    LastSec:         .note.gnu.property
+    VAddr:           0x400338
+    Align:           0x8
+  - Type:            PT_GNU_EH_FRAME
+    Flags:           [ PF_R ]
+    FirstSec:        .eh_frame_hdr
+    LastSec:         .eh_frame_hdr
+    VAddr:           0x402034
+    Align:           0x4
+  - Type:            PT_GNU_STACK
+    Flags:           [ PF_W, PF_R ]
+    Align:           0x10
+  - Type:            PT_GNU_RELRO
+    Flags:           [ PF_R ]
+    FirstSec:        .init_array
+    LastSec:         .got
+    VAddr:           0x403DA8
+Sections:
+  - Name:            .interp
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400318
+    AddressAlign:    0x1
+    Content:         2F6C696236342F6C642D6C696E75782D7838362D36342E736F2E3200
+  - Name:            .note.gnu.property
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400338
+    AddressAlign:    0x8
+    Notes:
+      - Name:            GNU
+        Desc:            028000C0040000000300000000000000
+        Type:            NT_GNU_PROPERTY_TYPE_0
+  - Name:            .note.gnu.build-id
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400358
+    AddressAlign:    0x4
+    Notes:
+      - Name:            GNU
+        Desc:            6E3474EA595AB65F323A92D034BA2EA01E807B91
+        Type:            NT_PRPSINFO
+  - Name:            .note.ABI-tag
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x40037C
+    AddressAlign:    0x4
+    Notes:
+      - Name:            GNU
+        Desc:            '00000000030000000200000000000000'
+        Type:            NT_VERSION
+  - Name:            .gnu.hash
+    Type:            SHT_GNU_HASH
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4003A0
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Header:
+      SymNdx:          0xA
+      Shift2:          0x6
+    BloomFilter:     [ 0x10000100100000 ]
+    HashBuckets:     [ 0xA, 0x0 ]
+    HashValues:      [ 0x9F4FD20, 0x430C9815 ]
+  - Name:            .dynsym
+    Type:            SHT_DYNSYM
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4003C8
+    Link:            .dynstr
+    AddressAlign:    0x8
+  - Name:            .dynstr
+    Type:            SHT_STRTAB
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4004E8
+    AddressAlign:    0x1
+  - Name:            .gnu.version
+    Type:            SHT_GNU_versym
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400660
+    Link:            .dynsym
+    AddressAlign:    0x2
+    Entries:         [ 0, 3, 4, 2, 2, 2, 1, 1, 1, 2, 2, 2 ]
+  - Name:            .gnu.version_r
+    Type:            SHT_GNU_verneed
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400678
+    Link:            .dynstr
+    AddressAlign:    0x8
+    Dependencies:
+      - Version:         1
+        File:            libc.so.6
+        Entries:
+          - Name:            GLIBC_2.2.5
+            Hash:            157882997
+            Flags:           0
+            Other:           4
+          - Name:            GLIBC_2.34
+            Hash:            110530996
+            Flags:           0
+            Other:           3
+      - Version:         1
+        File:            'libstdc++.so.6'
+        Entries:
+          - Name:            GLIBCXX_3.4
+            Hash:            143796596
+            Flags:           0
+            Other:           2
+  - Name:            .rela.dyn
+    Type:            SHT_RELA
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4006C8
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Relocations:
+      - Offset:          0x403FC0
+        Symbol:          __libc_start_main
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FC8
+        Symbol:          _ITM_deregisterTMCloneTable
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FD0
+        Symbol:          __gmon_start__
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FD8
+        Symbol:          _ITM_registerTMCloneTable
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FE0
+        Symbol:          _ZNSt8ios_base4InitD1Ev
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x404040
+        Symbol:          _ZSt4cout
+        Type:            R_X86_64_COPY
+  - Name:            .rela.plt
+    Type:            SHT_RELA
+    Flags:           [ SHF_ALLOC, SHF_INFO_LINK ]
+    Address:         0x400758
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Info:            .got.plt
+    Relocations:
+      - Offset:          0x404000
+        Symbol:          _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404008
+        Symbol:          __cxa_atexit
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404010
+        Symbol:          _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404018
+        Symbol:          _ZNSolsEPFRSoS_E
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404020
+        Symbol:          _ZNSt8ios_base4InitC1Ev
+        Type:            R_X86_64_JUMP_SLOT
+  - Name:            .init
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401000
+    AddressAlign:    0x4
+    Offset:          0x1000
+    Content:         F30F1EFA4883EC08488B05C12F00004885C07402FFD04883C408C3
+  - Name:            .plt
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401020
+    AddressAlign:    0x10
+    EntSize:         0x10
+    Content:         FF35CA2F0000FF25CC2F00000F1F4000FF25CA2F00006800000000E9E0FFFFFFFF25C22F00006801000000E9D0FFFFFFFF25BA2F00006802000000E9C0FFFFFFFF25B22F00006803000000E9B0FFFFFFFF25AA2F00006804000000E9A0FFFFFF
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401080
+    AddressAlign:    0x10
+    Content:         F30F1EFA53488D1DC53000004889DFE8DCFFFFFF488B3D452F00004889DE5B488D15620F0000E995FFFFFF0F1F440000F30F1EFA31ED4989D15E4889E24883E4F050544531C031C948C7C7E0114000FF15EB2E0000F4662E0F1F840000000000F30F1EFAC3662E0F1F84000000000090488D3D392F0000488D05322F00004839F87415488B05BE2E00004885C07409FFE00F1F8000000000C30F1F8000000000488D3D092F0000488D35022F00004829FE4889F048C1EE3F48C1F8034801C648D1FE7414488B058D2E00004885C07408FFE0660F1F440000C30F1F8000000000F30F1EFA803DE52F0000007513554889E5E87AFFFFFFC605D32F0000015DC390C366662E0F1F8400000000000F1F4000F30F1EFAEB8A662E0F1F840000000000554889E548BF404040000000000048BE1020400000000000E893FEFFFF4889C748BE3010400000000000E891FEFFFF5DC36666666666662E0F1F840000000000554889E54883EC10C745FC0000000048BF404040000000000048BE1C20400000000000E848FEFFFF4889C748BE3010400000000000E846FEFFFFE881FFFFFF48BF404040000000000048BE2820400000000000E818FEFFFF4889C748BE3010400000000000E816FEFFFF31C04883C4105DC3662E0F1F8400000000000F1F4000F30F1EFAC3
+  - Name:            .fini
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401268
+    AddressAlign:    0x4
+    Content:         F30F1EFA4883EC084883C408C3
+  - Name:            .rodata
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402000
+    AddressAlign:    0x8
+    Offset:          0x2000
+    Content:         010002000000000000000000000000005468697320697320666F6F0068656C6C6F20776F726C6400616674657220666F6F00
+  - Name:            .eh_frame_hdr
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402034
+    AddressAlign:    0x4
+    Content:         011B033B4000000007000000ECEFFFFF840000004CF0FFFF000100007CF0FFFF5C000000ACF0FFFF700000006CF1FFFFAC000000ACF1FFFFCC0000002CF2FFFFEC000000
+  - Name:            .eh_frame
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402078
+    AddressAlign:    0x8
+    Content:         1400000000000000017A5200017810011B0C070890010000100000001C00000018F0FFFF2600000000440710100000003000000034F0FFFF0500000000000000240000004400000060EFFFFF60000000000E10460E184A0F0B770880003F1A3B2A332422000000001C0000006C000000B8F0FFFF3100000000410E108602430D066C0C07080000001C0000008C000000D8F0FFFF7200000000410E108602430D06026D0C0708000010000000AC00000038F1FFFF050000000000000018000000C000000044EFFFFF2B00000000450E1083025A0E0800000000000000
+  - Name:            .init_array
+    Type:            SHT_INIT_ARRAY
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DA8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Offset:          0x2DA8
+    Content:         '80104000000000009011400000000000'
+  - Name:            .fini_array
+    Type:            SHT_FINI_ARRAY
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DB8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         '6011400000000000'
+  - Name:            .dynamic
+    Type:            SHT_DYNAMIC
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DC0
+    Link:            .dynstr
+    AddressAlign:    0x8
+    Entries:
+      - Tag:             DT_NEEDED
+        Value:           0x123
+      - Tag:             DT_NEEDED
+        Value:           0x132
+      - Tag:             DT_NEEDED
+        Value:           0x13C
+      - Tag:             DT_NEEDED
+        Value:           0x14A
+      - Tag:             DT_INIT
+        Value:           0x401000
+      - Tag:             DT_FINI
+        Value:           0x401268
+      - Tag:             DT_INIT_ARRAY
+        Value:           0x403DA8
+      - Tag:             DT_INIT_ARRAYSZ
+        Value:           0x10
+      - Tag:             DT_FINI_ARRAY
+        Value:           0x403DB8
+      - Tag:             DT_FINI_ARRAYSZ
+        Value:           0x8
+      - Tag:             DT_GNU_HASH
+        Value:           0x4003A0
+      - Tag:             DT_STRTAB
+        Value:           0x4004E8
+      - Tag:             DT_SYMTAB
+        Value:           0x4003C8
+      - Tag:             DT_STRSZ
+        Value:           0x177
+      - Tag:             DT_SYMENT
+        Value:           0x18
+      - Tag:             DT_DEBUG
+        Value:           0x0
+      - Tag:             DT_PLTGOT
+        Value:           0x403FE8
+      - Tag:             DT_PLTRELSZ
+        Value:           0x78
+      - Tag:             DT_PLTREL
+        Value:           0x7
+      - Tag:             DT_JMPREL
+        Value:           0x400758
+      - Tag:             DT_RELA
+        Value:           0x4006C8
+      - Tag:             DT_RELASZ
+        Value:           0x90
+      - Tag:             DT_RELAENT
+        Value:           0x18
+      - Tag:             DT_VERNEED
+        Value:           0x400678
+      - Tag:             DT_VERNEEDNUM
+        Value:           0x2
+      - Tag:             DT_VERSYM
+        Value:           0x400660
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+  - Name:            .got
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403FC0
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         '00000000000000000000000000000000000000000000000000000000000000000000000000000000'
+  - Name:            .got.plt
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403FE8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         C03D4000000000000000000000000000000000000000000036104000000000004610400000000000561040000000000066104000000000007610400000000000
+  - Name:            .data
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x404028
+    AddressAlign:    0x1
+    Content:         '00000000'
+  - Name:            .bss
+    Type:            SHT_NOBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x404040
+    AddressAlign:    0x40
+    Offset:          0x302C
+    Size:            0x118
+  - Name:            .comment
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_MERGE, SHF_STRINGS ]
+    AddressAlign:    0x1
+    EntSize:         0x1
+    Content:         4743433A2028474E55292031312E342E312032303233303630352028526564204861742031312E342E312D3229004743433A2028474E55292031332E322E312032303233313131302028526564204861742031332E322E312D352900636C616E672076657273696F6E2031372E302E31202843656E744F532031372E302E312D322E656C392900
+  - Name:            .gnu.build.attributes
+    Type:            SHT_NOTE
+    Address:         0x406158
+    AddressAlign:    0x4
+    Notes:
+      - Name:            "GA$\x013a1"
+        Desc:            B010400000000000D610400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            E510400000000000E510400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '00104000000000001610400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '68124000000000007012400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            F0104000000000009611400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '65124000000000006512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '65124000000000006512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            16104000000000001B10400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '70124000000000007512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+  - Name:            .debug_info
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x1
+    Content:         1219000004000000000008010000000021002B0000000000000034000000A011400000000000B2000000023B000000010509031020400000000000034700000004530000000C00054C0000000602060000060107470000000807023B000000010909031C20400000000000027C000000010B09032820400000000000034700000004530000000A0008A011400000000000310000000156B2070000BA070000010409E011400000000000720000000156BE0700000108CC0600000A5B0000000B04407A0600000B048DE60600000B048FF10600000B0490030700000B04912A0700000B04925C0700000B0493730700000B0494990700000B0495B00700000B0496C80700000B0497E40700000B0498F60700000B0499020800000B049A440800000B049B650800000B049C810800000B049DAC0800000B049EC30800000B04A0D50800000B04A2F20800000B04A30E0900000B04A4250900000B04A6770900000B04A9970900000B04ACB80900000B04AED80900000B04B0EF0900000B04B20A0A00000B04B3300A00000B04B4460A00000B04B55C0A00000B04B6720A00000B04B7880A00000B04B89E0A00000B04B9D30A00000B04BAE40A00000B04BBFF0A00000B04BC1A0B00000B04BD350B00000B04BE600B00000B04BF760B00000B04C19E0B00000B04C3BC0B00000B04C4D70B00000B04C5FA0B00000B04C6160C00000B04C7310C00000B04C8430C00000B04C95F0C00000B04CA7B0C00000B04CB970C00000B04CCB30C00000B04CDC60C00000B04CEDD0C00000B04CFF30C00000B04D0090D00000B04D11F0D00000B04D2350D00000C040B01E90D00000C040C01070E00000C040D012A0E00000C041B019E0B00000C041E01770900000C042101B80900000C042401EF0900000C042801E90D00000C042901070E00000C042A012A0E00000A160300000D180300000B0955D40200000E74030000A803000009E60F4D0E00000F4D0E000000000B0942AA02000010260300006203000009510FAA020000000B09F3B60200000B0A35520E00000B0A36570E00000B0A376D0E00000B0D407D0E00000B0D418E0E00000B0D429F0E00000B0D43B00E00000B0D44C10E00000B0D45D20E00000B0D46E30E00000B0D47F40E00000B0D48050F00000B0D49160F00000B0D4A270F00000B0D4B380F00000B0D4C490F00000B0D575A0F000011450400000B1034780F00000B11838A0F00000B1184960F00000B1186BF0F00000B1188C70F00000B118ADE0F00000B118DF60F00000B1190081000000B1191191000000B11922A1000000B11933B1000000B1194881000000B11959F1000000B1196B61000000B1197C41000000B1198D21000000B1199E41000000B119AF61000000B119B0D1100000B119D1F1100000B119E361100000B119F521100000B11A16E1100000B11A48B1100000B11A7991100000B11A8A51100000B11A9BC1100000B11AACA1100000B11ABEA1100000B11AC051200000B11AD201200000B11AF321200000B11B04E1200000B11F4651200000B11F68E1200000B11F89C1200000B11F9AB0D00000B11FAAE1200000B11FCC51200000B11FD0C1300000B11FED61200000B11FFF11200000C110001221300000B1362381300000B1363431300000B13655E1300000B1366711300000B1367821300000B1368941300000B1369A61300000B136AB71300000B136BC91300000B136CEF1300000B136D0B1400000B136E211400000B136F391400000B1370501400000B1371671400000B13728D1400000B1373A91400000B1374C51400000B1375E11400000B1376021500000B1377141500000B13783A1500000B13794C1500000B137E581500000B137F661500000B1380791500000B1381901500000B1382A21500000B1383B41500000B1384C51500000B1385DB1500000B1386E91500000B1387001600000B1388131600000B1389341600000B138A4C1600000B138B681600000B138D731600000B138F841600000B13909B1600000B1391B71600000B1392CE1600000B13B9EA1600000B13BA071700000B13BB271700000B13BC421700000B13BD631700000B173A831700000B1A52AE1700000B1A53CE1700000B1A54E60600000B1A56D91700000B1A57EA1700000B1A59FB1700000B1A5B0C1800000B1A5C1D1800000B1A5D331800000B1A5E441800000B1A5F551800000B1A60661800000B1A61771800000B1A62881800000B1A63991800000B1A64AA1800000B1A65BB1800000B1A66D11800000B1A67E21800000B1A68F31800000B1A69041900000012850600008B00000003061290060000890000000215130508020D145F000000CC060000020F001467000000AD0600000214041505040210146F000000D30600000212001482000000DA0600000213000000067E000000050406750000000704034C0000000453000000040012D306000095000000051416CE040000061D01E60600000FCC06000000169C00000006E802E60600000F1507000000171A0700001225070000AC000000070518A300000016B3000000060503460700000F520700000FCC0600000F5707000000174B07000006BA00000005041946070000191507000016C200000006F602E60600000F4B0700000F150700000016C9000000060C03CC0600000F8A0700000F5707000000198F0700001794070000054B07000016D0000000064C02CC0600000F150700000FCC060000001649010000065302CC0600000F570700000F8A0700001A001BD6000000DF000000069102CC0600000F570700000F8A0700001A00169D00000006E902E60600000F15070000001CE700000006EF02E606000016F00000000634011E0800000F300800000F1E0800000F3A08000000122908000005010000082E06F7000000070819350800001747000000193F080000177A060000160C0100000629011E0800000F520700000F300800000F1E0800000F3A080000001614010000062501CC0600000F7708000000177C080000057A060000161C0100000652011E0800000F520700000FA20800000F1E0800000F3A0800000019A7080000173508000016C300000006F702E60600000F4B0700000F1507000000162601000006FD02E60600000F4B0700000016A7010000065D02CC0600000F520700000F1E0800000F8A0700001A001B2F01000038010000069802CC0600000F8A0700000F8A0700001A001640010000061403E60600000FE60600000F15070000001648010000066502CC0600000F570700000F8A0700000F410900000017460900001D0586010000181E52010000D3060000001E5C010000D3060000041E6601000076090000081E780100007609000010001F1B940100009D01000006C702CC0600000F570700000F8A0700000F410900000016A6010000067202CC0600000F520700000F1E0800000F8A0700000F41090000001BB0010000B901000006CE02CC0600000F8A0700000F8A0700000F410900000016C2010000066D02CC0600000F8A0700000F41090000001BCB010000D401000006CB02CC0600000F8A0700000F410900000016DC010000062E011E0800000F260A00000F4B0700000F3A08000000192B0A0000174C00000020E40100000661460700000F520700000F8A0700000020EB010000066ACC0600000F8F0700000F8F0700000020F20100000683CC0600000F8F0700000F8F0700000020FA0100000657460700000F520700000F8A07000000200102000006BC1E0800000F8F0700000F8F0700000016090200000654031E0800000F520700000F1E0800000F8A0700000FBF0A00000019C40A000017C90A000005CE0A00001812020000201502000006DF1E0800000F8F07000000201C0200000665460700000F520700000F8A0700000F1E080000002024020000066DCC0600000F8F0700000F8F0700000F1E08000000202C020000065C460700000F520700000F8A0700000F1E0800000016340200000658011E0800000F260A00000F560B00000F1E0800000F3A08000000195B0B0000178F070000203E02000006C01E0800000F8F0700000F8F070000001645020000067A018D0B00000F8A0700000F940B00000006EB020000040819990B00001746070000164C020000067F01B50B00000F8A0700000F940B00000006530200000404205902000006DA460700000F520700000F8A0700000F940B000000166002000006AD01F30B00000F8A0700000F940B00000FCC0600000006000100000508166702000006B201290800000F8A0700000F940B00000FCC06000000206F02000006871E0800000F520700000F8A0700000F1E080000001677020000062101CC0600000FE606000000167D020000060301CC0600000F8F0700000F8F0700000F1E080000001685020000060701460700000F520700000F8A0700000F1E08000000168D020000060C01460700000F460700000F8F0700000F1E080000001696020000061001460700000F460700000F4B0700000F1E08000000164A010000065A02CC0600000F8A0700001A001B9E020000A7020000069502CC0600000F8A0700001A0020AE02000006A5460700000F8F0700000F4B0700000020B502000006CA460700000F8F0700000F8F0700000020BD02000006AF460700000F8F0700000F4B0700000020C502000006D5460700000F8F0700000F8F0700000020CC02000006FE460700000F8F0700000F4B0700000F1E080000000AD40200000B04FBE90D00000C040401070E00000C0405012A0E00000B11CC651200000B11D28E1200000B11D69C1200000B11DCAE1200000B11E7C51200000B11E8D61200000B11E9F11200000B11EB0C1300000B11EC2213000021550500002B05000011D9651200000F230E00000F230E0000000B13AFEA1600000B13B0071700000B13B1271700000B13B2421700000B13B3631700000016DE020000068101000E00000F8A0700000F940B00000006E6020000041016F202000006BA01230E00000F8A0700000F940B00000FCC06000000060C030000050816FA02000006C101460E00000F8A0700000F940B00000FCC060000000603030000070822AA02000018AD03000020B30300000B7A2B0A00000FCC0600000F350800000023BD0300000B7D780E000017520E000020C80300000C6CCC0600000FCC0600000020D00300000C6DCC0600000FCC0600000020D80300000C6ECC0600000FCC0600000020E00300000C6FCC0600000FCC0600000020E80300000C71CC0600000FCC0600000020F00300000C70CC0600000FCC0600000020F80300000C72CC0600000FCC0600000020000400000C73CC0600000FCC0600000020080400000C74CC0600000FCC0600000020100400000C75CC0600000FCC0600000020180400000C76CC0600000FCC0600000020210400000C7ACC0600000FCC0600000020290400000C7DCC0600000FCC0600000020310400000C82CC0600000FCC060000000A39040000240E3A630300000016250500000F4E03CC0600000FCC0600000012950F0000170500000F3E2512A10F0000160500000F461305100F42144D040000F30B00000F44001452040000F30B00000F45080026560400000F5402165C0400000F4F02760900000F1E0800000F1E08000000166A0400000F5802CC0600000FF00F00000017F50F00002716710400000F5D02CC0600000FF00F000000207F0400000F658D0B00000F350800000020840400000F68CC0600000F350800000020890400000F6BF30B00000F3508000000168E0400000F3A03760900000F611000000F611000000F1E0800000F1E0800000F67100000001766100000282973100000960400000F2E0317781000002ACC0600000F611000000F611000000016A40400000F1E02760900000F1E0800000F1E08000000162B0500000F5A038A0F00000FCC0600000FCC060000002B7A0400000F6E020FCC060000002CAB0400000F2A020F760900000016B00400000F7F022B0A00000F350800000016240500000F4F03F30B00000FF30B000000162A0500000F5C03960F00000FF30B00000FF30B00000016B70400000F1B02760900000F1E0800000016BE0400000FA003CC0600000F350800000F1E0800000016C40400000FAB031E0800000F520700000F300800000F1E0800000016CD0400000FA303CC0600000F520700000F300800000F1E080000002CD40400000F44030F760900000F1E0800000F1E0800000F67100000002B740400000F74020FCC060000001CE30400000FC501CC06000016DA0400000F2602760900000F760900000F1E080000002CE20400000FC7010FD30600000020E80400000F758D0B00000F300800000FE01100000019E5110000172B0A000020EF0400000FB0F30B00000F300800000FE01100000FCC0600000020F60400000FB4290800000F300800000FE01100000FCC0600000016FE0400000F1503CC0600000F350800000016050500000FAF031E0800000F260A00000F8A0700000F1E08000000160E0500000FA703CC0600000F2B0A00000F4B070000001270120000150500000F501305100F4C144D040000230E00000F4E001452040000230E00000F4F08002B1D0500000F7A020FCC0600000016230500000F5203230E00000F230E00000016290500000F6003651200000F230E00000F230E000000202F0500000F70230E00000F350800000020350500000FC8230E00000F300800000FE01100000FCC06000000203D0500000FCD460E00000F300800000FE01100000FCC0600000020460500000F7BB50B00000F300800000FE011000000204D0500000F7E000E00000F300800000FE0110000001225070000A70000001207124E1300006D0500001554125913000074050000140E186A0500002C7D050000150C030F6C130000001738130000208605000015ACCC0600000F6C13000000168D050000150E03CC0600000F6C130000001692050000151003CC0600000F6C13000000209905000015E0CC0600000F6C1300000016A005000015FB01CC0600000F6C1300000016A605000015F202CC0600000FE01300000FE513000000196C13000019EA130000174313000016AE050000154A022B0A00000F260A00000FCC0600000FE01300000020B405000015FC6C1300000F300800000F30080000001670060000155801CC0600000FE01300000F300800001A0016BA050000151F02CC0600000FCC0600000F6C1300000016C0050000158902CC0600000F300800000FE01300000016C6050000159D021E0800000F881400000F1E0800000F1E0800000FE013000000197609000016CC0500001503016C1300000F300800000F300800000FE0130000001BD4050000DD05000015AC01CC0600000FE01300000F300800001A0016E405000015C302CC0600000F6C1300000FF30B00000FCC0600000016EA05000015F702CC0600000F6C1300000FF81400000017FD140000054313000016F205000015C802F30B00000F6C1300000016F805000015A3021E0800000F351500000F1E0800000F1E0800000FE013000000196110000016A105000015FC01CC0600000F6C130000001CFF050000150202CC0600002C07060000151E030F35080000001671060000155E01CC0600000F300800001A0016BB050000152002CC0600000FCC0600000F6C13000000160E060000152602CC0600000FCC0600000016C1050000158F02CC0600000F350800000020160600001592CC0600000F3508000000201D0600001594CC0600000F350800000F35080000002C2406000015CD020F6C130000001B2B0600003406000015AF01CC0600000F300800001A002C3A0600001542010FE01300000F260A0000001641060000154601CC0600000FE01300000F260A00000FCC0600000F1E080000001681060000156001CC0600000F260A00000F300800001A001B490600005206000015B101CC0600000F300800000F300800001A00235906000015B66C130000206106000015C72B0A00000F2B0A0000001668060000159602CC0600000FCC0600000F6C13000000166F060000156701CC0600000FE01300000F300800000F41090000001678060000156D01CC0600000F300800000F41090000001680060000156F01CC0600000F260A00000F300800000F410900000016AB060000157401CC0600000F260A00000F1E0800000F300800001A001B890600009206000015D901CC0600000FE01300000F300800000F41090000001B9A060000A306000015DE01CC0600000F300800000F410900000016AA060000157801CC0600000F260A00000F1E0800000F300800000F41090000001BB4060000BD06000015E101CC0600000F300800000F300800000F4109000000128E170000F7060000161813052016132DC5060000230E0000161408002DDE060000000E0000161610100012B91700000D070000193017BE17000005C317000012CC0600000307000018291229080000170700001B2620200700001B5FCC0600000FE60600000020290700001B65CC0600000FE60600000020320700001B92CC0600000FE606000000203B0700001B68CC0600000FE60600000020440700001B9FCC0600000FE60600000FCE17000000204D0700001B6CCC0600000FE60600000020560700001B70CC0600000FE606000000205F0700001B75CC0600000FE60600000020680700001B78CC0600000FE60600000020710700001B7DCC0600000FE606000000207A0700001B82CC0600000FE60600000020830700001B87CC0600000FE606000000208C0700001B8CCC0600000FE60600000020960700001937E60600000FE60600000FAE1700000020A00700001BA6E60600000FE60600000020A90700001BA9E60600000FE60600000020980700001934AE1700000F350800000020460700001B9BCE1700000F350800000000
+  - Name:            .debug_abbrev
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x1
+    Content:         011101250E1305030E10171B0E11011206000002340049133A0B3B0B02180000030101491300000421004913370B000005260049130000062400030E3E0B0B0B0000072400030E0B0B3E0B0000082E001101120640186E0E030E3A0B3B0B3F190000092E00110112064018030E3A0B3B0B49133F1900000A3901030E00000B08003A0B3B0B181300000C08003A0B3B05181300000D0200030E3C1900000E2E016E0E030E3A0B3B0B3C193F1900000F050049130000102E016E0E030E3A0B3B0B3C193F198701190000113900030E00001216004913030E3A0B3B0B0000131301360B0B0B3A0B3B0B0000140D00030E49133A0B3B0B380B0000151701360B0B0B3A0B3B0B0000162E01030E3A0B3B0549133C193F190000170F0049130000181300030E3C190000193700491300001A180000001B2E016E0E030E3A0B3B0549133C193F1900001C2E00030E3A0B3B0549133C193F1900001D1301360B030E0B0B00001E0D00030E4913380B00001F0F000000202E01030E3A0B3B0B49133C193F190000212E016E0E030E3A0B3B0B49133C193F19000022100049130000232E00030E3A0B3B0B49133C193F190000243A003A0B3B0B181300002513003C190000262E00030E3A0B3B053C193F198701190000271500000028260000002916004913030E3A0B3B0500002A1501491300002B2E01030E3A0B3B053C193F1987011900002C2E01030E3A0B3B053C193F1900002D0D00030E49133A0B3B0B88010F380B000000
+  - Name:            .debug_line
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x1
+    Content:         230300000400DE020000010101FB0E0D0001010101000000010000012F7573722F696E636C7564652F626974732F7479706573002F6F70742F72682F6763632D746F6F6C7365742D31332F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31332F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F3133002F7573722F696E636C756465002F7573722F62696E2F2E2E2F6C69622F636C616E672F31372F696E636C756465002F6F70742F72682F6763632D746F6F6C7365742D31332F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31332F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F31332F62697473002F6F70742F72682F6763632D746F6F6C7365742D31332F726F6F742F7573722F6C69622F6763632F7838365F36342D7265646861742D6C696E75782F31332F2E2E2F2E2E2F2E2E2F2E2E2F696E636C7564652F632B2B2F31332F6465627567002F7573722F696E636C7564652F6269747300006D61696E2E637070000000005F5F6D6273746174655F742E68000100006D6273746174655F742E68000100006377636861720002000077696E745F742E680001000077636861722E68000300005F5F46494C452E68000100007374646465662E6800040000657863657074696F6E5F7074722E6800050000636C6F63616C65000200006C6F63616C652E680003000063747970652E68000300006363747970650002000064656275672E68000600007374646C69622E68000300007374645F6162732E6800050000637374646C69620002000046494C452E680001000063737464696F000200005F5F66706F735F742E6800010000737464696F2E68000300005F5F7374646465665F6D61785F616C69676E5F742E6800040000637374646465660002000074797065732E68000700007763747970652E680003000063776374797065000200007763747970652D77636861722E680007000000000902A01140000000000015050F0A4B05200608AC0501060BE505000814050F0AE505200608AC050506E5050F59051E0608AC050506E5060B2E0206000101
+Symbols:
+  - Type:            STT_FILE
+    Index:           SHN_ABS
+DynamicSymbols:
+  - Name:            __libc_start_main
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_atexit
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZNSolsEPFRSoS_E
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZNSt8ios_base4InitC1Ev
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ITM_deregisterTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            __gmon_start__
+    Binding:         STB_WEAK
+  - Name:            _ITM_registerTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            _ZNSt8ios_base4InitD1Ev
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+    Value:           0x401030
+  - Name:            _ZSt4cout
+    Type:            STT_OBJECT
+    Section:         .bss
+    Binding:         STB_GLOBAL
+    Value:           0x404040
+    Size:            0x110
+DWARF:
+  debug_str:
+    - 'clang version 17.0.1 (CentOS 17.0.1-2.el9)'
+    - main.cpp
+    - '/tmp/test_gsymutil'
+    - __ARRAY_SIZE_TYPE__
+    - std
+    - __count
+    - __value
+    - __wch
+    - unsigned int
+    - __wchb
+    - __mbstate_t
+    - wint_t
+    - fgetwc
+    - _IO_FILE
+    - __FILE
+    - fgetws
+    - wchar_t
+    - fputwc
+    - fputws
+    - fwide
+    - __isoc99_fwscanf
+    - getwchar
+    - mbrlen
+    - unsigned long
+    - size_t
+    - mbrtowc
+    - mbsinit
+    - mbsrtowcs
+    - putwchar
+    - __isoc99_swscanf
+    - ungetwc
+    - vfwprintf
+    - gp_offset
+    - fp_offset
+    - overflow_arg_area
+    - reg_save_area
+    - __va_list_tag
+    - __isoc99_vfwscanf
+    - vswprintf
+    - __isoc99_vswscanf
+    - vwprintf
+    - __isoc99_vwscanf
+    - wcrtomb
+    - wcscat
+    - wcscmp
+    - wcscoll
+    - wcscpy
+    - wcscspn
+    - wcsftime
+    - tm
+    - wcslen
+    - wcsncat
+    - wcsncmp
+    - wcsncpy
+    - wcsrtombs
+    - wcsspn
+    - wcstod
+    - wcstof
+    - float
+    - wcstok
+    - wcstol
+    - wcstoul
+    - wcsxfrm
+    - wctob
+    - wmemcmp
+    - wmemcpy
+    - wmemmove
+    - wmemset
+    - __isoc99_wscanf
+    - wcschr
+    - wcspbrk
+    - wcsrchr
+    - wcsstr
+    - wmemchr
+    - __gnu_cxx
+    - wcstold
+    - long double
+    - wcstoll
+    - wcstoull
+    - unsigned long long
+    - __exception_ptr
+    - _ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE
+    - rethrow_exception
+    - _ZNSt15__exception_ptr4swapERNS_13exception_ptrES1_
+    - swap
+    - lconv
+    - setlocale
+    - localeconv
+    - isalnum
+    - isalpha
+    - iscntrl
+    - isdigit
+    - isgraph
+    - islower
+    - isprint
+    - ispunct
+    - isspace
+    - isupper
+    - isxdigit
+    - tolower
+    - toupper
+    - isblank
+    - __gnu_debug
+    - __debug
+    - quot
+    - rem
+    - abort
+    - aligned_alloc
+    - atexit
+    - at_quick_exit
+    - atof
+    - atoi
+    - atol
+    - bsearch
+    - __compar_fn_t
+    - calloc
+    - free
+    - getenv
+    - malloc
+    - mblen
+    - mbstowcs
+    - mbtowc
+    - qsort
+    - realloc
+    - srand
+    - strtod
+    - strtol
+    - strtoul
+    - system
+    - wcstombs
+    - wctomb
+    - lldiv_t
+    - _Exit
+    - llabs
+    - lldiv
+    - atoll
+    - strtoll
+    - strtoull
+    - strtof
+    - strtold
+    - _ZN9__gnu_cxx3divExx
+    - _G_fpos_t
+    - __fpos_t
+    - clearerr
+    - fclose
+    - feof
+    - ferror
+    - fflush
+    - fgetc
+    - fgetpos
+    - fgets
+    - fopen
+    - fputc
+    - fputs
+    - fread
+    - freopen
+    - __isoc99_fscanf
+    - fseek
+    - fsetpos
+    - ftell
+    - fwrite
+    - getchar
+    - perror
+    - putchar
+    - remove
+    - rename
+    - rewind
+    - __isoc99_scanf
+    - setbuf
+    - setvbuf
+    - __isoc99_sscanf
+    - tmpfile
+    - tmpnam
+    - ungetc
+    - vfprintf
+    - vprintf
+    - vsprintf
+    - __isoc99_vfscanf
+    - __isoc99_vscanf
+    - vsnprintf
+    - __isoc99_vsscanf
+    - __clang_max_align_nonce1
+    - __clang_max_align_nonce2
+    - max_align_t
+    - __int32_t
+    - wctrans_t
+    - wctype_t
+    - iswalnum
+    - iswalpha
+    - iswblank
+    - iswcntrl
+    - iswctype
+    - iswdigit
+    - iswgraph
+    - iswlower
+    - iswprint
+    - iswpunct
+    - iswspace
+    - iswupper
+    - iswxdigit
+    - towctrans
+    - towlower
+    - towupper
+    - _Z3foov
+    - foo
+    - main
+...
diff --git a/llvm/test/tools/llvm-gsymutil/X86/elf-symtab.yaml b/llvm/test/tools/llvm-gsymutil/X86/elf-symtab.yaml
new file mode 100644
index 0000000000000..31a05ce07547a
--- /dev/null
+++ b/llvm/test/tools/llvm-gsymutil/X86/elf-symtab.yaml
@@ -0,0 +1,654 @@
+## Test loading ELF files with only symbol table and only DWARF.
+## First we make the ELF files from yaml, then we convert the ELF files to GSYM
+## and perform lookups on the newly created GSYM
+## Notice the second lookup will have more info as we included DWARF
+
+# RUN: yaml2obj %s -o %t
+# RUN: yaml2obj %p/elf-dwarf-only.yaml -o elf-dwarf-only.yaml.tmp
+# RUN: llvm-gsymutil --convert %t -o %t.gsym 2>&1 | FileCheck %s --check-prefix=CONVERT
+# RUN: llvm-gsymutil --convert elf-dwarf-only.yaml.tmp --symtab-file %t 2>&1 | FileCheck %s --check-prefix=CONVERT1
+# RUN: llvm-gsymutil --address 0x00000000004011e0 %t.gsym | FileCheck %s --check-prefix=LOOKUP
+# RUN: llvm-gsymutil --address 0x00000000004011e0 elf-dwarf-only.yaml.tmp.gsym | FileCheck %s --check-prefix=LOOKUP1
+
+# CONVERT: Input file: {{.*\.yaml\.tmp}}
+# CONVERT: Output file (x86_64): {{.*\.yaml\.tmp\.gsym}}
+# CONVERT: Loaded 0 functions from DWARF.
+# CONVERT: Loaded 12 functions from symbol table.
+# CONVERT: Pruned 0 functions, ended with 12 total
+
+# CONVERT1: Input file: {{.*\.yaml\.tmp}}
+# CONVERT1: Output file (x86_64): {{.*\.yaml\.tmp\.gsym}}
+# CONVERT1: Loaded 2 functions from DWARF.
+# CONVERT1: Using symbol table file: {{.*\.yaml\.tmp}}
+# CONVERT1: Loaded 12 functions from symbol table.
+# CONVERT1: Pruned 2 functions, ended with 12 total
+
+# LOOKUP: Looking up addresses in "{{.*\.yaml\.tmp\.gsym}}":
+# LOOKUP: 0x00000000004011e0: main
+
+# LOOKUP1: Looking up addresses in "{{.*\.yaml\.tmp\.gsym}}":
+# LOOKUP1: 0x00000000004011e0: main @ /tmp/test_gsymutil/main.cpp
+
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_X86_64
+  Entry:           0x4010B0
+ProgramHeaders:
+  - Type:            PT_PHDR
+    Flags:           [ PF_R ]
+    VAddr:           0x400040
+    Align:           0x8
+  - Type:            PT_INTERP
+    Flags:           [ PF_R ]
+    FirstSec:        .interp
+    LastSec:         .interp
+    VAddr:           0x400318
+  - Type:            PT_LOAD
+    Flags:           [ PF_R ]
+    FirstSec:        .interp
+    LastSec:         .rela.plt
+    VAddr:           0x400000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_X, PF_R ]
+    FirstSec:        .init
+    LastSec:         .fini
+    VAddr:           0x401000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_R ]
+    FirstSec:        .rodata
+    LastSec:         .eh_frame
+    VAddr:           0x402000
+    Align:           0x1000
+  - Type:            PT_LOAD
+    Flags:           [ PF_W, PF_R ]
+    FirstSec:        .init_array
+    LastSec:         .bss
+    VAddr:           0x403DA8
+    Align:           0x1000
+  - Type:            PT_DYNAMIC
+    Flags:           [ PF_W, PF_R ]
+    FirstSec:        .dynamic
+    LastSec:         .dynamic
+    VAddr:           0x403DC0
+    Align:           0x8
+  - Type:            PT_NOTE
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.property
+    LastSec:         .note.gnu.property
+    VAddr:           0x400338
+    Align:           0x8
+  - Type:            PT_NOTE
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.build-id
+    LastSec:         .note.ABI-tag
+    VAddr:           0x400358
+    Align:           0x4
+  - Type:            PT_GNU_PROPERTY
+    Flags:           [ PF_R ]
+    FirstSec:        .note.gnu.property
+    LastSec:         .note.gnu.property
+    VAddr:           0x400338
+    Align:           0x8
+  - Type:            PT_GNU_EH_FRAME
+    Flags:           [ PF_R ]
+    FirstSec:        .eh_frame_hdr
+    LastSec:         .eh_frame_hdr
+    VAddr:           0x402034
+    Align:           0x4
+  - Type:            PT_GNU_STACK
+    Flags:           [ PF_W, PF_R ]
+    Align:           0x10
+  - Type:            PT_GNU_RELRO
+    Flags:           [ PF_R ]
+    FirstSec:        .init_array
+    LastSec:         .got
+    VAddr:           0x403DA8
+Sections:
+  - Name:            .interp
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400318
+    AddressAlign:    0x1
+    Content:         2F6C696236342F6C642D6C696E75782D7838362D36342E736F2E3200
+  - Name:            .note.gnu.property
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400338
+    AddressAlign:    0x8
+    Notes:
+      - Name:            GNU
+        Desc:            028000C0040000000300000000000000
+        Type:            NT_GNU_PROPERTY_TYPE_0
+  - Name:            .note.gnu.build-id
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400358
+    AddressAlign:    0x4
+    Notes:
+      - Name:            GNU
+        Desc:            6E3474EA595AB65F323A92D034BA2EA01E807B91
+        Type:            NT_PRPSINFO
+  - Name:            .note.ABI-tag
+    Type:            SHT_NOTE
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x40037C
+    AddressAlign:    0x4
+    Notes:
+      - Name:            GNU
+        Desc:            '00000000030000000200000000000000'
+        Type:            NT_VERSION
+  - Name:            .gnu.hash
+    Type:            SHT_GNU_HASH
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4003A0
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Header:
+      SymNdx:          0xA
+      Shift2:          0x6
+    BloomFilter:     [ 0x10000100100000 ]
+    HashBuckets:     [ 0xA, 0x0 ]
+    HashValues:      [ 0x9F4FD20, 0x430C9815 ]
+  - Name:            .dynsym
+    Type:            SHT_DYNSYM
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4003C8
+    Link:            .dynstr
+    AddressAlign:    0x8
+  - Name:            .dynstr
+    Type:            SHT_STRTAB
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4004E8
+    AddressAlign:    0x1
+  - Name:            .gnu.version
+    Type:            SHT_GNU_versym
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400660
+    Link:            .dynsym
+    AddressAlign:    0x2
+    Entries:         [ 0, 3, 4, 2, 2, 2, 1, 1, 1, 2, 2, 2 ]
+  - Name:            .gnu.version_r
+    Type:            SHT_GNU_verneed
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x400678
+    Link:            .dynstr
+    AddressAlign:    0x8
+    Dependencies:
+      - Version:         1
+        File:            libc.so.6
+        Entries:
+          - Name:            GLIBC_2.2.5
+            Hash:            157882997
+            Flags:           0
+            Other:           4
+          - Name:            GLIBC_2.34
+            Hash:            110530996
+            Flags:           0
+            Other:           3
+      - Version:         1
+        File:            'libstdc++.so.6'
+        Entries:
+          - Name:            GLIBCXX_3.4
+            Hash:            143796596
+            Flags:           0
+            Other:           2
+  - Name:            .rela.dyn
+    Type:            SHT_RELA
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x4006C8
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Relocations:
+      - Offset:          0x403FC0
+        Symbol:          __libc_start_main
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FC8
+        Symbol:          _ITM_deregisterTMCloneTable
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FD0
+        Symbol:          __gmon_start__
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FD8
+        Symbol:          _ITM_registerTMCloneTable
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x403FE0
+        Symbol:          _ZNSt8ios_base4InitD1Ev
+        Type:            R_X86_64_GLOB_DAT
+      - Offset:          0x404040
+        Symbol:          _ZSt4cout
+        Type:            R_X86_64_COPY
+  - Name:            .rela.plt
+    Type:            SHT_RELA
+    Flags:           [ SHF_ALLOC, SHF_INFO_LINK ]
+    Address:         0x400758
+    Link:            .dynsym
+    AddressAlign:    0x8
+    Info:            .got.plt
+    Relocations:
+      - Offset:          0x404000
+        Symbol:          _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404008
+        Symbol:          __cxa_atexit
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404010
+        Symbol:          _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404018
+        Symbol:          _ZNSolsEPFRSoS_E
+        Type:            R_X86_64_JUMP_SLOT
+      - Offset:          0x404020
+        Symbol:          _ZNSt8ios_base4InitC1Ev
+        Type:            R_X86_64_JUMP_SLOT
+  - Name:            .init
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401000
+    AddressAlign:    0x4
+    Offset:          0x1000
+    Content:         F30F1EFA4883EC08488B05C12F00004885C07402FFD04883C408C3
+  - Name:            .plt
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401020
+    AddressAlign:    0x10
+    EntSize:         0x10
+    Content:         FF35CA2F0000FF25CC2F00000F1F4000FF25CA2F00006800000000E9E0FFFFFFFF25C22F00006801000000E9D0FFFFFFFF25BA2F00006802000000E9C0FFFFFFFF25B22F00006803000000E9B0FFFFFFFF25AA2F00006804000000E9A0FFFFFF
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401080
+    AddressAlign:    0x10
+    Content:         F30F1EFA53488D1DC53000004889DFE8DCFFFFFF488B3D452F00004889DE5B488D15620F0000E995FFFFFF0F1F440000F30F1EFA31ED4989D15E4889E24883E4F050544531C031C948C7C7E0114000FF15EB2E0000F4662E0F1F840000000000F30F1EFAC3662E0F1F84000000000090488D3D392F0000488D05322F00004839F87415488B05BE2E00004885C07409FFE00F1F8000000000C30F1F8000000000488D3D092F0000488D35022F00004829FE4889F048C1EE3F48C1F8034801C648D1FE7414488B058D2E00004885C07408FFE0660F1F440000C30F1F8000000000F30F1EFA803DE52F0000007513554889E5E87AFFFFFFC605D32F0000015DC390C366662E0F1F8400000000000F1F4000F30F1EFAEB8A662E0F1F840000000000554889E548BF404040000000000048BE1020400000000000E893FEFFFF4889C748BE3010400000000000E891FEFFFF5DC36666666666662E0F1F840000000000554889E54883EC10C745FC0000000048BF404040000000000048BE1C20400000000000E848FEFFFF4889C748BE3010400000000000E846FEFFFFE881FFFFFF48BF404040000000000048BE2820400000000000E818FEFFFF4889C748BE3010400000000000E816FEFFFF31C04883C4105DC3662E0F1F8400000000000F1F4000F30F1EFAC3
+  - Name:            .fini
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x401268
+    AddressAlign:    0x4
+    Content:         F30F1EFA4883EC084883C408C3
+  - Name:            .rodata
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402000
+    AddressAlign:    0x8
+    Offset:          0x2000
+    Content:         010002000000000000000000000000005468697320697320666F6F0068656C6C6F20776F726C6400616674657220666F6F00
+  - Name:            .eh_frame_hdr
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402034
+    AddressAlign:    0x4
+    Content:         011B033B4000000007000000ECEFFFFF840000004CF0FFFF000100007CF0FFFF5C000000ACF0FFFF700000006CF1FFFFAC000000ACF1FFFFCC0000002CF2FFFFEC000000
+  - Name:            .eh_frame
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x402078
+    AddressAlign:    0x8
+    Content:         1400000000000000017A5200017810011B0C070890010000100000001C00000018F0FFFF2600000000440710100000003000000034F0FFFF0500000000000000240000004400000060EFFFFF60000000000E10460E184A0F0B770880003F1A3B2A332422000000001C0000006C000000B8F0FFFF3100000000410E108602430D066C0C07080000001C0000008C000000D8F0FFFF7200000000410E108602430D06026D0C0708000010000000AC00000038F1FFFF050000000000000018000000C000000044EFFFFF2B00000000450E1083025A0E0800000000000000
+  - Name:            .init_array
+    Type:            SHT_INIT_ARRAY
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DA8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Offset:          0x2DA8
+    Content:         '80104000000000009011400000000000'
+  - Name:            .fini_array
+    Type:            SHT_FINI_ARRAY
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DB8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         '6011400000000000'
+  - Name:            .dynamic
+    Type:            SHT_DYNAMIC
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403DC0
+    Link:            .dynstr
+    AddressAlign:    0x8
+    Entries:
+      - Tag:             DT_NEEDED
+        Value:           0x123
+      - Tag:             DT_NEEDED
+        Value:           0x132
+      - Tag:             DT_NEEDED
+        Value:           0x13C
+      - Tag:             DT_NEEDED
+        Value:           0x14A
+      - Tag:             DT_INIT
+        Value:           0x401000
+      - Tag:             DT_FINI
+        Value:           0x401268
+      - Tag:             DT_INIT_ARRAY
+        Value:           0x403DA8
+      - Tag:             DT_INIT_ARRAYSZ
+        Value:           0x10
+      - Tag:             DT_FINI_ARRAY
+        Value:           0x403DB8
+      - Tag:             DT_FINI_ARRAYSZ
+        Value:           0x8
+      - Tag:             DT_GNU_HASH
+        Value:           0x4003A0
+      - Tag:             DT_STRTAB
+        Value:           0x4004E8
+      - Tag:             DT_SYMTAB
+        Value:           0x4003C8
+      - Tag:             DT_STRSZ
+        Value:           0x177
+      - Tag:             DT_SYMENT
+        Value:           0x18
+      - Tag:             DT_DEBUG
+        Value:           0x0
+      - Tag:             DT_PLTGOT
+        Value:           0x403FE8
+      - Tag:             DT_PLTRELSZ
+        Value:           0x78
+      - Tag:             DT_PLTREL
+        Value:           0x7
+      - Tag:             DT_JMPREL
+        Value:           0x400758
+      - Tag:             DT_RELA
+        Value:           0x4006C8
+      - Tag:             DT_RELASZ
+        Value:           0x90
+      - Tag:             DT_RELAENT
+        Value:           0x18
+      - Tag:             DT_VERNEED
+        Value:           0x400678
+      - Tag:             DT_VERNEEDNUM
+        Value:           0x2
+      - Tag:             DT_VERSYM
+        Value:           0x400660
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+      - Tag:             DT_NULL
+        Value:           0x0
+  - Name:            .got
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403FC0
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         '00000000000000000000000000000000000000000000000000000000000000000000000000000000'
+  - Name:            .got.plt
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x403FE8
+    AddressAlign:    0x8
+    EntSize:         0x8
+    Content:         C03D4000000000000000000000000000000000000000000036104000000000004610400000000000561040000000000066104000000000007610400000000000
+  - Name:            .data
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x404028
+    AddressAlign:    0x1
+    Content:         '00000000'
+  - Name:            .bss
+    Type:            SHT_NOBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    Address:         0x404040
+    AddressAlign:    0x40
+    Offset:          0x302C
+    Size:            0x118
+  - Name:            .comment
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_MERGE, SHF_STRINGS ]
+    AddressAlign:    0x1
+    EntSize:         0x1
+    Content:         4743433A2028474E55292031312E342E312032303233303630352028526564204861742031312E342E312D3229004743433A2028474E55292031332E322E312032303233313131302028526564204861742031332E322E312D352900636C616E672076657273696F6E2031372E302E31202843656E744F532031372E302E312D322E656C392900
+  - Name:            .gnu.build.attributes
+    Type:            SHT_NOTE
+    Address:         0x406158
+    AddressAlign:    0x4
+    Notes:
+      - Name:            "GA$\x013a1"
+        Desc:            B010400000000000D610400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            E510400000000000E510400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '00104000000000001610400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '68124000000000007012400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            F0104000000000009611400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '65124000000000006512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '65124000000000006512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            16104000000000001B10400000000000
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+      - Name:            "GA$\x013a1"
+        Desc:            '70124000000000007512400000000000'
+        Type:            NT_GNU_BUILD_ATTRIBUTE_OPEN
+Symbols:
+  - Name:            __abi_tag
+    Type:            STT_OBJECT
+    Section:         .note.ABI-tag
+    Value:           0x40037C
+    Size:            0x20
+  - Name:            _GLOBAL__sub_I.00090_ios_init.cc
+    Type:            STT_FUNC
+    Section:         .text
+    Value:           0x401080
+    Size:            0x2B
+  - Name:            _ZStL8__ioinit
+    Type:            STT_OBJECT
+    Section:         .bss
+    Value:           0x404151
+    Size:            0x1
+  - Name:            deregister_tm_clones
+    Type:            STT_FUNC
+    Section:         .text
+    Value:           0x4010F0
+  - Name:            register_tm_clones
+    Type:            STT_FUNC
+    Section:         .text
+    Value:           0x401120
+  - Name:            __do_global_dtors_aux
+    Type:            STT_FUNC
+    Section:         .text
+    Value:           0x401160
+  - Name:            completed.0
+    Type:            STT_OBJECT
+    Section:         .bss
+    Value:           0x404150
+    Size:            0x1
+  - Name:            __do_global_dtors_aux_fini_array_entry
+    Type:            STT_OBJECT
+    Section:         .fini_array
+    Value:           0x403DB8
+  - Name:            frame_dummy
+    Type:            STT_FUNC
+    Section:         .text
+    Value:           0x401190
+  - Name:            __frame_dummy_init_array_entry
+    Type:            STT_OBJECT
+    Section:         .init_array
+    Value:           0x403DB0
+  - Name:            __FRAME_END__
+    Type:            STT_OBJECT
+    Section:         .eh_frame
+    Value:           0x402150
+  - Name:            __GNU_EH_FRAME_HDR
+    Section:         .eh_frame_hdr
+    Value:           0x402034
+  - Name:            _DYNAMIC
+    Type:            STT_OBJECT
+    Section:         .dynamic
+    Value:           0x403DC0
+  - Name:            _GLOBAL_OFFSET_TABLE_
+    Type:            STT_OBJECT
+    Section:         .got.plt
+    Value:           0x403FE8
+  - Name:            _edata
+    Section:         .data
+    Binding:         STB_GLOBAL
+    Value:           0x40402C
+  - Name:            data_start
+    Section:         .data
+    Binding:         STB_WEAK
+    Value:           0x404028
+  - Name:            _IO_stdin_used
+    Type:            STT_OBJECT
+    Section:         .rodata
+    Binding:         STB_GLOBAL
+    Value:           0x402000
+    Size:            0x4
+  - Name:            main
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x4011E0
+    Size:            0x72
+  - Name:            '_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_ at GLIBCXX_3.4'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+    Value:           0x401030
+  - Name:            __dso_handle
+    Type:            STT_OBJECT
+    Section:         .rodata
+    Binding:         STB_GLOBAL
+    Value:           0x402008
+    Other:           [ STV_HIDDEN ]
+  - Name:            _fini
+    Type:            STT_FUNC
+    Section:         .fini
+    Binding:         STB_GLOBAL
+    Value:           0x401268
+    Other:           [ STV_HIDDEN ]
+  - Name:            '__libc_start_main at GLIBC_2.34'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _dl_relocate_static_pie
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x4010E0
+    Size:            0x5
+    Other:           [ STV_HIDDEN ]
+  - Name:            '__cxa_atexit at GLIBC_2.2.5'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _start
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x4010B0
+    Size:            0x26
+  - Name:            '_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc at GLIBCXX_3.4'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            '_ZNSolsEPFRSoS_E at GLIBCXX_3.4'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _init
+    Type:            STT_FUNC
+    Section:         .init
+    Binding:         STB_GLOBAL
+    Value:           0x401000
+    Other:           [ STV_HIDDEN ]
+  - Name:            __TMC_END__
+    Type:            STT_OBJECT
+    Section:         .data
+    Binding:         STB_GLOBAL
+    Value:           0x404030
+    Other:           [ STV_HIDDEN ]
+  - Name:            '_ZSt4cout at GLIBCXX_3.4'
+    Type:            STT_OBJECT
+    Section:         .bss
+    Binding:         STB_GLOBAL
+    Value:           0x404040
+    Size:            0x110
+  - Name:            __data_start
+    Section:         .data
+    Binding:         STB_GLOBAL
+    Value:           0x404028
+  - Name:            _end
+    Section:         .bss
+    Binding:         STB_GLOBAL
+    Value:           0x404158
+  - Name:            __bss_start
+    Section:         .bss
+    Binding:         STB_GLOBAL
+    Value:           0x40402C
+  - Name:            _Z3foov
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x4011A0
+    Size:            0x31
+  - Name:            '_ZNSt8ios_base4InitC1Ev at GLIBCXX_3.4'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZSt21ios_base_library_initv
+    Type:            STT_FUNC
+    Section:         .text
+    Binding:         STB_GLOBAL
+    Value:           0x401260
+    Size:            0x5
+  - Name:            _ITM_deregisterTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            __gmon_start__
+    Binding:         STB_WEAK
+  - Name:            _ITM_registerTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            '_ZNSt8ios_base4InitD1Ev at GLIBCXX_3.4'
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+DynamicSymbols:
+  - Name:            __libc_start_main
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            __cxa_atexit
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZNSolsEPFRSoS_E
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZNSt8ios_base4InitC1Ev
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ITM_deregisterTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            __gmon_start__
+    Binding:         STB_WEAK
+  - Name:            _ITM_registerTMCloneTable
+    Binding:         STB_WEAK
+  - Name:            _ZNSt8ios_base4InitD1Ev
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+  - Name:            _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
+    Type:            STT_FUNC
+    Binding:         STB_GLOBAL
+    Value:           0x401030
+  - Name:            _ZSt4cout
+    Type:            STT_OBJECT
+    Section:         .bss
+    Binding:         STB_GLOBAL
+    Value:           0x404040
+    Size:            0x110
+...
diff --git a/llvm/tools/llvm-gsymutil/Opts.td b/llvm/tools/llvm-gsymutil/Opts.td
index 740291479f932..ea67a940c56e2 100644
--- a/llvm/tools/llvm-gsymutil/Opts.td
+++ b/llvm/tools/llvm-gsymutil/Opts.td
@@ -35,3 +35,6 @@ defm address : Eq<"address", "Lookup an address in a GSYM file">;
 def addresses_from_stdin :
   FF<"addresses-from-stdin",
      "Lookup addresses in a GSYM file that are read from stdin\nEach input line is expected to be of the following format: <addr> <gsym-path>">;
+defm symtab_file :
+  Eq<"symtab-file",
+     "Specify a separate file for symbol table to GSYM conversion.\nIn case the symbol table and debug info are not in the same binary. Does not support universal binary.">;
diff --git a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
index e5ae726546d4e..07d3a2f63384f 100644
--- a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
+++ b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp
@@ -92,6 +92,7 @@ static uint64_t SegmentSize;
 static bool Quiet;
 static std::vector<uint64_t> LookupAddresses;
 static bool LookupAddressesFromStdin;
+static std::string SymbolTableFilename;
 
 static void parseArgs(int argc, char **argv) {
   GSYMUtilOptTable Tbl;
@@ -110,8 +111,9 @@ static void parseArgs(int argc, char **argv) {
         "information in each GSYM file.\n"
         "Specify a single GSYM file along with one or more --lookup options to "
         "lookup addresses within that GSYM file.\n"
-        "Use the --convert option to specify a file with option --out-file "
-        "option to convert to GSYM format.\n";
+        "Use the --convert option to specify a file (with --symtab-file if "
+        "needed) "
+        "with option --out-file option to convert to GSYM format.\n";
 
     Tbl.printHelp(llvm::outs(), "llvm-gsymutil [options] <input GSYM files>",
                   Overview);
@@ -169,6 +171,9 @@ static void parseArgs(int argc, char **argv) {
   }
 
   LookupAddressesFromStdin = Args.hasArg(OPT_addresses_from_stdin);
+
+  if (const llvm::opt::Arg *A = Args.getLastArg(OPT_symtab_file_EQ))
+    SymbolTableFilename = A->getValue();
 }
 
 /// @}
@@ -358,7 +363,38 @@ static llvm::Error handleObjectFile(ObjectFile &Obj,
     return Err;
 
   // Get the UUID and convert symbol table to GSYM.
-  if (auto Err = ObjectFileTransformer::convert(Obj, LogOS, Gsym))
+  // Use a separate file for symbol table if specified
+  std::string SymtabFile = SymbolTableFilename;
+  ErrorOr<std::unique_ptr<MemoryBuffer>> SymtabBuffOrErr = nullptr;
+  std::unique_ptr<MemoryBuffer> SymtabBuffer = nullptr;
+  if (!SymtabFile.empty()) {
+    outs() << "Using symbol table file: " << SymbolTableFilename << "\n";
+    SymtabBuffOrErr = MemoryBuffer::getFileOrSTDIN(SymtabFile);
+    error(SymtabFile, SymtabBuffOrErr.getError());
+    SymtabBuffer = std::move(SymtabBuffOrErr.get());
+    Expected<std::unique_ptr<Binary>> SymtabBinOrErr =
+        object::createBinary(*SymtabBuffer);
+    error(SymtabFile, errorToErrorCode(SymtabBinOrErr.takeError()));
+    if (auto Symtab = dyn_cast<ObjectFile>(SymtabBinOrErr->get())) {
+      Triple ObjTriple(Obj.makeTriple());
+      Triple SymtabTriple(Symtab->makeTriple());
+      if (ObjTriple.getArchName() != SymtabTriple.getArchName())
+        return createStringError(std::errc::invalid_argument,
+                                 "Cannot use symbol table file %s in %s for "
+                                 "binary in %s architecture.",
+                                 SymtabFile.c_str(),
+                                 ObjTriple.getArchName().data(),
+                                 SymtabTriple.getArchName().data());
+      if (auto Err = ObjectFileTransformer::convert(*Symtab, LogOS, Gsym))
+        return Err;
+    } else
+      return createStringError(std::errc::invalid_argument,
+                               "Input symbol table file %s is not a "
+                               "valid object file.\n"
+                               "Supported files are ELF and mach-o "
+                               "(exclude universal binary) files.",
+                               SymtabFile.c_str());
+  } else if (auto Err = ObjectFileTransformer::convert(Obj, LogOS, Gsym))
     return Err;
 
   // Finalize the GSYM to make it ready to save to disk. This will remove
@@ -400,6 +436,12 @@ static llvm::Error handleBuffer(StringRef Filename, MemoryBufferRef Buffer,
     if (auto Err = handleObjectFile(*Obj, OutFile))
       return Err;
   } else if (auto *Fat = dyn_cast<MachOUniversalBinary>(BinOrErr->get())) {
+    // Symbol table file is not accepted with universal binary
+    std::string SymtabFile = SymbolTableFilename;
+    if (!SymtabFile.empty())
+      return createStringError(std::errc::invalid_argument,
+                               "--symtab-file is not accepted for "
+                               "universal binary conversion");
     // Iterate over all contained architectures and filter out any that were
     // not specified with the "--arch <arch>" option. If the --arch option was
     // not specified on the command line, we will process all architectures.



More information about the llvm-commits mailing list