217 lines · plain
1## Test writing stub elf with minimal sections.2 3# RUN: llvm-ifs --output-elf=%t.elf32l --arch=x86_64 --bitwidth=32 --endianness=little %s4# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf32l | FileCheck %s -DCLASS="32-bit (0x1)" -DDE="LittleEndian (0x1)" -DHS=52 -DPHES=32 -DSHES=40 -DDYNSYMAL=4 -DDYNSYMES=16 -DDYNAMICAL=4 -DDYNAMICES=8 -DDYNTABZ=0 -DMACHINE="EM_X86_64 (0x3E)"5 6# RUN: llvm-ifs --output-elf=%t.elf32b --arch=x86_64 --bitwidth=32 --endianness=big %s7# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf32b | FileCheck %s -DCLASS="32-bit (0x1)" -DDE="BigEndian (0x2)" -DHS=52 -DPHES=32 -DSHES=40 -DDYNSYMAL=4 -DDYNSYMES=16 -DDYNAMICAL=4 -DDYNAMICES=8 -DDYNTABZ=0 -DMACHINE="EM_X86_64 (0x3E)"8 9# RUN: llvm-ifs --output-elf=%t.elf64l --arch=x86_64 --bitwidth=64 --endianness=little %s10# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64l | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000 -DMACHINE="EM_X86_64 (0x3E)"11 12# RUN: llvm-ifs --output-elf=%t.elf64l --target=x86_64-linux-gnu %s13# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64l | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000 -DMACHINE="EM_X86_64 (0x3E)"14 15# RUN: llvm-ifs --output-elf=%t.elf64b --arch=x86_64 --bitwidth=64 --endianness=big %s16# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf64b | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="BigEndian (0x2)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000 -DMACHINE="EM_X86_64 (0x3E)"17 18# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 --endianness=big --target=x86_64-linux-gnu %s 2>&1 | FileCheck %s --check-prefix=TRIPLEERR19 20# RUN: not llvm-ifs --output-elf=%t --bitwidth=64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="Arch" --check-prefix=TARGETERR21 22# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="BitWidth" --check-prefix=TARGETERR23 24# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG="Endianness" --check-prefix=TARGETERR25 26# RUN: llvm-ifs --output-ifs=%t.target --target=x86_64-linux-gnu %s27# RUN: not llvm-ifs --output-elf=%t --target=aarch64-linux-gnu %t.target 2>&1 | FileCheck %s -DMSG="Triple" --check-prefix=CONFLICTERR28 29# RUN: llvm-ifs --output-ifs=%t.target --arch=x86_64 --endianness=little --bitwidth=64 %s30# RUN: not llvm-ifs --output-elf=%t --arch=AArch64 %t.target 2>&1 | FileCheck %s -DMSG=Arch --check-prefix=CONFLICTERR31# RUN: not llvm-ifs --output-elf=%t --endianness=big %t.target 2>&1 | FileCheck %s -DMSG=Endianness --check-prefix=CONFLICTERR32# RUN: not llvm-ifs --output-elf=%t --bitwidth=32 %t.target 2>&1 | FileCheck %s -DMSG=BitWidth --check-prefix=CONFLICTERR33 34# RUN: llvm-ifs --output-ifs=%t.ifs --output-elf=%t.elf --target=x86_64-linux-gnu %s35# RUN: llvm-ifs --output-elf=%t.elf2 --target=x86_64-linux-gnu %t.ifs36# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000 -DMACHINE="EM_X86_64 (0x3E)"37# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.elf2 | FileCheck %s -DCLASS="64-bit (0x2)" -DDE="LittleEndian (0x1)" -DHS=64 -DPHES=56 -DSHES=64 -DDYNSYMAL=8 -DDYNSYMES=24 -DDYNAMICAL=8 -DDYNAMICES=16 -DDYNTABZ=000000000 -DMACHINE="EM_X86_64 (0x3E)"38 39# RUN: llvm-ifs --output-elf=- --target=riscv64-linux-gnu %s | llvm-readelf -h - | FileCheck %s --check-prefix=MACHINE40 41# RUN: not llvm-ifs --output-elf=- --arch=riscv64 --endianness=little --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG=riscv64 --check-prefix=ARCHERR42 43# RUN: llvm-ifs --output-elf=%t.armel --target=armv7-linux-gnueabihf %s44# RUN: llvm-readobj -h -S --string-dump .dynstr --string-dump .shstrtab --dyn-symbols --dynamic-table %t.armel | FileCheck %s -DCLASS="32-bit (0x1)" -DDE="LittleEndian (0x1)" -DHS=52 -DPHES=32 -DSHES=40 -DDYNSYMAL=4 -DDYNSYMES=16 -DDYNAMICAL=4 -DDYNAMICES=8 -DDYNTABZ=0 -DMACHINE="EM_ARM (0x28)"45 46--- !ifs-v147IfsVersion: 3.048NeededLibs:49 - libc.so.650Symbols:51 - { Name: bar, Type: Object, Size: 42 }52 - { Name: baz, Type: TLS, Size: 3 }53 - { Name: plus, Type: Func }54...55 56# CHECK: ElfHeader {57# CHECK-NEXT: Ident {58# CHECK-NEXT: Magic: (7F 45 4C 46)59# CHECK-NEXT: Class: [[CLASS]]60# CHECK-NEXT: DataEncoding: [[DE]]61# CHECK-NEXT: FileVersion: 162# CHECK-NEXT: OS/ABI: SystemV (0x0)63# CHECK-NEXT: ABIVersion: 064# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)65# CHECK-NEXT: }66# CHECK-NEXT: Type: SharedObject (0x3)67# CHECK-NEXT: Machine: [[MACHINE]]68# CHECK-NEXT: Version: 169# CHECK-NEXT: Entry: 0x070# CHECK: Flags [ (0x0)71# CHECK-NEXT: ]72# CHECK-NEXT: HeaderSize: [[HS]]73# CHECK-NEXT: ProgramHeaderEntrySize: [[PHES]]74# CHECK: SectionHeaderEntrySize: [[SHES]]75# CHECK: SectionHeaderCount: 576# CHECK: StringTableSectionIndex: 477 78# CHECK: Section {79# CHECK-NEXT: Index: 080# CHECK-NEXT: Name: (0)81# CHECK-NEXT: Type: SHT_NULL82# CHECK-NEXT: Flags [83# CHECK-NEXT: ]84# CHECK-NEXT: Address: 0x085# CHECK-NEXT: Offset: 0x086# CHECK-NEXT: Size: 087# CHECK-NEXT: Link: 088# CHECK-NEXT: Info: 089# CHECK-NEXT: AddressAlignment: 090# CHECK-NEXT: EntrySize: 091# CHECK-NEXT: }92# CHECK-NEXT: Section {93# CHECK-NEXT: Index: 194# CHECK-NEXT: Name: .dynsym95# CHECK-NEXT: Type: SHT_DYNSYM96# CHECK-NEXT: Flags [97# CHECK-NEXT: SHF_ALLOC98# CHECK-NEXT: ]99# CHECK-NEXT: Address:100# CHECK-NEXT: Offset:101# CHECK-NEXT: Size:102# CHECK-NEXT: Link: 2103# CHECK-NEXT: Info: 1104# CHECK-NEXT: AddressAlignment: [[DYNSYMAL]]105# CHECK-NEXT: EntrySize: [[DYNSYMES]]106# CHECK-NEXT: }107# CHECK-NEXT: Section {108# CHECK-NEXT: Index: 2109# CHECK-NEXT: Name: .dynstr110# CHECK-NEXT: Type: SHT_STRTAB111# CHECK-NEXT: Flags [112# CHECK-NEXT: SHF_ALLOC113# CHECK-NEXT: ]114# CHECK-NEXT: Address:115# CHECK-NEXT: Offset:116# CHECK-NEXT: Size:117# CHECK-NEXT: Link: 0118# CHECK-NEXT: Info: 0119# CHECK-NEXT: AddressAlignment: 1120# CHECK-NEXT: EntrySize: 0121# CHECK-NEXT: }122# CHECK-NEXT: Section {123# CHECK-NEXT: Index: 3124# CHECK-NEXT: Name: .dynamic125# CHECK-NEXT: Type: SHT_DYNAMIC126# CHECK-NEXT: Flags [127# CHECK-NEXT: SHF_ALLOC128# CHECK-NEXT: ]129# CHECK-NEXT: Address:130# CHECK-NEXT: Offset:131# CHECK-NEXT: Size:132# CHECK-NEXT: Link: 2133# CHECK-NEXT: Info: 0134# CHECK-NEXT: AddressAlignment: [[DYNAMICAL]]135# CHECK-NEXT: EntrySize: [[DYNAMICES]]136# CHECK-NEXT: }137# CHECK-NEXT: Section {138# CHECK-NEXT: Index: 4139# CHECK-NEXT: Name: .shstrtab140# CHECK-NEXT: Type: SHT_STRTAB141# CHECK-NEXT: Flags [142# CHECK-NEXT: ]143# CHECK-NEXT: Address:144# CHECK-NEXT: Offset:145# CHECK-NEXT: Size:146# CHECK-NEXT: Link: 0147# CHECK-NEXT: Info: 0148# CHECK-NEXT: AddressAlignment: 1149# CHECK-NEXT: EntrySize: 0150# CHECK-NEXT: }151 152# CHECK: DynamicSection [ (5 entries)153# CHECK-NEXT: Tag Type Name/Value154# CHECK-NEXT: 0x[[DYNTABZ]]0000006 SYMTAB155# CHECK-NEXT: 0x[[DYNTABZ]]0000005 STRTAB156# CHECK-NEXT: 0x[[DYNTABZ]]000000A STRSZ157# CHECK-NEXT: 0x[[DYNTABZ]]0000001 NEEDED Shared library: [libc.so.6]158# CHECK-NEXT: 0x[[DYNTABZ]]0000000 NULL159# CHECK-NEXT: ]160 161# CHECK: Symbol {162# CHECK-NEXT: Name:163# CHECK-NEXT: Value:164# CHECK-NEXT: Size:165# CHECK-NEXT: Binding: Local166# CHECK-NEXT: Type: None167# CHECK-NEXT: Other: 0168# CHECK-NEXT: Section: Undefined169# CHECK-NEXT: }170# CHECK-NEXT: Symbol {171# CHECK-NEXT: Name: bar172# CHECK-NEXT: Value:173# CHECK-NEXT: Size: 42174# CHECK-NEXT: Binding: Global175# CHECK-NEXT: Type: Object176# CHECK-NEXT: Other: 0177# CHECK-NEXT: Section: .dynsym178# CHECK-NEXT: }179# CHECK-NEXT: Symbol {180# CHECK-NEXT: Name: baz181# CHECK-NEXT: Value:182# CHECK-NEXT: Size: 3183# CHECK-NEXT: Binding: Global184# CHECK-NEXT: Type: TLS185# CHECK-NEXT: Other: 0186# CHECK-NEXT: Section: .dynsym187# CHECK-NEXT: }188# CHECK-NEXT: Symbol {189# CHECK-NEXT: Name: plus190# CHECK-NEXT: Value:191# CHECK-NEXT: Size:192# CHECK-NEXT: Binding: Global193# CHECK-NEXT: Type: Function194# CHECK-NEXT: Other: 0195# CHECK-NEXT: Section: .dynsym196# CHECK-NEXT: }197 198# CHECK: String dump of section '.dynstr':199# CHECK-NEXT: [ 1] baz200# CHECK-NEXT: [ 5] plus201# CHECK-NEXT: [ a] bar202# CHECK-NEXT: [ e] libc.so.6203 204# CHECK: String dump of section '.shstrtab':205# CHECK-NEXT: [ 1] .dynstr206# CHECK-NEXT: [ 9] .dynsym207# CHECK-NEXT: [ 11] .dynamic208# CHECK-NEXT: [ 1a] .shstrtab209 210# TRIPLEERR: error: Target triple cannot be used simultaneously with ELF target format211# TARGETERR: error: [[MSG]] is not defined in the text stub212# CONFLICTERR: error: Supplied [[MSG]] conflicts with the text stub213 214# MACHINE: Machine: RISC-V215 216# ARCHERR: error: unknown arch '[[MSG]]'217