| ## 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 |