================ @@ -0,0 +1,631 @@ +## This test verifies that loading an ELF file that has no section headers can +## load the dynamic symbol table using the DT_SYMTAB, DT_SYMENT, DT_HASH or +## the DT_GNU_HASH .dynamic key/value pairs that are loaded via the PT_DYNAMIC +## segment. +## +## This test will convert a shared library from yaml, strip its section headers, +## and varify that LLDB can load the dynamic symbol table. We must manually +## strip the section headers from a full shared library because our ELF YAML +## support in obj2yaml/yaml2obj doesn't support ELF files with program headers +## only, they must have sections or the file doesn't get recreated correctlty. + +# RUN: yaml2obj %s -o %t +# RUN: llvm-strip --strip-sections %t -o %t.noshdrs + +# RUN: %lldb -b \ +# RUN: -o "target create -d '%t.noshdrs'" \ +# RUN: -o "image dump objfile" \ +# RUN: | FileCheck %s --dump-input=always +# CHECK: (lldb) image dump objfile +# CHECK: Dumping headers for 1 module(s). +# CHECK: ObjectFileELF, file = +# CHECK: ELF Header +# Make sure there are no section headers +# CHECK: e_shnum = 0x00000000 +# Make sure we were able to load the symbols +# CHECK: elf-dynsym.yaml.tmp.noshdrs, num_symbols = 9: +# CHECK: [ 0] 1 Undefined 0x0000000000000000 0x0000000000000000 0x00000022 __cxa_finalize +# CHECK: [ 1] 2 X Undefined 0x0000000000000000 0x0000000000000000 0x00000012 puts +# CHECK: [ 2] 3 Undefined 0x0000000000000000 0x0000000000000000 0x00000020 _ITM_deregisterTMCloneTable +# CHECK: [ 3] 4 Undefined 0x0000000000000000 0x0000000000000000 0x00000020 __gmon_start__ +# CHECK: [ 4] 5 Undefined 0x0000000000000000 0x0000000000000000 0x00000020 _ITM_registerTMCloneTable +# CHECK: [ 5] 6 X Code 0x0000000000001135 0x0000000000000016 0x00000012 baz() +# CHECK: [ 6] 7 X Code 0x000000000000111f 0x0000000000000016 0x00000012 bar() +# CHECK: [ 7] 8 X Code 0x000000000000114b 0x0000000000000016 0x00000012 biz() +# CHECK: [ 8] 9 X Code 0x0000000000001109 0x0000000000000016 0x00000012 foo() + +--- !ELF ---------------- clayborg wrote:
I am happy to use the llvm-mc + ld.lld trick, bit I need: - the output file to have a .dynamic section or PT_DYNAMIC (above example doesn't) - it needs to have a dynamic symbol table (SHT_DYNSYM or .dynamic section needs to have `DT_SYMTAB` and `DT_SYMENT` entries - Needs to have a DT_HASH or DT_GNU_HASH I don't know much about the `llvm-mc` tool, but if you can get it to generate a file that i can use I will use it. https://github.com/llvm/llvm-project/pull/112596 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits