82 lines
3.3 KiB
Plaintext
82 lines
3.3 KiB
Plaintext
|
# RUN: yaml2obj %s -o %t
|
||
|
# RUN: llvm-objcopy --add-symbol='abs1=1' \
|
||
|
# RUN: --add-symbol='abs2=2,LoCaL,HiDdEn,FuNcTiOn' \
|
||
|
# RUN: --add-symbol='abs3=3,global,default,object' \
|
||
|
# RUN: --add-symbol='abs4=4,global,protected,object' \
|
||
|
# RUN: --add-symbol='foo.cpp=0,file' \
|
||
|
# RUN: --add-symbol='=.text:0,section' \
|
||
|
# RUN: --add-symbol='data=.data:0x100,weak' \
|
||
|
# RUN: --add-symbol='ifunc=.text:0,indirect-function' \
|
||
|
# RUN: %t %t2
|
||
|
# RUN: llvm-readelf -s %t2 | FileCheck %s
|
||
|
|
||
|
# Checked ignored options
|
||
|
# RUN: llvm-objcopy \
|
||
|
# RUN: --add-symbol='dummy1=0,indirect,constructor,debug,synthetic' \
|
||
|
# RUN: --add-symbol='dummy2=0,before=foo,unique-object,warning' %t %t3
|
||
|
# RUN: llvm-readelf -s %t3 | FileCheck %s --check-prefix=IGNORED
|
||
|
|
||
|
# Check errors
|
||
|
# RUN: not llvm-objcopy --add-symbol='test' %t %t4 2>&1 | FileCheck %s --check-prefix=ERR1
|
||
|
# RUN: not llvm-objcopy --add-symbol='test=:0' %t %t5 2>&1 | FileCheck %s --check-prefix=ERR2
|
||
|
# RUN: not llvm-objcopy --add-symbol='test=foo:' %t %t6 2>&1 | FileCheck %s --check-prefix=ERR2
|
||
|
# RUN: not llvm-objcopy --add-symbol='test=0,cool' %t %t7 2>&1 | FileCheck %s --check-prefix=ERR3
|
||
|
# RUN: not llvm-objcopy --add-symbol='test=0,foo,bar' %t %t8 2>&1 | FileCheck %s --check-prefix=ERR4
|
||
|
# RUN: not llvm-objcopy --add-symbol='test=xyz' %t %t9 2>&1 | FileCheck %s --check-prefix=ERR5
|
||
|
|
||
|
!ELF
|
||
|
FileHeader:
|
||
|
Class: ELFCLASS32
|
||
|
Data: ELFDATA2LSB
|
||
|
Type: ET_EXEC
|
||
|
Machine: EM_ARM
|
||
|
Sections:
|
||
|
- Name: .text
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
|
||
|
Address: 0x1000
|
||
|
AddressAlign: 0x0000000000001000
|
||
|
Size: 64
|
||
|
- Name: .data
|
||
|
Type: SHT_PROGBITS
|
||
|
Flags: [ SHF_ALLOC ]
|
||
|
Address: 0x2000
|
||
|
AddressAlign: 0x0000000000001000
|
||
|
Size: 64
|
||
|
ProgramHeaders:
|
||
|
- Type: PT_LOAD
|
||
|
Flags: [ PF_X, PF_R ]
|
||
|
VAddr: 0x1000
|
||
|
Align: 0x1000
|
||
|
FirstSec: .text
|
||
|
LastSec: .text
|
||
|
- Type: PT_LOAD
|
||
|
Flags: [ PF_R, PF_W ]
|
||
|
VAddr: 0x2000
|
||
|
Align: 0x1000
|
||
|
FirstSec: .data
|
||
|
LastSec: .data
|
||
|
## TODO (grimar): llvm-objcopy seems produce a broken output without
|
||
|
## the following line, i.e. when there is no symbol table in the input.
|
||
|
Symbols: []
|
||
|
|
||
|
# CHECK: 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
|
||
|
# CHECK-NEXT: 1: 00000001 0 NOTYPE GLOBAL DEFAULT ABS abs1
|
||
|
# CHECK-NEXT: 2: 00000002 0 FUNC LOCAL HIDDEN ABS abs2
|
||
|
# CHECK-NEXT: 3: 00000003 0 OBJECT GLOBAL DEFAULT ABS abs3
|
||
|
# CHECK-NEXT: 4: 00000004 0 OBJECT GLOBAL PROTECTED ABS abs4
|
||
|
# CHECK-NEXT: 5: 00000000 0 FILE GLOBAL DEFAULT ABS foo.cpp
|
||
|
# CHECK-NEXT: 6: 00001000 0 SECTION GLOBAL DEFAULT 1
|
||
|
# CHECK-NEXT: 7: 00002100 0 NOTYPE WEAK DEFAULT 2 data
|
||
|
# CHECK-NEXT: 8: 00001000 0 IFUNC GLOBAL DEFAULT 1 ifunc
|
||
|
|
||
|
# IGNORED: 1: 00000000 0 NOTYPE GLOBAL DEFAULT ABS dummy1
|
||
|
# IGNORED-NEXT: 2: 00000000 0 NOTYPE GLOBAL DEFAULT ABS dummy2
|
||
|
|
||
|
# ERR1: error: bad format for --add-symbol, missing '=' after 'test'
|
||
|
# ERR2: error: bad format for --add-symbol, missing section name or symbol value
|
||
|
# ERR3: error: unsupported flag for --add-symbol: 'cool'
|
||
|
# ERR4: error: unsupported flags for --add-symbol: 'foo', 'bar'
|
||
|
# ERR5: error: bad symbol value: 'xyz'
|
||
|
|