xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/add-symbol.test (revision a7a447be0fa934505f0c423fb97b91a68c1cc715)
151c1f640SEugene Leviant# RUN: yaml2obj %s -o %t
251c1f640SEugene Leviant# RUN: llvm-objcopy --add-symbol='abs1=1' \
351c1f640SEugene Leviant# RUN:              --add-symbol='abs2=2,LoCaL,HiDdEn,FuNcTiOn' \
451c1f640SEugene Leviant# RUN:              --add-symbol='abs3=3,global,default,object' \
5e5cdfbc6SChris Jackson# RUN:              --add-symbol='abs4=4,global,protected,object' \
651c1f640SEugene Leviant# RUN:              --add-symbol='foo.cpp=0,file' \
751c1f640SEugene Leviant# RUN:              --add-symbol='=.text:0,section' \
851c1f640SEugene Leviant# RUN:              --add-symbol='data=.data:0x100,weak' \
951c1f640SEugene Leviant# RUN:              --add-symbol='ifunc=.text:0,indirect-function' \
1051c1f640SEugene Leviant# RUN:              %t %t2
1151c1f640SEugene Leviant# RUN: llvm-readelf -s %t2 | FileCheck %s
1251c1f640SEugene Leviant
1351c1f640SEugene Leviant# Checked ignored options
1451c1f640SEugene Leviant# RUN: llvm-objcopy \
1551c1f640SEugene Leviant# RUN:   --add-symbol='dummy1=0,indirect,constructor,debug,synthetic' \
1651c1f640SEugene Leviant# RUN:   --add-symbol='dummy2=0,before=foo,unique-object,warning' %t %t3
1751c1f640SEugene Leviant# RUN: llvm-readelf -s %t3 | FileCheck %s --check-prefix=IGNORED
1851c1f640SEugene Leviant
1951c1f640SEugene Leviant# Check errors
2051c1f640SEugene Leviant# RUN: not llvm-objcopy --add-symbol='test' %t %t4 2>&1 | FileCheck %s --check-prefix=ERR1
2151c1f640SEugene Leviant# RUN: not llvm-objcopy --add-symbol='test=:0' %t %t5 2>&1 | FileCheck %s --check-prefix=ERR2
2251c1f640SEugene Leviant# RUN: not llvm-objcopy --add-symbol='test=foo:' %t %t6 2>&1 | FileCheck %s --check-prefix=ERR2
2351c1f640SEugene Leviant# RUN: not llvm-objcopy --add-symbol='test=0,cool' %t %t7 2>&1 | FileCheck %s --check-prefix=ERR3
2442bc1e24SJordan Rupprecht# RUN: not llvm-objcopy --add-symbol='test=0,foo,bar' %t %t8 2>&1 | FileCheck %s --check-prefix=ERR4
2542bc1e24SJordan Rupprecht# RUN: not llvm-objcopy --add-symbol='test=xyz' %t %t9 2>&1 | FileCheck %s --check-prefix=ERR5
2651c1f640SEugene Leviant
2751c1f640SEugene Leviant!ELF
2851c1f640SEugene LeviantFileHeader:
2951c1f640SEugene Leviant  Class:           ELFCLASS32
3051c1f640SEugene Leviant  Data:            ELFDATA2LSB
3151c1f640SEugene Leviant  Type:            ET_EXEC
3251c1f640SEugene Leviant  Machine:         EM_ARM
3351c1f640SEugene LeviantSections:
3451c1f640SEugene Leviant  - Name:            .text
3551c1f640SEugene Leviant    Type:            SHT_PROGBITS
3651c1f640SEugene Leviant    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
3751c1f640SEugene Leviant    Address:         0x1000
3851c1f640SEugene Leviant    AddressAlign:    0x0000000000001000
3951c1f640SEugene Leviant    Size:            64
4051c1f640SEugene Leviant  - Name:            .data
4151c1f640SEugene Leviant    Type:            SHT_PROGBITS
4251c1f640SEugene Leviant    Flags:           [ SHF_ALLOC ]
4351c1f640SEugene Leviant    Address:         0x2000
4451c1f640SEugene Leviant    AddressAlign:    0x0000000000001000
4551c1f640SEugene Leviant    Size:            64
4651c1f640SEugene LeviantProgramHeaders:
4751c1f640SEugene Leviant  - Type:     PT_LOAD
4851c1f640SEugene Leviant    Flags:    [ PF_X, PF_R ]
4951c1f640SEugene Leviant    VAddr:    0x1000
5051c1f640SEugene Leviant    Align:    0x1000
51*a7a447beSGeorgii Rymar    FirstSec: .text
52*a7a447beSGeorgii Rymar    LastSec:  .text
5351c1f640SEugene Leviant  - Type:     PT_LOAD
5451c1f640SEugene Leviant    Flags:    [ PF_R, PF_W ]
5551c1f640SEugene Leviant    VAddr:    0x2000
5651c1f640SEugene Leviant    Align:    0x1000
57*a7a447beSGeorgii Rymar    FirstSec: .data
58*a7a447beSGeorgii Rymar    LastSec:  .data
592779987dSGeorge Rimar## TODO (grimar): llvm-objcopy seems produce a broken output without
602779987dSGeorge Rimar## the following line, i.e. when there is no symbol table in the input.
612779987dSGeorge RimarSymbols: []
6251c1f640SEugene Leviant
6351c1f640SEugene Leviant# CHECK:      0: 00000000 0 NOTYPE LOCAL DEFAULT UND
6451c1f640SEugene Leviant# CHECK-NEXT: 1: 00000001 0 NOTYPE GLOBAL DEFAULT ABS abs1
6551c1f640SEugene Leviant# CHECK-NEXT: 2: 00000002 0 FUNC LOCAL HIDDEN ABS abs2
6651c1f640SEugene Leviant# CHECK-NEXT: 3: 00000003 0 OBJECT GLOBAL DEFAULT ABS abs3
67e5cdfbc6SChris Jackson# CHECK-NEXT: 4: 00000004 0 OBJECT GLOBAL PROTECTED ABS abs4
68e5cdfbc6SChris Jackson# CHECK-NEXT: 5: 00000000 0 FILE GLOBAL DEFAULT ABS foo.cpp
69e5cdfbc6SChris Jackson# CHECK-NEXT: 6: 00001000 0 SECTION GLOBAL DEFAULT 1
70e5cdfbc6SChris Jackson# CHECK-NEXT: 7: 00002100 0 NOTYPE WEAK DEFAULT 2 data
71e5cdfbc6SChris Jackson# CHECK-NEXT: 8: 00001000 0 IFUNC GLOBAL DEFAULT 1 ifunc
7251c1f640SEugene Leviant
7351c1f640SEugene Leviant# IGNORED:       1: 00000000 0 NOTYPE GLOBAL DEFAULT ABS dummy1
7451c1f640SEugene Leviant# IGNORED-NEXT:  2: 00000000 0 NOTYPE GLOBAL DEFAULT ABS dummy2
7551c1f640SEugene Leviant
7651c1f640SEugene Leviant# ERR1: error: bad format for --add-symbol, missing '=' after 'test'
7751c1f640SEugene Leviant# ERR2: error: bad format for --add-symbol, missing section name or symbol value
7842bc1e24SJordan Rupprecht# ERR3: error: unsupported flag for --add-symbol: 'cool'
7942bc1e24SJordan Rupprecht# ERR4: error: unsupported flags for --add-symbol: 'foo', 'bar'
8042bc1e24SJordan Rupprecht# ERR5: error: bad symbol value: 'xyz'
8151c1f640SEugene Leviant
82