206 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
## Test writing stub elf with minimal sections.
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf32l --arch=x86_64 --bitwidth=32 --endianness=little %s
 | 
						|
# 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
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf32b --arch=x86_64 --bitwidth=32 --endianness=big %s
 | 
						|
# 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
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf64l --arch=x86_64 --bitwidth=64 --endianness=little %s
 | 
						|
# 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
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf64l --target=x86_64-linux-gnu %s
 | 
						|
# 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
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf64b --arch=x86_64 --bitwidth=64 --endianness=big %s
 | 
						|
# 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
 | 
						|
 | 
						|
# 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
 | 
						|
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --bitwidth=64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="Arch" --check-prefix=TARGETERR
 | 
						|
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --endianness=big %s 2>&1 | FileCheck %s -DMSG="BitWidth" --check-prefix=TARGETERR
 | 
						|
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --arch=x86_64 --bitwidth=64 %s 2>&1 | FileCheck %s -DMSG="Endianness" --check-prefix=TARGETERR
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-ifs=%t.target --target=x86_64-linux-gnu %s
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --target=aarch64-linux-gnu %t.target 2>&1 | FileCheck %s -DMSG="Triple" --check-prefix=CONFLICTERR
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-ifs=%t.target --arch=x86_64 --endianness=little --bitwidth=64 %s
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --arch=AArch64 %t.target 2>&1 | FileCheck %s -DMSG=Arch --check-prefix=CONFLICTERR
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --endianness=big %t.target 2>&1 | FileCheck %s -DMSG=Endianness --check-prefix=CONFLICTERR
 | 
						|
# RUN: not llvm-ifs --output-elf=%t --bitwidth=32 %t.target 2>&1 | FileCheck %s -DMSG=BitWidth --check-prefix=CONFLICTERR
 | 
						|
 | 
						|
# RUN: llvm-ifs --output-ifs=%t.ifs --output-elf=%t.elf --target=x86_64-linux-gnu %s
 | 
						|
# RUN: llvm-ifs --output-elf=%t.elf2 --target=x86_64-linux-gnu %t.ifs
 | 
						|
# 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
 | 
						|
# 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
 | 
						|
 | 
						|
--- !ifs-v1
 | 
						|
IfsVersion: 3.0
 | 
						|
NeededLibs:
 | 
						|
  - libc.so.6
 | 
						|
Symbols:
 | 
						|
  - { Name: bar, Type: Object, Size: 42 }
 | 
						|
  - { Name: baz, Type: TLS, Size: 3 }
 | 
						|
  - { Name: plus, Type: Func }
 | 
						|
...
 | 
						|
 | 
						|
# CHECK:      ElfHeader {
 | 
						|
# CHECK-NEXT:   Ident {
 | 
						|
# CHECK-NEXT:     Magic: (7F 45 4C 46)
 | 
						|
# CHECK-NEXT:     Class: [[CLASS]]
 | 
						|
# CHECK-NEXT:     DataEncoding: [[DE]]
 | 
						|
# CHECK-NEXT:     FileVersion: 1
 | 
						|
# CHECK-NEXT:     OS/ABI: SystemV (0x0)
 | 
						|
# CHECK-NEXT:     ABIVersion: 0
 | 
						|
# CHECK-NEXT:     Unused: (00 00 00 00 00 00 00)
 | 
						|
# CHECK-NEXT:   }
 | 
						|
# CHECK-NEXT:   Type: SharedObject (0x3)
 | 
						|
# CHECK-NEXT:   Machine: EM_X86_64 (0x3E)
 | 
						|
# CHECK-NEXT:   Version: 1
 | 
						|
# CHECK-NEXT:   Entry: 0x0
 | 
						|
# CHECK:        Flags [ (0x0)
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   HeaderSize: [[HS]]
 | 
						|
# CHECK-NEXT:   ProgramHeaderEntrySize: [[PHES]]
 | 
						|
# CHECK:        SectionHeaderEntrySize: [[SHES]]
 | 
						|
# CHECK:        SectionHeaderCount: 5
 | 
						|
# CHECK:        StringTableSectionIndex: 4
 | 
						|
 | 
						|
# CHECK:      Section {
 | 
						|
