# RUN: llvm-readobj --sections --symbols --dyn-syms --needed-libs \ # RUN: %p/Inputs/shared-object-test.elf-i386 | FileCheck %s # RUN: llvm-readobj --sections --symbols --dyn-syms --needed-libs \ # RUN: %p/Inputs/shared-object-test.elf-x86-64 | FileCheck %s # CHECK: Sections [ # CHECK: Section { # CHECK: Name: (0) # CHECK: Type: SHT_NULL # CHECK: Flags [ (0x0) # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .hash # CHECK: Type: SHT_HASH # CHECK: Flags [ (0x2) # CHECK: SHF_ALLOC # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .dynsym # CHECK: Type: SHT_DYNSYM # CHECK: Flags [ (0x2) # CHECK: SHF_ALLOC # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .dynstr # CHECK: Type: SHT_STRTAB # CHECK: Flags [ (0x2) # CHECK: SHF_ALLOC # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .text # CHECK: Type: SHT_PROGBITS # CHECK: Flags [ (0x6) # CHECK: SHF_ALLOC # CHECK: SHF_EXECINSTR # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .eh_frame # CHECK: Type: SHT_PROGBITS # CHECK: Flags [ (0x2) # CHECK: SHF_ALLOC # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .tdata # CHECK: Type: SHT_PROGBITS # CHECK: Flags [ (0x403) # CHECK: SHF_ALLOC # CHECK: SHF_TLS # CHECK: SHF_WRITE # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .dynamic # CHECK: Type: SHT_DYNAMIC # CHECK: Flags [ (0x3) # CHECK: SHF_ALLOC # CHECK: SHF_WRITE # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .got.plt # CHECK: Type: SHT_PROGBITS # CHECK: Flags [ (0x3) # CHECK: SHF_ALLOC # CHECK: SHF_WRITE # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .data # CHECK: Type: SHT_PROGBITS # CHECK: Flags [ (0x3) # CHECK: SHF_ALLOC # CHECK: SHF_WRITE # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .bss # CHECK: Type: SHT_NOBITS # CHECK: Flags [ (0x3) # CHECK: SHF_ALLOC # CHECK: SHF_WRITE # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .shstrtab # CHECK: Type: SHT_STRTAB # CHECK: Flags [ (0x0) # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .symtab # CHECK: Type: SHT_SYMTAB # CHECK: Flags [ (0x0) # CHECK: ] # CHECK: } # CHECK: Section { # CHECK: Name: .strtab # CHECK: Type: SHT_STRTAB # CHECK: Flags [ (0x0) # CHECK: ] # CHECK: } # CHECK: ] # CHECK: Symbols [ # CHECK: Symbol { # CHECK: Name: .hash (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .hash # CHECK: } # CHECK: Symbol { # CHECK: Name: .dynsym (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .dynsym # CHECK: } # CHECK: Symbol { # CHECK: Name: .dynstr (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .dynstr # CHECK: } # CHECK: Symbol { # CHECK: Name: .text (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .text # CHECK: } # CHECK: Symbol { # CHECK: Name: .eh_frame (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .eh_frame # CHECK: } # CHECK: Symbol { # CHECK: Name: .tdata (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .tdata # CHECK: } # CHECK: Symbol { # CHECK: Name: .dynamic (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .dynamic # CHECK: } # CHECK: Symbol { # CHECK: Name: .got.plt (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .got.plt # CHECK: } # CHECK: Symbol { # CHECK: Name: .data (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .data # CHECK: } # CHECK: Symbol { # CHECK: Name: .bss (0) # CHECK: Binding: Local # CHECK: Type: Section # CHECK: Section: .bss # CHECK: } # CHECK: Symbol { # CHECK: Name: shared.ll # CHECK: Binding: Local # CHECK: Type: File # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: local_func # CHECK: Binding: Local # CHECK: Type: Function # CHECK: Section: .text # CHECK: } # CHECK: Symbol { # CHECK: Name: _GLOBAL_OFFSET_TABLE_ # CHECK: Binding: Local # CHECK: Type: Object # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: _DYNAMIC # CHECK: Binding: Local # CHECK: Type: Object # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: common_sym # CHECK: Binding: Global # CHECK: Type: Object # CHECK: Section: .bss # CHECK: } # CHECK: Symbol { # CHECK: Name: tls_sym # CHECK: Binding: Global # CHECK: Type: TLS # CHECK: Section: .tdata # CHECK: } # CHECK: Symbol { # CHECK: Name: defined_sym # CHECK: Binding: Global # CHECK: Type: Object # CHECK: Section: .data # CHECK: } # CHECK: Symbol { # CHECK: Name: __bss_start # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: _end # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: global_func # CHECK: Binding: Global # CHECK: Type: Function # CHECK: Section: .text # CHECK: } # CHECK: Symbol { # CHECK: Name: _edata # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: ] # CHECK: DynamicSymbols [ # CHECK: Symbol { # CHECK: Name: common_sym # CHECK: Binding: Global # CHECK: Type: Object # CHECK: Section: .bss # CHECK: } # CHECK: Symbol { # CHECK: Name: tls_sym # CHECK: Binding: Global # CHECK: Type: TLS # CHECK: Section: .tdata # CHECK: } # CHECK: Symbol { # CHECK: Name: defined_sym # CHECK: Binding: Global # CHECK: Type: Object # CHECK: Section: .data # CHECK: } # CHECK: Symbol { # CHECK: Name: __bss_start # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: _end # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: Symbol { # CHECK: Name: global_func # CHECK: Binding: Global # CHECK: Type: Function # CHECK: Section: .text # CHECK: } # CHECK: Symbol { # CHECK: Name: _edata # CHECK: Binding: Global # CHECK: Type: None # CHECK: Section: Absolute (0xFFF1) # CHECK: } # CHECK: ] # CHECK: NeededLibraries [ # CHECK-NEXT: libc.so.6 # CHECK-NEXT: libm.so.6 # CHECK-NEXT: ]