1## Test writing stub elf with minimal sections. 2 3# RUN: llvm-ifs --output-elf=%t.elf32l --arch=x86_64 --bitwidth=32 --endianness=little %s 4# 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 5 6# RUN: llvm-ifs --output-elf=%t.elf32b --arch=x86_64 --bitwidth=32 --endianness=big %s 7# 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 8 9# RUN: llvm-ifs --output-elf=%t.elf64l --arch=x86_64 --bitwidth=64 --endianness=little %s 10# 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 11 12# RUN: llvm-ifs --output-elf=%t.elf64l --target=x86_64-linux-gnu %s 13# 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 14 15# RUN: llvm-ifs --output-elf=%t.elf64b --arch=x86_64 --bitwidth=64 --endianness=big %s 16# 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 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=TRIPLEERR 19 20# RUN: not llvm-ifs --output-elf=%t --bitwidth=64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="Arch" --check-prefix=TARGETERR 21 22# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="BitWidth" --check-prefix=TARGETERR 23 24# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG="Endianness" --check-prefix=TARGETERR 25 26# RUN: llvm-ifs --output-ifs=%t.target --target=x86_64-linux-gnu %s 27# RUN: not llvm-ifs --output-elf=%t --target=aarch64-linux-gnu %t.target 2>&1 | FileCheck %s -DMSG="Triple" --check-prefix=CONFLICTERR 28 29# RUN: llvm-ifs --output-ifs=%t.target --arch=x86_64 --endianness=little --bitwidth=64 %s 30# RUN: not llvm-ifs --output-elf=%t --arch=AArch64 %t.target 2>&1 | FileCheck %s -DMSG=Arch --check-prefix=CONFLICTERR 31# RUN: not llvm-ifs --output-elf=%t --endianness=big %t.target 2>&1 | FileCheck %s -DMSG=Endianness --check-prefix=CONFLICTERR 32# RUN: not llvm-ifs --output-elf=%t --bitwidth=32 %t.target 2>&1 | FileCheck %s -DMSG=BitWidth --check-prefix=CONFLICTERR 33 34# RUN: llvm-ifs --output-ifs=%t.ifs --output-elf=%t.elf --target=x86_64-linux-gnu %s 35# RUN: llvm-ifs --output-elf=%t.elf2 --target=x86_64-linux-gnu %t.ifs 36# 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 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 38 39# RUN: llvm-ifs --output-elf=- --target=riscv64-linux-gnu %s | llvm-readelf -h - | FileCheck %s --check-prefix=MACHINE 40 41# RUN: not llvm-ifs --output-elf=- --arch=riscv64 --endianness=little --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG=riscv64 --check-prefix=ARCHERR 42 43--- !ifs-v1 44IfsVersion: 3.0 45NeededLibs: 46 - libc.so.6 47Symbols: 48 - { Name: bar, Type: Object, Size: 42 } 49 - { Name: baz, Type: TLS, Size: 3 } 50 - { Name: plus, Type: Func } 51... 52 53# CHECK: ElfHeader { 54# CHECK-NEXT: Ident { 55# CHECK-NEXT: Magic: (7F 45 4C 46) 56# CHECK-NEXT: Class: [[CLASS]] 57# CHECK-NEXT: DataEncoding: [[DE]] 58# CHECK-NEXT: FileVersion: 1 59# CHECK-NEXT: OS/ABI: SystemV (0x0) 60# CHECK-NEXT: ABIVersion: 0 61# CHECK-NEXT: Unused: (00 00 00 00 00 00 00) 62# CHECK-NEXT: } 63# CHECK-NEXT: Type: SharedObject (0x3) 64# CHECK-NEXT: Machine: EM_X86_64 (0x3E) 65# CHECK-NEXT: Version: 1 66# CHECK-NEXT: Entry: 0x0 67# CHECK: Flags [ (0x0) 68# CHECK-NEXT: ] 69# CHECK-NEXT: HeaderSize: [[HS]] 70# CHECK-NEXT: ProgramHeaderEntrySize: [[PHES]] 71# CHECK: SectionHeaderEntrySize: [[SHES]] 72# CHECK: SectionHeaderCount: 5 73# CHECK: StringTableSectionIndex: 4 74 75# CHECK: Section { 76# CHECK-NEXT: Index: 0 77# CHECK-NEXT: Name: (0) 78# CHECK-NEXT: Type: SHT_NULL 79# CHECK-NEXT: Flags [ 80# CHECK-NEXT: ] 81# CHECK-NEXT: Address: 0x0 82# CHECK-NEXT: Offset: 0x0 83# CHECK-NEXT: Size: 0 84# CHECK-NEXT: Link: 0 85# CHECK-NEXT: Info: 0 86# CHECK-NEXT: AddressAlignment: 0 87# CHECK-NEXT: EntrySize: 0 88# CHECK-NEXT: } 89# CHECK-NEXT: Section { 90# CHECK-NEXT: Index: 1 91# CHECK-NEXT: Name: .dynsym 92# CHECK-NEXT: Type: SHT_DYNSYM 93# CHECK-NEXT: Flags [ 94# CHECK-NEXT: SHF_ALLOC 95# CHECK-NEXT: ] 96# CHECK-NEXT: Address: 97# CHECK-NEXT: Offset: 98# CHECK-NEXT: Size: 99# CHECK-NEXT: Link: 2 100# CHECK-NEXT: Info: 1 101# CHECK-NEXT: AddressAlignment: [[DYNSYMAL]] 102# CHECK-NEXT: EntrySize: [[DYNSYMES]] 103# CHECK-NEXT: } 104# CHECK-NEXT: Section { 105# CHECK-NEXT: Index: 2 106# CHECK-NEXT: Name: .dynstr 107# CHECK-NEXT: Type: SHT_STRTAB 108# CHECK-NEXT: Flags [ 109# CHECK-NEXT: SHF_ALLOC 110# CHECK-NEXT: ] 111# CHECK-NEXT: Address: 112# CHECK-NEXT: Offset: 113# CHECK-NEXT: Size: 114# CHECK-NEXT: Link: 0 115# CHECK-NEXT: Info: 0 116# CHECK-NEXT: AddressAlignment: 1 117# CHECK-NEXT: EntrySize: 0 118# CHECK-NEXT: } 119# CHECK-NEXT: Section { 120# CHECK-NEXT: Index: 3 121# CHECK-NEXT: Name: .dynamic 122# CHECK-NEXT: Type: SHT_DYNAMIC 123# CHECK-NEXT: Flags [ 124# CHECK-NEXT: SHF_ALLOC 125# CHECK-NEXT: ] 126# CHECK-NEXT: Address: 127# CHECK-NEXT: Offset: 128# CHECK-NEXT: Size: 129# CHECK-NEXT: Link: 2 130# CHECK-NEXT: Info: 0 131# CHECK-NEXT: AddressAlignment: [[DYNAMICAL]] 132# CHECK-NEXT: EntrySize: [[DYNAMICES]] 133# CHECK-NEXT: } 134# CHECK-NEXT: Section { 135# CHECK-NEXT: Index: 4 136# CHECK-NEXT: Name: .shstrtab 137# CHECK-NEXT: Type: SHT_STRTAB 138# CHECK-NEXT: Flags [ 139# CHECK-NEXT: ] 140# CHECK-NEXT: Address: 141# CHECK-NEXT: Offset: 142# CHECK-NEXT: Size: 143# CHECK-NEXT: Link: 0 144# CHECK-NEXT: Info: 0 145# CHECK-NEXT: AddressAlignment: 1 146# CHECK-NEXT: EntrySize: 0 147# CHECK-NEXT: } 148 149# CHECK: DynamicSection [ (5 entries) 150# CHECK-NEXT: Tag Type Name/Value 151# CHECK-NEXT: 0x[[DYNTABZ]]0000006 SYMTAB 152# CHECK-NEXT: 0x[[DYNTABZ]]0000005 STRTAB 153# CHECK-NEXT: 0x[[DYNTABZ]]000000A STRSZ 154# CHECK-NEXT: 0x[[DYNTABZ]]0000001 NEEDED Shared library: [libc.so.6] 155# CHECK-NEXT: 0x[[DYNTABZ]]0000000 NULL 156# CHECK-NEXT: ] 157 158# CHECK: Symbol { 159# CHECK-NEXT: Name: 160# CHECK-NEXT: Value: 161# CHECK-NEXT: Size: 162# CHECK-NEXT: Binding: Local 163# CHECK-NEXT: Type: None 164# CHECK-NEXT: Other: 0 165# CHECK-NEXT: Section: Undefined 166# CHECK-NEXT: } 167# CHECK-NEXT: Symbol { 168# CHECK-NEXT: Name: bar 169# CHECK-NEXT: Value: 170# CHECK-NEXT: Size: 42 171# CHECK-NEXT: Binding: Global 172# CHECK-NEXT: Type: Object 173# CHECK-NEXT: Other: 0 174# CHECK-NEXT: Section: .dynsym 175# CHECK-NEXT: } 176# CHECK-NEXT: Symbol { 177# CHECK-NEXT: Name: baz 178# CHECK-NEXT: Value: 179# CHECK-NEXT: Size: 3 180# CHECK-NEXT: Binding: Global 181# CHECK-NEXT: Type: TLS 182# CHECK-NEXT: Other: 0 183# CHECK-NEXT: Section: .dynsym 184# CHECK-NEXT: } 185# CHECK-NEXT: Symbol { 186# CHECK-NEXT: Name: plus 187# CHECK-NEXT: Value: 188# CHECK-NEXT: Size: 189# CHECK-NEXT: Binding: Global 190# CHECK-NEXT: Type: Function 191# CHECK-NEXT: Other: 0 192# CHECK-NEXT: Section: .dynsym 193# CHECK-NEXT: } 194 195# CHECK: String dump of section '.dynstr': 196# CHECK-NEXT: [ 1] baz 197# CHECK-NEXT: [ 5] plus 198# CHECK-NEXT: [ a] bar 199# CHECK-NEXT: [ e] libc.so.6 200 201# CHECK: String dump of section '.shstrtab': 202# CHECK-NEXT: [ 1] .dynstr 203# CHECK-NEXT: [ 9] .dynsym 204# CHECK-NEXT: [ 11] .dynamic 205# CHECK-NEXT: [ 1a] .shstrtab 206 207# TRIPLEERR: error: Target triple cannot be used simultaneously with ELF target format 208# TARGETERR: error: [[MSG]] is not defined in the text stub 209# CONFLICTERR: error: Supplied [[MSG]] conflicts with the text stub 210 211# MACHINE: Machine: RISC-V 212 213# ARCHERR: error: unknown arch '[[MSG]]' 214