194 lines · plain
1## ELF section symbols use the corresponding section names when printing2## unnamed symbols. This test verifies this and also that appropriate things3## are printed if the section is somehow invalid.4 5# RUN: yaml2obj %s -o %t16# RUN: llvm-readobj %t1 --symbols --relocations 2>&1 | \7# RUN: FileCheck %s -DFILE=%t1 --check-prefix=LLVM1 --implicit-check-not="warning:"8# RUN: llvm-readelf %t1 --symbols --relocations 2>&1 | \9# RUN: FileCheck %s -DFILE=%t1 --check-prefix=GNU1 --implicit-check-not="warning:"10# RUN: llvm-readelf %t1 --symbols -X 2>&1 | \11# RUN: FileCheck %s -DFILE=%t1 --check-prefix=GNUX1 --implicit-check-not="warning:"12 13# LLVM1: Relocations [14# LLVM1-NEXT: Section (5) .rela.foo {15# LLVM1-NEXT: 0x1 R_X86_64_NONE .foo 0x016# LLVM1-NEXT: 0x2 R_X86_64_NONE symbol1 0x017# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 6718# LLVM1-NEXT: 0x3 R_X86_64_NONE <section 67> 0x019# LLVM1-NEXT: 0x4 R_X86_64_NONE symbol2 0x020# LLVM1-NEXT: 0x5 R_X86_64_NONE .bar 0x021# LLVM1-NEXT: 0x6 R_X86_64_NONE symbol3 0x022# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 6623# LLVM1-NEXT: 0x7 R_X86_64_NONE <section 66> 0x024# LLVM1-NEXT: 0x8 R_X86_64_NONE symbol4 0x025# LLVM1-NEXT: }26# LLVM1-NEXT: ]27 28# LLVM1: Name: (0)29# LLVM1: Name: .foo (0)30# LLVM1: Name: symbol1 (25)31# LLVM1: Name: <section 67> (0)32# LLVM1: Name: symbol2 (17)33# LLVM1: Name: .bar (0)34# LLVM1: Name: symbol3 (9)35# LLVM1: Name: <section 66> (0)36# LLVM1: Name: symbol4 (1)37# LLVM1: warning: '[[FILE]]': a section [index 3] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table38# LLVM1: Name: <section 3> (0)39 40# GNU1: Relocation section '.rela.foo' at offset {{.*}} contains 8 entries:41# GNU1-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend42# GNU1-NEXT: 00000001 00000100 R_X86_64_NONE 00000000 .foo + 043# GNU1-NEXT: 00000002 00000200 R_X86_64_NONE 00000000 symbol1 + 044# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 6745# GNU1-NEXT: 00000003 00000300 R_X86_64_NONE 00000000 <section 67> + 046# GNU1-NEXT: 00000004 00000400 R_X86_64_NONE 00000000 symbol2 + 047# GNU1-NEXT: 00000005 00000500 R_X86_64_NONE 00000000 .bar + 048# GNU1-NEXT: 00000006 00000600 R_X86_64_NONE 00000000 symbol3 + 049# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 6650# GNU1-NEXT: 00000007 00000700 R_X86_64_NONE 00000000 <section 66> + 051# GNU1-NEXT: 00000008 00000800 R_X86_64_NONE 00000000 symbol4 + 052 53# GNU1: Symbol table '.symtab' contains 10 entries:54# GNU1-NEXT: Num: {{.*}} Type {{.*}} Ndx Name55# GNU1-NEXT: 0: {{.*}} NOTYPE {{.*}} UND {{$}}56# GNU1-NEXT: 1: {{.*}} SECTION {{.*}} 1 .foo57# GNU1-NEXT: 2: {{.*}} SECTION {{.*}} 1 symbol158# GNU1-NEXT: 3: {{.*}} SECTION {{.*}} 67 <section 67>59# GNU1-NEXT: 4: {{.*}} SECTION {{.*}} 67 symbol260# GNU1-NEXT: 5: {{.*}} SECTION {{.*}} 2 .bar61# GNU1-NEXT: 6: {{.*}} SECTION {{.*}} 2 symbol362# GNU1-NEXT: 7: {{.*}} SECTION {{.*}} 66 <section 66>63# GNU1-NEXT: 8: {{.*}} SECTION {{.*}} 66 symbol464# GNU1-NEXT: warning: '[[FILE]]': a section [index 3] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table65# GNU1-NEXT: 9: {{.*}} SECTION {{.*}} 3 <section 3>66 67# GNUX1: Symbol table '.symtab' contains 10 entries:68# GNUX1-NEXT: Num: {{.*}} Type {{.*}} Ndx(SecName) Name69# GNUX1-NEXT: 0: {{.*}} NOTYPE {{.*}} UND {{$}}70# GNUX1-NEXT: 1: {{.*}} SECTION {{.*}} 1 (.foo) .foo71# GNUX1-NEXT: 2: {{.*}} SECTION {{.*}} 1 (.foo) symbol172# GNUX1-NEXT: warning: '[[FILE]]': invalid section index: 6773# GNUX1-NEXT: 3: {{.*}} SECTION {{.*}} 67 <section 67>74# GNUX1-NEXT: 4: {{.*}} SECTION {{.*}} 67 symbol275# GNUX1-NEXT: 5: {{.*}} SECTION {{.*}} 2 (.bar) .bar76# GNUX1-NEXT: 6: {{.*}} SECTION {{.*}} 2 (.bar) symbol377# GNUX1-NEXT: warning: '[[FILE]]': invalid section index: 6678# GNUX1-NEXT: 7: {{.*}} SECTION {{.*}} 66 <section 66>79# GNUX1-NEXT: 8: {{.*}} SECTION {{.*}} 66 symbol480# GNUX1-NEXT: warning: '[[FILE]]': a section [index 3] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table81# GNUX1-NEXT: 9: {{.*}} SECTION {{.*}} 3 <section 3>82 83--- !ELF84FileHeader:85 Class: ELFCLASS3286 Data: ELFDATA2LSB87 Type: ET_REL88 Machine: EM_X86_6489Sections:90 - Name: .foo91 Type: SHT_PROGBITS92 - Name: .bar93 Type: SHT_PROGBITS94 - Name: .invalid95 Type: SHT_PROGBITS96 ShName: 0xffff97 - Name: .symtab_shndx98 Type: SHT_SYMTAB_SHNDX99 Link: .symtab100 Entries: [ 0, 0, 0, 0, 0, 2, 2, 0x42, 0x42, 0 ]101 - Name: .rela.foo102 Type: SHT_RELA103 Link: .symtab104 Info: .foo105 Relocations:106 - Offset: 0x1107 Symbol: 1108 Type: R_X86_64_NONE109 - Offset: 0x2110 Symbol: 2111 Type: R_X86_64_NONE112 - Offset: 0x3113 Symbol: 3114 Type: R_X86_64_NONE115 - Offset: 0x4116 Symbol: 4117 Type: R_X86_64_NONE118 - Offset: 0x5119 Symbol: 5120 Type: R_X86_64_NONE121 - Offset: 0x6122 Symbol: 6123 Type: R_X86_64_NONE124 - Offset: 0x7125 Symbol: 7126 Type: R_X86_64_NONE127 - Offset: 0x8128 Symbol: 8129 Type: R_X86_64_NONE130Symbols:131## Case 1: a valid unnamed section symbol.132 - Name: ""133 Section: .foo134 Type: STT_SECTION135## Case 2: a valid named section symbol.136 - Name: "symbol1"137 Section: .foo138 Type: STT_SECTION139## Case 3: an unnamed section symbol with invalid index.140 - Name: ""141 Index: 0x43142 Type: STT_SECTION143## Case 4: a named section symbol with invalid index.144 - Name: "symbol2"145 Index: 0x43146 Type: STT_SECTION147## Case 5: a valid unnamed section symbol via SHT_SYMTAB_SHNDX.148 - Name: ""149 Index: SHN_XINDEX150 Type: STT_SECTION151## Case 6: a valid named section symbol via SHT_SYMTAB_SHNDX.152 - Name: "symbol3"153 Index: SHN_XINDEX154 Type: STT_SECTION155## Case 7: a unnamed section symbol via SHT_SYMTAB_SHNDX with invalid index.156 - Name: ""157 Index: SHN_XINDEX158 Type: STT_SECTION159## Case 8: a named section symbol via SHT_SYMTAB_SHNDX with invalid index.160 - Name: "symbol4"161 Index: SHN_XINDEX162 Type: STT_SECTION163## Case 9: a unnamed section symbol with invalid name.164 - Name: ""165 Index: 3166 Type: STT_SECTION167 168# RUN: yaml2obj %s --docnum=2 -o %t2169# RUN: llvm-readobj %t2 --symbols 2> %t.llvm.err2 | FileCheck %s --check-prefix=LLVM2170# RUN: FileCheck %s --input-file %t.llvm.err2 --check-prefix=WARN2 --implicit-check-not=warning171# RUN: llvm-readelf %t2 --symbols 2> %t.gnu.err2 | FileCheck %s --check-prefix=GNU2172# RUN: FileCheck %s --input-file %t.gnu.err2 --check-prefix=WARN2 --implicit-check-not=warning173 174# LLVM2: Name: (0)175# LLVM2: Name: <?> (0)176 177# GNU2: Symbol table '.symtab' contains 2 entries:178# GNU2-NEXT: Num: {{.*}} Type {{.*}} Ndx Name179# GNU2-NEXT: 0: {{.*}} NOTYPE {{.*}} UND {{$}}180# GNU2-NEXT: 1: {{.*}} SECTION {{.*}} RSV[0xffff] <?>181 182# WARN2: warning: '{{.*}}.tmp2': found an extended symbol index (1), but unable to locate the extended symbol index table183 184--- !ELF185FileHeader:186 Class: ELFCLASS32187 Data: ELFDATA2LSB188 Type: ET_REL189Symbols:190 # Section symbol via SHT_SYMTAB_SHNDX when SHT_SYMTAB_SHNDX is missing.191 - Name: ""192 Index: SHN_XINDEX193 Type: STT_SECTION194