1## ELF section symbols use the corresponding section names when printing 2## unnamed symbols. This test verifies this and also that appropriate things 3## are printed if the section is somehow invalid. 4 5# RUN: yaml2obj %s -o %t1 6# 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 0x0 16# LLVM1-NEXT: 0x2 R_X86_64_NONE symbol1 0x0 17# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 67 18# LLVM1-NEXT: 0x3 R_X86_64_NONE <section 67> 0x0 19# LLVM1-NEXT: 0x4 R_X86_64_NONE symbol2 0x0 20# LLVM1-NEXT: 0x5 R_X86_64_NONE .bar 0x0 21# LLVM1-NEXT: 0x6 R_X86_64_NONE symbol3 0x0 22# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 66 23# LLVM1-NEXT: 0x7 R_X86_64_NONE <section 66> 0x0 24# LLVM1-NEXT: 0x8 R_X86_64_NONE symbol4 0x0 25# 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 table 38# 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 + Addend 42# GNU1-NEXT: 00000001 00000100 R_X86_64_NONE 00000000 .foo + 0 43# GNU1-NEXT: 00000002 00000200 R_X86_64_NONE 00000000 symbol1 + 0 44# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 67 45# GNU1-NEXT: 00000003 00000300 R_X86_64_NONE 00000000 <section 67> + 0 46# GNU1-NEXT: 00000004 00000400 R_X86_64_NONE 00000000 symbol2 + 0 47# GNU1-NEXT: 00000005 00000500 R_X86_64_NONE 00000000 .bar + 0 48# GNU1-NEXT: 00000006 00000600 R_X86_64_NONE 00000000 symbol3 + 0 49# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 66 50# GNU1-NEXT: 00000007 00000700 R_X86_64_NONE 00000000 <section 66> + 0 51# GNU1-NEXT: 00000008 00000800 R_X86_64_NONE 00000000 symbol4 + 0 52 53# GNU1: Symbol table '.symtab' contains 10 entries: 54# GNU1-NEXT: Num: {{.*}} Type {{.*}} Ndx Name 55# GNU1-NEXT: 0: {{.*}} NOTYPE {{.*}} UND {{$}} 56# GNU1-NEXT: 1: {{.*}} SECTION {{.*}} 1 .foo 57# GNU1-NEXT: 2: {{.*}} SECTION {{.*}} 1 symbol1 58# GNU1-NEXT: 3: {{.*}} SECTION {{.*}} 67 <section 67> 59# GNU1-NEXT: 4: {{.*}} SECTION {{.*}} 67 symbol2 60# GNU1-NEXT: 5: {{.*}} SECTION {{.*}} 2 .bar 61# GNU1-NEXT: 6: {{.*}} SECTION {{.*}} 2 symbol3 62# GNU1-NEXT: 7: {{.*}} SECTION {{.*}} 66 <section 66> 63# GNU1-NEXT: 8: {{.*}} SECTION {{.*}} 66 symbol4 64# 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 table 65# GNU1-NEXT: 9: {{.*}} SECTION {{.*}} 3 <section 3> 66 67# GNUX1: Symbol table '.symtab' contains 10 entries: 68# GNUX1-NEXT: Num: {{.*}} Type {{.*}} Ndx(SecName) Name 69# GNUX1-NEXT: 0: {{.*}} NOTYPE {{.*}} UND {{$}} 70# GNUX1-NEXT: 1: {{.*}} SECTION {{.*}} 1 (.foo) .foo 71# GNUX1-NEXT: 2: {{.*}} SECTION {{.*}} 1 (.foo) symbol1 72# GNUX1-NEXT: warning: '[[FILE]]': invalid section index: 67 73# GNUX1-NEXT: 3: {{.*}} SECTION {{.*}} 67 <section 67> 74# GNUX1-NEXT: 4: {{.*}} SECTION {{.*}} 67 symbol2 75# GNUX1-NEXT: 5: {{.*}} SECTION {{.*}} 2 (.bar) .bar 76# GNUX1-NEXT: 6: {{.*}} SECTION {{.*}} 2 (.bar) symbol3 77# GNUX1-NEXT: warning: '[[FILE]]': invalid section index: 66 78# GNUX1-NEXT: 7: {{.*}} SECTION {{.*}} 66 <section 66> 79# GNUX1-NEXT: 8: {{.*}} SECTION {{.*}} 66 symbol4 80# 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 table 81# GNUX1-NEXT: 9: {{.*}} SECTION {{.*}} 3 <section 3> 82 83--- !ELF 84FileHeader: 85 Class: ELFCLASS32 86 Data: ELFDATA2LSB 87 Type: ET_REL 88 Machine: EM_X86_64 89Sections: 90 - Name: .foo 91 Type: SHT_PROGBITS 92 - Name: .bar 93 Type: SHT_PROGBITS 94 - Name: .invalid 95 Type: SHT_PROGBITS 96 ShName: 0xffff 97 - Name: .symtab_shndx 98 Type: SHT_SYMTAB_SHNDX 99 Link: .symtab 100 Entries: [ 0, 0, 0, 0, 0, 2, 2, 0x42, 0x42, 0 ] 101 - Name: .rela.foo 102 Type: SHT_RELA 103 Link: .symtab 104 Info: .foo 105 Relocations: 106 - Offset: 0x1 107 Symbol: 1 108 Type: R_X86_64_NONE 109 - Offset: 0x2 110 Symbol: 2 111 Type: R_X86_64_NONE 112 - Offset: 0x3 113 Symbol: 3 114 Type: R_X86_64_NONE 115 - Offset: 0x4 116 Symbol: 4 117 Type: R_X86_64_NONE 118 - Offset: 0x5 119 Symbol: 5 120 Type: R_X86_64_NONE 121 - Offset: 0x6 122 Symbol: 6 123 Type: R_X86_64_NONE 124 - Offset: 0x7 125 Symbol: 7 126 Type: R_X86_64_NONE 127 - Offset: 0x8 128 Symbol: 8 129 Type: R_X86_64_NONE 130Symbols: 131## Case 1: a valid unnamed section symbol. 132 - Name: "" 133 Section: .foo 134 Type: STT_SECTION 135## Case 2: a valid named section symbol. 136 - Name: "symbol1" 137 Section: .foo 138 Type: STT_SECTION 139## Case 3: an unnamed section symbol with invalid index. 140 - Name: "" 141 Index: 0x43 142 Type: STT_SECTION 143## Case 4: a named section symbol with invalid index. 144 - Name: "symbol2" 145 Index: 0x43 146 Type: STT_SECTION 147## Case 5: a valid unnamed section symbol via SHT_SYMTAB_SHNDX. 148 - Name: "" 149 Index: SHN_XINDEX 150 Type: STT_SECTION 151## Case 6: a valid named section symbol via SHT_SYMTAB_SHNDX. 152 - Name: "symbol3" 153 Index: SHN_XINDEX 154 Type: STT_SECTION 155## Case 7: a unnamed section symbol via SHT_SYMTAB_SHNDX with invalid index. 156 - Name: "" 157 Index: SHN_XINDEX 158 Type: STT_SECTION 159## Case 8: a named section symbol via SHT_SYMTAB_SHNDX with invalid index. 160 - Name: "symbol4" 161 Index: SHN_XINDEX 162 Type: STT_SECTION 163## Case 9: a unnamed section symbol with invalid name. 164 - Name: "" 165 Index: 3 166 Type: STT_SECTION 167 168# RUN: yaml2obj %s --docnum=2 -o %t2 169# RUN: llvm-readobj %t2 --symbols 2> %t.llvm.err2 | FileCheck %s --check-prefix=LLVM2 170# RUN: FileCheck %s --input-file %t.llvm.err2 --check-prefix=WARN2 --implicit-check-not=warning 171# RUN: llvm-readelf %t2 --symbols 2> %t.gnu.err2 | FileCheck %s --check-prefix=GNU2 172# RUN: FileCheck %s --input-file %t.gnu.err2 --check-prefix=WARN2 --implicit-check-not=warning 173 174# LLVM2: Name: (0) 175# LLVM2: Name: <?> (0) 176 177# GNU2: Symbol table '.symtab' contains 2 entries: 178# GNU2-NEXT: Num: {{.*}} Type {{.*}} Ndx Name 179# 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 table 183 184--- !ELF 185FileHeader: 186 Class: ELFCLASS32 187 Data: ELFDATA2LSB 188 Type: ET_REL 189Symbols: 190 # Section symbol via SHT_SYMTAB_SHNDX when SHT_SYMTAB_SHNDX is missing. 191 - Name: "" 192 Index: SHN_XINDEX 193 Type: STT_SECTION 194