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