303 lines · plain
1// REQUIRES: x862// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o3// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o4// RUN: ld.lld --hash-style=sysv -shared %t2.o -soname=t2.so -o %t2.so5// RUN: llvm-readobj -S %t2.so | FileCheck --check-prefix=SO %s6// RUN: ld.lld --hash-style=sysv -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t7// RUN: llvm-readobj -S -l --dynamic-table --symbols --dyn-syms --section-data --hash-table %t | FileCheck %s8// RUN: ld.lld --hash-style=sysv %t.o %t2.so %t2.so -o %t29// RUN: llvm-readobj --dyn-syms %t2 | FileCheck --check-prefix=DONT_EXPORT %s10 11// Make sure .symtab is properly aligned.12// SO: Name: .symtab13// SO-NEXT: Type: SHT_SYMTAB14// SO-NEXT: Flags [15// SO-NEXT: ]16// SO-NEXT: Address:17// SO-NEXT: Offset: 0x1D018// SO-NEXT: Size:19// SO-NEXT: Link:20// SO-NEXT: Info:21// SO-NEXT: AddressAlignment: 422 23// CHECK: Name: .interp24// CHECK-NEXT: Type: SHT_PROGBITS25// CHECK-NEXT: Flags [26// CHECK-NEXT: SHF_ALLOC27// CHECK-NEXT: ]28// CHECK-NEXT: Address: [[INTERPADDR:.*]]29// CHECK-NEXT: Offset: [[INTERPOFFSET:.*]]30// CHECK-NEXT: Size: [[INTERPSIZE:.*]]31// CHECK-NEXT: Link: 032// CHECK-NEXT: Info: 033// CHECK-NEXT: AddressAlignment: 134// CHECK-NEXT: EntrySize: 035// CHECK-NEXT: SectionData (36// CHECK-NEXT: 0000: 2F6C6962 36342F6C 642D6C69 6E75782D |/lib64/ld-linux-|37// CHECK-NEXT: 0010: 7838362D 36342E73 6F2E3200 |x86-64.so.2.|38// CHECK-NEXT: )39// CHECK-NEXT: }40 41// test that .hash is linked to .dynsym42// CHECK: Index: 243// CHECK-NEXT: Name: .dynsym44// CHECK-NEXT: Type: SHT_DYNSYM45// CHECK-NEXT: Flags [46// CHECK-NEXT: SHF_ALLOC47// CHECK-NEXT: ]48// CHECK-NEXT: Address: [[DYNSYMADDR:.*]]49// CHECK-NEXT: Offset: 0x17050// CHECK-NEXT: Size:51// CHECK-NEXT: Link: [[DYNSTR:.*]]52// CHECK-NEXT: Info: 153// CHECK-NEXT: AddressAlignment: 454// CHECK-NEXT: EntrySize: 1655// CHECK-NEXT: SectionData (56// CHECK-NEXT: 0000:57// CHECK-NEXT: 0010:58// CHECK-NEXT: 0020:59// CHECK-NEXT: 0030:60// CHECK-NEXT: )61// CHECK-NEXT: }62// CHECK-NEXT: Section {63// CHECK-NEXT: Index: 364// CHECK-NEXT: Name: .hash65// CHECK-NEXT: Type: SHT_HASH66// CHECK-NEXT: Flags [67// CHECK-NEXT: SHF_ALLOC68// CHECK-NEXT: ]69// CHECK-NEXT: Address: [[HASHADDR:.*]]70// CHECK-NEXT: Offset:71// CHECK-NEXT: Size:72// CHECK-NEXT: Link: 273// CHECK-NEXT: Info: 074// CHECK-NEXT: AddressAlignment: 475// CHECK-NEXT: EntrySize: 476// CHECK: Section {77// CHECK-NEXT: Index: [[DYNSTR]]78// CHECK-NEXT: Name: .dynstr79// CHECK-NEXT: Type: SHT_STRTAB80// CHECK-NEXT: Flags [81// CHECK-NEXT: SHF_ALLOC82// CHECK-NEXT: ]83// CHECK-NEXT: Address: [[DYNSTRADDR:.*]]84// CHECK-NEXT: Offset:85// CHECK-NEXT: Size:86// CHECK-NEXT: Link: 087// CHECK-NEXT: Info: 088// CHECK-NEXT: AddressAlignment: 189// CHECK-NEXT: EntrySize: 090 91// CHECK: Name: .rel.dyn92// CHECK-NEXT: Type: SHT_REL93// CHECK-NEXT: Flags [94// CHECK-NEXT: SHF_ALLOC95// CHECK-NEXT: ]96// CHECK-NEXT: Address: [[RELADDR:.*]]97// CHECK-NEXT: Offset:98// CHECK-NEXT: Size: [[RELSIZE:.*]]99// CHECK-NEXT: Link:100// CHECK-NEXT: Info:101// CHECK-NEXT: AddressAlignment:102// CHECK-NEXT: EntrySize: [[RELENT:.*]]103 104// CHECK: Name: .dynamic105// CHECK-NEXT: Type: SHT_DYNAMIC106// CHECK-NEXT: Flags [107// CHECK-NEXT: SHF_ALLOC108// CHECK-NEXT: SHF_WRITE109// CHECK-NEXT: ]110// CHECK-NEXT: Address: [[ADDR:.*]]111// CHECK-NEXT: Offset: [[OFFSET:.*]]112// CHECK-NEXT: Size: [[SIZE:.*]]113// CHECK-NEXT: Link: [[DYNSTR]]114// CHECK-NEXT: Info: 0115// CHECK-NEXT: AddressAlignment: [[ALIGN:.*]]116// CHECK-NEXT: EntrySize: 8117// CHECK-NEXT: SectionData (118// CHECK: )119 120// CHECK: Name: .symtab121// CHECK-NEXT: Type: SHT_SYMTAB122// CHECK-NEXT: Flags [123// CHECK-NEXT: ]124// CHECK-NEXT: Address:125// CHECK-NEXT: Offset:126// CHECK-NEXT: Size:127// CHECK-NEXT: Link:128// CHECK-NEXT: Info:129// CHECK-NEXT: AddressAlignment:130// CHECK-NEXT: EntrySize: [[SYMENT:.*]]131 132// CHECK: ProgramHeaders [133// CHECK: Type: PT_INTERP134// CHECK-NEXT: Offset: [[INTERPOFFSET]]135// CHECK-NEXT: VirtualAddress: [[INTERPADDR]]136// CHECK-NEXT: PhysicalAddress: [[INTERPADDR]]137// CHECK-NEXT: FileSize: [[INTERPSIZE]]138// CHECK-NEXT: MemSize: [[INTERPSIZE]]139// CHECK-NEXT: Flags [140// CHECK-NEXT: PF_R141// CHECK-NEXT: ]142// CHECK-NEXT: Alignment: 1143// CHECK-NEXT: }144// CHECK: Type: PT_DYNAMIC145// CHECK-NEXT: Offset: [[OFFSET]]146// CHECK-NEXT: VirtualAddress: [[ADDR]]147// CHECK-NEXT: PhysicalAddress: [[ADDR]]148// CHECK-NEXT: FileSize: [[SIZE]]149// CHECK-NEXT: MemSize: [[SIZE]]150// CHECK-NEXT: Flags [151// CHECK-NEXT: PF_R152// CHECK-NEXT: PF_W153// CHECK-NEXT: ]154// CHECK-NEXT: Alignment: [[ALIGN]]155// CHECK-NEXT: }156 157// CHECK: DynamicSection [158// CHECK-NEXT: Tag Type Name/Value159// CHECK-NEXT: 0x0000001D RUNPATH Library runpath: [foo:bar]160// CHECK-NEXT: 0x00000001 NEEDED Shared library: [{{.*}}2.so]161// CHECK-NEXT: 0x00000015 DEBUG 0x0162// CHECK-NEXT: 0x00000011 REL [[RELADDR]]163// CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)164// CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)165// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]166// CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)167// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]168// CHECK-NEXT: 0x0000000A STRSZ169// CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]170// CHECK-NEXT: 0x00000000 NULL 0x0171// CHECK-NEXT: ]172 173// CHECK: Symbols [174// CHECK-NEXT: Symbol {175// CHECK-NEXT: Name:176// CHECK-NEXT: Value: 0x0177// CHECK-NEXT: Size: 0178// CHECK-NEXT: Binding: Local179// CHECK-NEXT: Type: None180// CHECK-NEXT: Other: 0181// CHECK-NEXT: Section: Undefined182// CHECK-NEXT: }183// CHECK-NEXT: Symbol {184// CHECK-NEXT: Name: _DYNAMIC185// CHECK-NEXT: Value: 0x402210186// CHECK-NEXT: Size: 0187// CHECK-NEXT: Binding: Local188// CHECK-NEXT: Type: None189// CHECK-NEXT: Other [ (0x2)190// CHECK-NEXT: STV_HIDDEN191// CHECK-NEXT: ]192// CHECK-NEXT: Section: .dynamic193// CHECK-NEXT: }194// CHECK-NEXT: Symbol {195// CHECK-NEXT: Name: _start196// CHECK-NEXT: Value: 0x401208197// CHECK-NEXT: Size: 0198// CHECK-NEXT: Binding: Global199// CHECK-NEXT: Type: None200// CHECK-NEXT: Other: 0201// CHECK-NEXT: Section: .text202// CHECK-NEXT: }203// CHECK-NEXT: Symbol {204// CHECK-NEXT: Name: bar205// CHECK-NEXT: Value: 0x0206// CHECK-NEXT: Size: 0207// CHECK-NEXT: Binding: Global208// CHECK-NEXT: Type: Function209// CHECK-NEXT: Other: 0210// CHECK-NEXT: Section: Undefined211// CHECK-NEXT: }212// CHECK-NEXT: Symbol {213// CHECK-NEXT: Name: zed214// CHECK-NEXT: Value: 0x0215// CHECK-NEXT: Size: 0216// CHECK-NEXT: Binding: Global (0x1)217// CHECK-NEXT: Type: None (0x0)218// CHECK-NEXT: Other: 0219// CHECK-NEXT: Section: Undefined (0x0)220// CHECK-NEXT: }221// CHECK-NEXT: ]222 223// CHECK: DynamicSymbols [224// CHECK-NEXT: Symbol {225// CHECK-NEXT: Name:226// CHECK-NEXT: Value: 0x0227// CHECK-NEXT: Size: 0228// CHECK-NEXT: Binding: Local229// CHECK-NEXT: Type: None230// CHECK-NEXT: Other: 0231// CHECK-NEXT: Section: Undefined232// CHECK-NEXT: }233// CHECK-NEXT: Symbol {234// CHECK-NEXT: Name: _start235// CHECK-NEXT: Value: 0x401208236// CHECK-NEXT: Size: 0237// CHECK-NEXT: Binding: Global238// CHECK-NEXT: Type: Non239// CHECK-NEXT: Other: 0240// CHECK-NEXT: Section: .text241// CHECK-NEXT: }242// CHECK-NEXT: Symbol {243// CHECK-NEXT: Name: bar244// CHECK-NEXT: Value: 0x0245// CHECK-NEXT: Size: 0246// CHECK-NEXT: Binding: Global247// CHECK-NEXT: Type: Function248// CHECK-NEXT: Other: 0249// CHECK-NEXT: Section: Undefined250// CHECK-NEXT: }251// CHECK-NEXT: Symbol {252// CHECK-NEXT: Name: zed253// CHECK-NEXT: Value: 0x0254// CHECK-NEXT: Size: 0255// CHECK-NEXT: Binding: Global256// CHECK-NEXT: Type: None257// CHECK-NEXT: Other: 0258// CHECK-NEXT: Section: Undefined259// CHECK-NEXT: }260// CHECK-NEXT: ]261 262// DONT_EXPORT: DynamicSymbols [263// DONT_EXPORT-NEXT: Symbol {264// DONT_EXPORT-NEXT: Name:265// DONT_EXPORT-NEXT: Value: 0x0266// DONT_EXPORT-NEXT: Size: 0267// DONT_EXPORT-NEXT: Binding: Local (0x0)268// DONT_EXPORT-NEXT: Type: None (0x0)269// DONT_EXPORT-NEXT: Other: 0270// DONT_EXPORT-NEXT: Section: Undefined (0x0)271// DONT_EXPORT-NEXT: }272// DONT_EXPORT-NEXT: Symbol {273// DONT_EXPORT-NEXT: Name: bar274// DONT_EXPORT-NEXT: Value: 0x0275// DONT_EXPORT-NEXT: Size: 0276// DONT_EXPORT-NEXT: Binding: Global277// DONT_EXPORT-NEXT: Type: Function278// DONT_EXPORT-NEXT: Other: 0279// DONT_EXPORT-NEXT: Section: Undefined280// DONT_EXPORT-NEXT: }281// DONT_EXPORT-NEXT: Symbol {282// DONT_EXPORT-NEXT: Name: zed283// DONT_EXPORT-NEXT: Value: 0x0284// DONT_EXPORT-NEXT: Size: 0285// DONT_EXPORT-NEXT: Binding: Global286// DONT_EXPORT-NEXT: Type: None287// DONT_EXPORT-NEXT: Other: 0288// DONT_EXPORT-NEXT: Section: Undefined289// DONT_EXPORT-NEXT: }290// DONT_EXPORT-NEXT: ]291 292// CHECK: HashTable {293// CHECK-NEXT: Num Buckets: 4294// CHECK-NEXT: Num Chains: 4295// CHECK-NEXT: Buckets: [3, 0, 2, 0]296// CHECK-NEXT: Chains: [0, 0, 0, 1]297// CHECK-NEXT: }298 299.global _start300_start:301.long bar@GOT302.long zed@GOT303