## This test verifies that loading an ELF file that has no section headers can ## find the contents on the .dynamic section and the strings associated with ## the .dynamic seciton. ## - Loading the .dynamic section from the PT_DYNAMIC ## This test will make a simple executable that links against libc.so and we ## verify that we can find the DT_NEEDED entry with the shared library found ## in the .dynamic dump from "image dump objfile" # RUN: yaml2obj %s -o %t # RUN: %lldb -b \ # RUN: -o "target create -d '%t'" \ # 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 find the program headers and see a PT_DYNAMIC entry. # CHECK: Program Headers # CHECK: IDX p_type p_offset p_vaddr p_paddr p_filesz p_memsz p_flags p_align # CHECK: ==== --------------- -------- -------- -------- -------- -------- ------------------------- -------- # CHECK: [ 0] PT_LOAD 000000b0 00000000 00000000 00000170 00000170 00000000 ( ) 00000001 # CHECK: [ 1] PT_DYNAMIC 000001b0 00000100 00000100 00000070 00000070 00000000 ( ) 00000008 # CHECK: Dependent Modules: # CHECK: ccc # CHECK: aaa # CHECK: bbb # Make sure we see some sections created from the program headers # MAIN: SectID # MAIN: PT_LOAD[0] # CHECK: .dynamic: # CHECK: IDX d_tag d_val/d_ptr # CHECK: ==== ---------------- ------------------ # CHECK: [ 0] STRTAB 0x0000000000000000 # CHECK: [ 1] NEEDED 0x0000000000000009 "ccc" # CHECK: [ 2] NEEDED 0x0000000000000001 "aaa" # CHECK: [ 3] NEEDED 0x0000000000000005 "bbb" # CHECK: [ 4] STRSZ 0x0000000000000100 # CHECK: [ 5] DEBUG 0x00000000deadbeef # CHECK: [ 6] NULL 0x0000000000000000 # Make sure the ObjectFileELF::GetImageInfoAddress() works. # CHECK: image_info_address = 0x0000000000000158 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_EXEC Machine: EM_X86_64 Sections: - Type: SectionHeaderTable NoHeaders: true - Name: .dynstr Type: SHT_STRTAB Flags: [ SHF_ALLOC ] Content: '00616161006262620063636300' ## 0,a,a,a,0,b,b,b,0,c,c,c,0 Size: 0x100 - Name: .dynamic Type: SHT_DYNAMIC Address: 0x100 Entries: - Tag: DT_STRTAB Value: 0x0000000000000000 - Tag: DT_NEEDED Value: 9 - Tag: DT_NEEDED Value: 1 - Tag: DT_NEEDED Value: 5 - Tag: DT_STRSZ Value: 0x100 - Tag: DT_DEBUG Value: 0xdeadbeef - Tag: DT_NULL Value: 0x0 ProgramHeaders: - Type: PT_LOAD VAddr: 0x0 FirstSec: .dynstr LastSec: .dynamic - Type: PT_DYNAMIC FirstSec: .dynamic LastSec: .dynamic VAddr: 0x100 Align: 0x8