File: section-symbols.test

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-12
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,496,180 kB
  • sloc: cpp: 5,593,972; ansic: 986,872; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,538; xml: 953; cs: 573; fortran: 567
file content (164 lines) | stat: -rw-r--r-- 5,712 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
## ELF section symbols use the corresponding section names when printing
## unnamed symbols. This test verifies this and also that appropriate things
## are printed if the section is somehow invalid.

# RUN: yaml2obj %s -o %t1
# RUN: llvm-readobj %t1 --symbols --relocations 2>&1 | \
# RUN:   FileCheck %s -DFILE=%t1 --check-prefix=LLVM1 --implicit-check-not="warning:"
# RUN: llvm-readelf %t1 --symbols --relocations 2>&1 | \
# RUN:   FileCheck %s -DFILE=%t1 --check-prefix=GNU1 --implicit-check-not="warning:"

# LLVM1:      Relocations [
# LLVM1-NEXT:   Section (4) .rela.foo {
# LLVM1-NEXT:     0x1 R_X86_64_NONE .foo 0x0
# LLVM1-NEXT:     0x2 R_X86_64_NONE symbol1 0x0
# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 67
# LLVM1-NEXT:     0x3 R_X86_64_NONE <section 67> 0x0
# LLVM1-NEXT:     0x4 R_X86_64_NONE symbol2 0x0
# LLVM1-NEXT:     0x5 R_X86_64_NONE .bar 0x0
# LLVM1-NEXT:     0x6 R_X86_64_NONE symbol3 0x0
# LLVM1-NEXT: warning: '[[FILE]]': invalid section index: 66
# LLVM1-NEXT:     0x7 R_X86_64_NONE <section 66> 0x0
# LLVM1-NEXT:     0x8 R_X86_64_NONE symbol4 0x0
# LLVM1-NEXT:   }
# LLVM1-NEXT: ]

# LLVM1: Name: (0)
# LLVM1: Name: .foo (0)
# LLVM1: Name: symbol1 (25)
# LLVM1: Name: <section 67> (0)
# LLVM1: Name: symbol2 (17)
# LLVM1: Name: .bar (0)
# LLVM1: Name: symbol3 (9)
# LLVM1: Name: <section 66> (0)
# LLVM1: Name: symbol4 (1)

# GNU1:      Relocation section '.rela.foo' at offset 0x58 contains 8 entries:
# GNU1-NEXT:  Offset     Info    Type         Sym. Value  Symbol's Name + Addend
# GNU1-NEXT: 00000001  00000100 R_X86_64_NONE   00000000   .foo + 0
# GNU1-NEXT: 00000002  00000200 R_X86_64_NONE   00000000   symbol1 + 0
# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 67
# GNU1-NEXT: 00000003  00000300 R_X86_64_NONE   00000000   <section 67> + 0
# GNU1-NEXT: 00000004  00000400 R_X86_64_NONE   00000000   symbol2 + 0
# GNU1-NEXT: 00000005  00000500 R_X86_64_NONE   00000000   .bar + 0
# GNU1-NEXT: 00000006  00000600 R_X86_64_NONE   00000000   symbol3 + 0
# GNU1-NEXT: warning: '[[FILE]]': invalid section index: 66
# GNU1-NEXT: 00000007  00000700 R_X86_64_NONE   00000000   <section 66> + 0
# GNU1-NEXT: 00000008  00000800 R_X86_64_NONE   00000000   symbol4 + 0

