xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/crel.test (revision 1b704e889f09b5dfc0549786542bc6d2cd54e85b)
1# RUN: yaml2obj --docnum=1 %s -o %t
2# RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=LLVM --match-full-lines
3# RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=GNU --match-full-lines
4
5# LLVM:      Relocations [
6# LLVM-NEXT:   Section ([[#]]) .crel.text {
7# LLVM-NEXT:     0x1 R_X86_64_32 g1 0x1
8# LLVM-NEXT:     0x2 R_X86_64_64 l1 0x2
9# LLVM-NEXT:     0x0 R_X86_64_32S g1 0xFFFFFFFFFFFFFFFF
10# LLVM-NEXT:     0x4 R_X86_64_32S .text 0x8000000000000000
11# LLVM-NEXT:   }
12# LLVM-NEXT:   Section ([[#]]) .crelnonalloc {
13# LLVM-NEXT:     0x10 R_X86_64_64 g1 0x1
14# LLVM-NEXT:     0x20 R_X86_64_64 g2 0x2
15# LLVM-NEXT:   }
16# LLVM-NEXT: ]
17
18# GNU:      Relocation section '.crel.text' at offset 0x48 contains 4 entries:
19# GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
20# GNU-NEXT: 0000000000000001  000000030000000a R_X86_64_32            0000000000000000 g1 + 1
21# GNU-NEXT: 0000000000000002  0000000200000001 R_X86_64_64            0000000000000000 l1 + 2
22# GNU-NEXT: 0000000000000000  000000030000000b R_X86_64_32S           0000000000000000 g1 - 1
23# GNU-NEXT: 0000000000000004  000000010000000b R_X86_64_32S           0000000000000000 .text - 8000000000000000
24# GNU-EMPTY:
25# GNU-NEXT: Relocation section '.crelnonalloc' at offset 0xa2 contains 2 entries:
26# GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
27# GNU-NEXT: 0000000000000010  0000000300000001 R_X86_64_64            0000000000000000 g1 + 1
28# GNU-NEXT: 0000000000000020  0000000400000001 R_X86_64_64            0000000000000000 g2 + 2
29
30--- !ELF
31FileHeader: !FileHeader
32  Class: ELFCLASS64
33  Data: ELFDATA2LSB
34  Type: ET_REL
35  Machine: EM_X86_64
36
37Sections:
38- Name: .text
39  Type: SHT_PROGBITS
40  Content: "0000000000000000"
41  Flags: [SHF_ALLOC]
42- Name: .crel.text
43  Type: SHT_CREL
44  Info: .text
45  Link: .symtab
46  Relocations:
47    - Offset: 0x1
48      Symbol: g1
49      Type:   R_X86_64_32
50      Addend: 1
51    - Offset: 0x2
52      Symbol: l1
53      Type:   R_X86_64_64
54      Addend: 2
55    - Offset: 0x0
56      Symbol: g1
57      Type:   R_X86_64_32S
58      Addend: 0xffffffffffffffff
59    - Offset: 0x4
60      Symbol: .text
61      Type:   R_X86_64_32S
62      Addend: 0x8000000000000000
63- Name: nonalloc
64  Type: SHT_PROGBITS
65  Size: 0x30
66- Name: .crelnonalloc
67  Type: SHT_CREL
68  Info: nonalloc
69  Link: .symtab
70  Relocations:
71    - Offset: 0x10
72      Symbol: g1
73      Type:   R_X86_64_64
74      Addend: 1
75    - Offset: 0x20
76      Symbol: g2
77      Type:   R_X86_64_64
78      Addend: 2
79
80Symbols:
81  - Name: .text
82    Type: STT_SECTION
83    Section: .text
84  - Name:    l1
85  - Name:    g1
86    Section: .text
87    Value:   0x0
88    Size:    4
89    Binding: STB_GLOBAL
90  - Name:    g2
91    Binding: STB_GLOBAL
92
93## Check relocation formatting on ELFCLASS32 as well.
94# RUN: yaml2obj --docnum=2 %s -o %t2
95# RUN: llvm-readobj -r %t2 | FileCheck %s --check-prefix=LLVM2 --match-full-lines
96# RUN: llvm-readelf -r %t2 | FileCheck %s --check-prefix=GNU2 --match-full-lines
97
98# LLVM2:      Relocations [
99# LLVM2-NEXT:   Section (2) .crel.text {
100# LLVM2-NEXT:     0x8 R_386_PC32 l1 0x1
101# LLVM2-NEXT:     0x4 R_386_32 g1 0x0
102# LLVM2-NEXT:   }
103# LLVM2-NEXT: ]
104
105# GNU2:      Relocation section '.crel.text' at offset {{.*}} contains 2 entries:
106# GNU2-NEXT:  Offset     Info    Type                Sym. Value  Symbol's Name + Addend
107# GNU2-NEXT: 00000008  00000102 R_386_PC32             00000000   l1 + 1
108# GNU2-NEXT: 00000004  00000201 R_386_32               00000000   g1 + 0
109
110--- !ELF
111FileHeader:
112  Class:   ELFCLASS32
113  Data:    ELFDATA2LSB
114  Type:    ET_REL
115  Machine: EM_386
116Sections:
117- Name: .text
118  Type: SHT_PROGBITS
119  Size: 0x10
120- Name: .crel.text
121  Type: SHT_CREL
122  Info: .text
123  Link: .symtab
124  Relocations:
125    - Offset: 0x8
126      Symbol: l1
127      Type:   R_386_PC32
128      Addend: 1
129    - Offset: 0x4
130      Symbol: g1
131      Type:   R_386_32
132Symbols:
133  - Name:    l1
134  - Name:    g1
135    Binding: STB_GLOBAL
136
137## Check CREL with implicit addends.
138# RUN: yaml2obj --docnum=3 %s -o %t3
139# RUN: llvm-readobj -r %t3 | FileCheck %s --check-prefix=LLVM3 --match-full-lines
140# RUN: llvm-readelf -r %t3 | FileCheck %s --check-prefix=GNU3 --match-full-lines
141
142# LLVM3:      Relocations [
143# LLVM3-NEXT:   Section (3) .crel.data {
144# LLVM3-NEXT:     0x1F R_X86_64_32 g1
145# LLVM3-NEXT:     0x3F R_X86_64_64 g1
146# LLVM3-NEXT:     0x0 R_X86_64_32S l1
147# LLVM3-NEXT:   }
148# LLVM3-NEXT: ]
149
150# GNU3:      Relocation section '.crel.data' at offset {{.*}} contains 3 entries:
151# GNU3-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name
152# GNU3-NEXT: 000000000000001f  000000030000000a R_X86_64_32            0000000000000000 g1
153# GNU3-NEXT: 000000000000003f  0000000300000001 R_X86_64_64            0000000000000000 g1
154# GNU3-NEXT: 0000000000000000  000000020000000b R_X86_64_32S           0000000000000000 l1
155--- !ELF
156FileHeader:
157  Class:     ELFCLASS64
158  Data:      ELFDATA2LSB
159  Type:      ET_REL
160  Machine:   EM_X86_64
161Sections:
162  - Name:    .text
163    Type:    SHT_PROGBITS
164  - Name:    .data
165    Type:    SHT_PROGBITS
166  - Name:    .crel.data
167    Type:    SHT_CREL
168    Flags:   [ SHF_INFO_LINK ]
169    Link:    .symtab
170    Info:    .data
171    Content: 187f030a82017787feffffffffffffff077f0a
172Symbols:
173  - Name:    .text
174    Type:    STT_SECTION
175    Section: .text
176  - Name:    l1
177    Section: .text
178  - Name:    g1
179    Section: .text
180    Binding: STB_GLOBAL
181
182## Test errors. See also relocation-errors.test.
183# RUN: yaml2obj --docnum=4 %s -o %t.err
184# RUN: llvm-readobj -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-LLVM -DFILE=%t.err
185# RUN: llvm-readelf -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-GNU -DFILE=%t.err
186
187# ERR-LLVM:      Section ([[#]]) .crel.data {
188# ERR-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end
189# ERR-LLVM-NEXT: }
190
191# ERR-GNU: warning: '[[FILE]]': unable to get the number of relocations in SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end
192# ERR-GNU-EMPTY:
193# ERR-GNU-NEXT: Relocation section '.crel.data' at offset 0x40 contains <?> entries:
194# ERR-GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name
195# ERR-GNU-NOT:  {{.}}
196
197# RUN: yaml2obj --docnum=4 -DCONTENT=08 %s -o %t.err2
198# RUN: llvm-readobj -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-LLVM -DFILE=%t.err2
199# RUN: llvm-readelf -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-GNU -DFILE=%t.err2
200
201# ERR2-LLVM:      Section ([[#]]) .crel.data {
202# ERR2-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2)
203# ERR2-LLVM-NEXT: }
204
205# ERR2-GNU:      Relocation section '.crel.data' at offset 0x40 contains 1 entries:
206# ERR2-GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name
207# ERR2-GNU:      warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2)
208# ERR2-GNU-NOT:  {{.}}
209
210--- !ELF
211FileHeader:
212  Class:     ELFCLASS64
213  Data:      ELFDATA2LSB
214  Type:      ET_REL
215  Machine:   EM_X86_64
216Sections:
217  - Name:    .text
218    Type:    SHT_PROGBITS
219  - Name:    .data
220    Type:    SHT_PROGBITS
221  - Name:    .crel.data
222    Type:    SHT_CREL
223    Flags:   []
224    Link:    .symtab
225    Info:    .data
226    Content: [[CONTENT=""]]
227Symbols:
228  - Name:    .text
229    Type:    STT_SECTION
230    Section: .text
231