57 lines · plain
1## Show that llvm-objcopy can replace the symbol table with a new one.2 3# RUN: yaml2obj %s -o %t4 5# RUN: llvm-objcopy -R .symtab --add-symbol newsym=1234 %t %t26# RUN: llvm-readelf -S -s %t2 | FileCheck %s --match-full-lines7 8# CHECK: There are 5 section headers, starting at offset {{.+}}:9# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al10# CHECK-NEXT: [ 0] NULL 0000000000000000 {{.+}} 000000 00 0 0 011# CHECK-NEXT: [ 1] .text PROGBITS 0000000000001000 {{.+}} 000040 00 AX 0 0 1612# CHECK-NEXT: [ 2] .strtab STRTAB 0000000000000000 {{.+}} 000001 00 0 0 113# CHECK-NEXT: [ 3] .shstrtab STRTAB 0000000000000000 {{.+}} 000028 00 0 0 114# CHECK-NEXT: [ 4] .symtab SYMTAB 0000000000000000 {{.+}} 000030 18 3 1 815 16# CHECK: Symbol table '.symtab' contains 2 entries:17# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name18# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND19# CHECK-NEXT: 1: 00000000000004d2 0 NOTYPE GLOBAL DEFAULT ABS newsym20 21## --set-section-flags works for newly created .symtab, which GNU objcopy does not do.22# RUN: llvm-objcopy -R .symtab --add-symbol newsym=1234 --set-section-flags .symtab=readonly,exclude %t %t323# RUN: llvm-readelf -S %t3 | FileCheck %s --check-prefix=CHECK224 25# CHECK2: [ 4] .symtab SYMTAB 0000000000000000 {{.+}} 000030 18 E 3 1 826 27--- !ELF28FileHeader:29 Class: ELFCLASS6430 Data: ELFDATA2LSB31 Type: ET_DYN32 Machine: EM_X86_6433Sections:34 - Name: .text35 Type: SHT_PROGBITS36 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]37 Address: 0x100038 AddressAlign: 0x000000000000001039 Size: 6440Symbols:41 - Name: foo42 Type: STT_FUNC43 Section: .text44 Value: 0x100045 Size: 846 - Name: bar47 Type: STT_FUNC48 Section: .text49 Value: 0x100850 Size: 851 - Name: baz52 Type: STT_FUNC53 Section: .text54 Value: 0x101055 Size: 856 57