# GNU1:      Symbol table '.symtab' contains 9 entries:
# GNU1-NEXT:    Num: {{.*}} Type    {{.*}} Ndx Name
# GNU1-NEXT:      0: {{.*}} NOTYPE  {{.*}} UND {{$}}
# GNU1-NEXT:      1: {{.*}} SECTION {{.*}}  1 .foo
# GNU1-NEXT:      2: {{.*}} SECTION {{.*}}  1 symbol1
# GNU1-NEXT:      3: {{.*}} SECTION {{.*}} 67 <section 67>
# GNU1-NEXT:      4: {{.*}} SECTION {{.*}} 67 symbol2
# GNU1-NEXT:      5: {{.*}} SECTION {{.*}}  2 .bar
# GNU1-NEXT:      6: {{.*}} SECTION {{.*}}  2 symbol3
# GNU1-NEXT:      7: {{.*}} SECTION {{.*}} 66 <section 66>
# GNU1-NEXT:      8: {{.*}} SECTION {{.*}} 66 symbol4

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: .bar
    Type: SHT_PROGBITS
  - Name: .symtab_shndx
    Type: SHT_SYMTAB_SHNDX
    Link: .symtab
    Entries: [ 0, 0, 0, 0, 0, 2, 2, 0x42, 0x42 ]
  - Name: .rela.foo
    Type: SHT_RELA
    Link: .symtab
    Info: .foo
    Relocations:
      - Offset: 0x1
        Symbol: 1
        Type:   R_X86_64_NONE
      - Offset: 0x2
        Symbol: 2
        Type:   R_X86_64_NONE
      - Offset: 0x3
        Symbol: 3
        Type:   R_X86_64_NONE
      - Offset: 0x4
        Symbol: 4
        Type:   R_X86_64_NONE
      - Offset: 0x5
        Symbol: 5
        Type:   R_X86_64_NONE
      - Offset: 0x6
        Symbol: 6
        Type:   R_X86_64_NONE
      - Offset: 0x7
        Symbol: 7
        Type:   R_X86_64_NONE
      - Offset: 0x8
        Symbol: 8
        Type:   R_X86_64_NONE
Symbols:
## Case 1: a valid unnamed section symbol.
  - Name: ""
    Section: .foo
    Type: STT_SECTION
## Case 2: a valid named section symbol.
  - Name: "symbol1"
    Section: .foo
    Type: STT_SECTION
## Case 3: an unnamed section symbol with invalid index.
  - Name: ""
    Index: 0x43
    Type: STT_SECTION
## Case 4: a named section symbol with invalid index.
  - Name: "symbol2"
    Index: 0x43
    Type: STT_SECTION
## Case 5: a valid unnamed section symbol via SHT_SYMTAB_SHNDX.
  - Name: ""
    Index: SHN_XINDEX
    Type: STT_SECTION
## Case 6: a valid named section symbol via SHT_SYMTAB_SHNDX.
  - Name: "symbol3"
    Index: SHN_XINDEX
    Type: STT_SECTION
## Case 7: a unnamed section symbol via SHT_SYMTAB_SHNDX with invalid index.
  - Name: ""
    Index: SHN_XINDEX
    Type: STT_SECTION
## Case 8: a named section symbol via SHT_SYMTAB_SHNDX with invalid index.
  - Name: "symbol4"
    Index: SHN_XINDEX
    Type: STT_SECTION

# RUN: yaml2obj %s --docnum=2 -o %t2
# RUN: llvm-readobj %t2 --symbols 2> %t.llvm.err2 | FileCheck %s --check-prefix=LLVM2
# RUN: FileCheck %s --input-file %t.llvm.err2 --check-prefix=WARN2 --implicit-check-not=warning
# RUN: llvm-readelf %t2 --symbols 2> %t.gnu.err2 | FileCheck %s --check-prefix=GNU2
# RUN: FileCheck %s --input-file %t.gnu.err2 --check-prefix=WARN2 --implicit-check-not=warning

# LLVM2: Name: (0)
# LLVM2: Name: <?> (0)

# GNU2:      Symbol table '.symtab' contains 2 entries:
# GNU2-NEXT:    Num: {{.*}} Type    {{.*}} Ndx Name
# GNU2-NEXT:      0: {{.*}} NOTYPE  {{.*}} UND {{$}}
# GNU2-NEXT:      1: {{.*}} SECTION {{.*}} RSV[0xffff] <?>

# WARN2: warning: '{{.*}}.tmp2': found an extended symbol index (1), but unable to locate the extended symbol index table

--- !ELF
FileHeader:
  Class: ELFCLASS32
  Data:  ELFDATA2LSB
  Type:  ET_REL
Symbols:
  # Section symbol via SHT_SYMTAB_SHNDX when SHT_SYMTAB_SHNDX is missing.
  - Name: ""
    Index: SHN_XINDEX
    Type: STT_SECTION