# CHECK-NEXT:   Index: 0
 | 
						|
# CHECK-NEXT:   Name:  (0)
 | 
						|
# CHECK-NEXT:   Type: SHT_NULL
 | 
						|
# CHECK-NEXT:   Flags [
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   Address: 0x0
 | 
						|
# CHECK-NEXT:   Offset: 0x0
 | 
						|
# CHECK-NEXT:   Size: 0
 | 
						|
# CHECK-NEXT:   Link: 0
 | 
						|
# CHECK-NEXT:   Info: 0
 | 
						|
# CHECK-NEXT:   AddressAlignment: 0
 | 
						|
# CHECK-NEXT:   EntrySize: 0
 | 
						|
# CHECK-NEXT: }
 | 
						|
# CHECK-NEXT: Section {
 | 
						|
# CHECK-NEXT:   Index: 1
 | 
						|
# CHECK-NEXT:   Name: .dynsym
 | 
						|
# CHECK-NEXT:   Type: SHT_DYNSYM
 | 
						|
# CHECK-NEXT:   Flags [
 | 
						|
# CHECK-NEXT:     SHF_ALLOC
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   Address:
 | 
						|
# CHECK-NEXT:   Offset:
 | 
						|
# CHECK-NEXT:   Size:
 | 
						|
# CHECK-NEXT:   Link: 2
 | 
						|
# CHECK-NEXT:   Info: 1
 | 
						|
# CHECK-NEXT:   AddressAlignment: [[DYNSYMAL]]
 | 
						|
# CHECK-NEXT:   EntrySize: [[DYNSYMES]]
 | 
						|
# CHECK-NEXT: }
 | 
						|
# CHECK-NEXT: Section {
 | 
						|
# CHECK-NEXT:   Index: 2
 | 
						|
# CHECK-NEXT:   Name: .dynstr
 | 
						|
# CHECK-NEXT:   Type: SHT_STRTAB
 | 
						|
# CHECK-NEXT:   Flags [
 | 
						|
# CHECK-NEXT:     SHF_ALLOC
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   Address:
 | 
						|
# CHECK-NEXT:   Offset:
 | 
						|
# CHECK-NEXT:   Size:
 | 
						|
# CHECK-NEXT:   Link: 0
 | 
						|
# CHECK-NEXT:   Info: 0
 | 
						|
# CHECK-NEXT:   AddressAlignment: 1
 | 
						|
# CHECK-NEXT:   EntrySize: 0
 | 
						|
# CHECK-NEXT: }
 | 
						|
# CHECK-NEXT: Section {
 | 
						|
# CHECK-NEXT:   Index: 3
 | 
						|
# CHECK-NEXT:   Name: .dynamic
 | 
						|
# CHECK-NEXT:   Type: SHT_DYNAMIC
 | 
						|
# CHECK-NEXT:   Flags [
 | 
						|
# CHECK-NEXT:     SHF_ALLOC
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   Address:
 | 
						|
# CHECK-NEXT:   Offset:
 | 
						|
# CHECK-NEXT:   Size:
 | 
						|
# CHECK-NEXT:   Link: 2
 | 
						|
# CHECK-NEXT:   Info: 0
 | 
						|
# CHECK-NEXT:   AddressAlignment: [[DYNAMICAL]]
 | 
						|
# CHECK-NEXT:   EntrySize: [[DYNAMICES]]
 | 
						|
# CHECK-NEXT: }
 | 
						|
# CHECK-NEXT: Section {
 | 
						|
# CHECK-NEXT:   Index: 4
 | 
						|
# CHECK-NEXT:   Name: .shstrtab
 | 
						|
# CHECK-NEXT:   Type: SHT_STRTAB
 | 
						|
# CHECK-NEXT:   Flags [
 | 
						|
# CHECK-NEXT:   ]
 | 
						|
# CHECK-NEXT:   Address:
 | 
						|
# CHECK-NEXT:   Offset:
 | 
						|
# CHECK-NEXT:   Size:
 | 
						|
# CHECK-NEXT:   Link: 0
 | 
						|
# CHECK-NEXT:   Info: 0
 | 
						|
# CHECK-NEXT:   AddressAlignment: 1
 | 
						|
# CHECK-NEXT:   EntrySize: 0
 | 
						|
# CHECK-NEXT: }
 | 
						|
 | 
						|
# CHECK:      DynamicSection [ (5 entries)
 | 
						|
# CHECK-NEXT:   Tag                Type   Name/Value
 | 
						|
# CHECK-NEXT:   0x[[DYNTABZ]]0000006 SYMTAB
 | 
						|
# CHECK-NEXT:   0x[[DYNTABZ]]0000005 STRTAB
 | 
						|
# CHECK-NEXT:   0x[[DYNTABZ]]000000A STRSZ
 | 
						|
# CHECK-NEXT:   0x[[DYNTABZ]]0000001 NEEDED Shared library: [libc.so.6]
 | 
						|
# CHECK-NEXT:   0x[[DYNTABZ]]0000000 NULL
 | 
						|
# CHECK-NEXT: ]
 | 
						|
 | 
						|
# CHECK:        Symbol {
 | 
						|
# CHECK-NEXT:     Name:
 | 
						|
# CHECK-NEXT:     Value:
 | 
						|
# CHECK-NEXT:     Size:
 | 
						|
# CHECK-NEXT:     Binding: Local
 | 
						|
# CHECK-NEXT:     Type: None
 | 
						|
# CHECK-NEXT:     Other: 0
 | 
						|
# CHECK-NEXT:     Section: Undefined
 | 
						|
# CHECK-NEXT:   }
 | 
						|
# CHECK-NEXT:   Symbol {
 | 
						|
# CHECK-NEXT:     Name: bar
 | 
						|
# CHECK-NEXT:     Value:
 | 
						|
# CHECK-NEXT:     Size: 42
 | 
						|
# CHECK-NEXT:     Binding: Global
 | 
						|
# CHECK-NEXT:     Type: Object
 | 
						|
# CHECK-NEXT:     Other: 0
 | 
						|
# CHECK-NEXT:     Section: .dynsym
 | 
						|
# CHECK-NEXT:   }
 | 
						|
# CHECK-NEXT:   Symbol {
 | 
						|
# CHECK-NEXT:     Name: baz
 | 
						|
# CHECK-NEXT:     Value:
 | 
						|
# CHECK-NEXT:     Size: 3
 | 
						|
# CHECK-NEXT:     Binding: Global
 | 
						|
# CHECK-NEXT:     Type: TLS
 | 
						|
# CHECK-NEXT:     Other: 0
 | 
						|
# CHECK-NEXT:     Section: .dynsym
 | 
						|
# CHECK-NEXT:   }
 | 
						|
# CHECK-NEXT:   Symbol {
 | 
						|
# CHECK-NEXT:     Name: plus
 | 
						|
# CHECK-NEXT:     Value:
 | 
						|
# CHECK-NEXT:     Size:
 | 
						|
# CHECK-NEXT:     Binding: Global
 | 
						|
# CHECK-NEXT:     Type: Function
 | 
						|
# CHECK-NEXT:     Other: 0
 | 
						|
# CHECK-NEXT:     Section: .dynsym
 | 
						|
# CHECK-NEXT: }
 | 
						|
 | 
						|
# CHECK:      String dump of section '.dynstr':
 | 
						|
# CHECK-NEXT: [     1] baz
 | 
						|
# CHECK-NEXT: [     5] plus
 | 
						|
# CHECK-NEXT: [     a] bar
 | 
						|
# CHECK-NEXT: [     e] libc.so.6
 | 
						|
 | 
						|
# CHECK:      String dump of section '.shstrtab':
 | 
						|
# CHECK-NEXT: [     1] .dynstr
 | 
						|
# CHECK-NEXT: [     9] .dynsym
 | 
						|
# CHECK-NEXT: [    11] .dynamic
 | 
						|
# CHECK-NEXT: [    1a] .shstrtab
 | 
						|
 | 
						|
# TRIPLEERR: error: Target triple cannot be used simultaneously with ELF target format
 | 
						|
# TARGETERR: error: [[MSG]] is not defined in the text stub
 | 
						|
# CONFLICTERR: error: Supplied [[MSG]] conflicts with the text stub
 |