xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/reloc-types-x64.test (revision d9cf9bd4b3c30221a2ec348cdfb01a24d84927b6)
1## Test that llvm-readobj/llvm-readelf shows proper relocation type
2## names and values for x86_64 target.
3
4# RUN: yaml2obj %s -o %t-x86_64.o
5# RUN: llvm-readobj -r --expand-relocs %t-x86_64.o | FileCheck %s --check-prefix=LLVM
6# RUN: llvm-readelf -r --expand-relocs %t-x86_64.o | FileCheck %s --check-prefix=GNU
7
8# LLVM: Type: R_X86_64_NONE (0)
9# LLVM: Type: R_X86_64_64 (1)
10# LLVM: Type: R_X86_64_PC32 (2)
11# LLVM: Type: R_X86_64_GOT32 (3)
12# LLVM: Type: R_X86_64_PLT32 (4)
13# LLVM: Type: R_X86_64_COPY (5)
14# LLVM: Type: R_X86_64_GLOB_DAT (6)
15# LLVM: Type: R_X86_64_JUMP_SLOT (7)
16# LLVM: Type: R_X86_64_RELATIVE (8)
17# LLVM: Type: R_X86_64_GOTPCREL (9)
18# LLVM: Type: R_X86_64_32 (10)
19# LLVM: Type: R_X86_64_32S (11)
20# LLVM: Type: R_X86_64_16 (12)
21# LLVM: Type: R_X86_64_PC16 (13)
22# LLVM: Type: R_X86_64_8 (14)
23# LLVM: Type: R_X86_64_PC8 (15)
24# LLVM: Type: R_X86_64_DTPMOD64 (16)
25# LLVM: Type: R_X86_64_DTPOFF64 (17)
26# LLVM: Type: R_X86_64_TPOFF64 (18)
27# LLVM: Type: R_X86_64_TLSGD (19)
28# LLVM: Type: R_X86_64_TLSLD (20)
29# LLVM: Type: R_X86_64_DTPOFF32 (21)
30# LLVM: Type: R_X86_64_GOTTPOFF (22)
31# LLVM: Type: R_X86_64_TPOFF32 (23)
32# LLVM: Type: R_X86_64_PC64 (24)
33# LLVM: Type: R_X86_64_GOTOFF64 (25)
34# LLVM: Type: R_X86_64_GOTPC32 (26)
35# LLVM: Type: R_X86_64_GOT64 (27)
36# LLVM: Type: R_X86_64_GOTPCREL64 (28)
37# LLVM: Type: R_X86_64_GOTPC64 (29)
38# LLVM: Type: R_X86_64_GOTPLT64 (30)
39# LLVM: Type: R_X86_64_PLTOFF64 (31)
40# LLVM: Type: R_X86_64_SIZE32 (32)
41# LLVM: Type: R_X86_64_SIZE64 (33)
42# LLVM: Type: R_X86_64_GOTPC32_TLSDESC (34)
43# LLVM: Type: R_X86_64_TLSDESC_CALL (35)
44# LLVM: Type: R_X86_64_TLSDESC (36)
45# LLVM: Type: R_X86_64_IRELATIVE (37)
46# LLVM: Type: R_X86_64_GOTPCRELX (41)
47# LLVM: Type: R_X86_64_REX_GOTPCRELX (42)
48
49# GNU:      Relocation section '.rela.text' at offset 0x40 contains 40 entries:
50# GNU-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
51# GNU-NEXT: 0000000000000003  0000000100000000 R_X86_64_NONE          0000000000000000 foo + 0
52# GNU-NEXT: 000000000000000a  0000000100000001 R_X86_64_64            0000000000000000 foo + 0
53# GNU-NEXT: 0000000000000011  0000000100000002 R_X86_64_PC32          0000000000000000 foo + 0
54# GNU-NEXT: 0000000000000018  0000000100000003 R_X86_64_GOT32         0000000000000000 foo + 0
55# GNU-NEXT: 000000000000001f  0000000100000004 R_X86_64_PLT32         0000000000000000 foo + 0
56# GNU-NEXT: 0000000000000026  0000000100000005 R_X86_64_COPY          0000000000000000 foo + 0
57# GNU-NEXT: 000000000000002d  0000000100000006 R_X86_64_GLOB_DAT      0000000000000000 foo + 0
58# GNU-NEXT: 0000000000000034  0000000100000007 R_X86_64_JUMP_SLOT     0000000000000000 foo + 0
59# GNU-NEXT: 000000000000003b  0000000100000008 R_X86_64_RELATIVE      0000000000000000 foo + 0
60# GNU-NEXT: 0000000000000042  0000000100000009 R_X86_64_GOTPCREL      0000000000000000 foo + 0
61# GNU-NEXT: 0000000000000049  000000010000000a R_X86_64_32            0000000000000000 foo + 0
62# GNU-NEXT: 0000000000000050  000000010000000b R_X86_64_32S           0000000000000000 foo + 0
63# GNU-NEXT: 0000000000000057  000000010000000c R_X86_64_16            0000000000000000 foo + 0
64# GNU-NEXT: 000000000000005e  000000010000000d R_X86_64_PC16          0000000000000000 foo + 0
65# GNU-NEXT: 0000000000000065  000000010000000e R_X86_64_8             0000000000000000 foo + 0
66# GNU-NEXT: 000000000000006c  000000010000000f R_X86_64_PC8           0000000000000000 foo + 0
67# GNU-NEXT: 0000000000000073  0000000100000010 R_X86_64_DTPMOD64      0000000000000000 foo + 0
68# GNU-NEXT: 000000000000007a  0000000100000011 R_X86_64_DTPOFF64      0000000000000000 foo + 0
69# GNU-NEXT: 0000000000000081  0000000100000012 R_X86_64_TPOFF64       0000000000000000 foo + 0
70# GNU-NEXT: 0000000000000088  0000000100000013 R_X86_64_TLSGD         0000000000000000 foo + 0
71# GNU-NEXT: 000000000000008f  0000000100000014 R_X86_64_TLSLD         0000000000000000 foo + 0
72# GNU-NEXT: 0000000000000096  0000000100000015 R_X86_64_DTPOFF32      0000000000000000 foo + 0
73# GNU-NEXT: 000000000000009d  0000000100000016 R_X86_64_GOTTPOFF      0000000000000000 foo + 0
74# GNU-NEXT: 00000000000000a4  0000000100000017 R_X86_64_TPOFF32       0000000000000000 foo + 0
75# GNU-NEXT: 00000000000000ab  0000000100000018 R_X86_64_PC64          0000000000000000 foo + 0
76# GNU-NEXT: 00000000000000b2  0000000100000019 R_X86_64_GOTOFF64      0000000000000000 foo + 0
77# GNU-NEXT: 00000000000000b9  000000010000001a R_X86_64_GOTPC32       0000000000000000 foo + 0
78# GNU-NEXT: 00000000000000c0  000000010000001b R_X86_64_GOT64         0000000000000000 foo + 0
79# GNU-NEXT: 00000000000000c7  000000010000001c R_X86_64_GOTPCREL64    0000000000000000 foo + 0
80# GNU-NEXT: 00000000000000ce  000000010000001d R_X86_64_GOTPC64       0000000000000000 foo + 0
81# GNU-NEXT: 00000000000000d5  000000010000001e R_X86_64_GOTPLT64      0000000000000000 foo + 0
82# GNU-NEXT: 00000000000000dc  000000010000001f R_X86_64_PLTOFF64      0000000000000000 foo + 0
83# GNU-NEXT: 00000000000000e3  0000000100000020 R_X86_64_SIZE32        0000000000000000 foo + 0
84# GNU-NEXT: 00000000000000ea  0000000100000021 R_X86_64_SIZE64        0000000000000000 foo + 0
85# GNU-NEXT: 00000000000000f1  0000000100000022 R_X86_64_GOTPC32_TLSDESC 0000000000000000 foo + 0
86# GNU-NEXT: 00000000000000f8  0000000100000023 R_X86_64_TLSDESC_CALL  0000000000000000 foo + 0
87# GNU-NEXT: 00000000000000ff  0000000100000024 R_X86_64_TLSDESC       0000000000000000 foo + 0
88# GNU-NEXT: 0000000000000106  0000000100000025 R_X86_64_IRELATIVE     0000000000000000 foo + 0
89# GNU-NEXT: 000000000000010a  0000000100000029 R_X86_64_GOTPCRELX     0000000000000000 foo + 0
90# GNU-NEXT: 000000000000010e  000000010000002a R_X86_64_REX_GOTPCRELX 0000000000000000 foo + 0
91
92--- !ELF
93FileHeader:
94  Class:   ELFCLASS64
95  Data:    ELFDATA2LSB
96  Type:    ET_REL
97  Machine: EM_X86_64
98Sections:
99  - Name: .rela.text
100    Type: SHT_RELA
101    Relocations:
102      - Offset: 0x0000000000000003
103        Type:   R_X86_64_NONE
104        Symbol: foo
105      - Offset: 0x000000000000000A
106        Type:   R_X86_64_64
107        Symbol: foo
108      - Offset: 0x0000000000000011
109        Type:   R_X86_64_PC32
110        Symbol: foo
111      - Offset: 0x0000000000000018
112        Type:   R_X86_64_GOT32
113        Symbol: foo
114      - Offset: 0x000000000000001F
115        Type:   R_X86_64_PLT32
116        Symbol: foo
117      - Offset: 0x0000000000000026
118        Type:   R_X86_64_COPY
119        Symbol: foo
120      - Offset: 0x000000000000002D
121        Type:   R_X86_64_GLOB_DAT
122        Symbol: foo
123      - Offset: 0x0000000000000034
124        Type:   R_X86_64_JUMP_SLOT
125        Symbol: foo
126      - Offset: 0x000000000000003B
127        Type:   R_X86_64_RELATIVE
128        Symbol: foo
129      - Offset: 0x0000000000000042
130        Type:   R_X86_64_GOTPCREL
131        Symbol: foo
132      - Offset: 0x0000000000000049
133        Type:   R_X86_64_32
134        Symbol: foo
135      - Offset: 0x0000000000000050
136        Type:   R_X86_64_32S
137        Symbol: foo
138      - Offset: 0x0000000000000057
139        Type:   R_X86_64_16
140        Symbol: foo
141      - Offset: 0x000000000000005E
142        Type:   R_X86_64_PC16
143        Symbol: foo
144      - Offset: 0x0000000000000065
145        Type:   R_X86_64_8
146        Symbol: foo
147      - Offset: 0x000000000000006C
148        Type:   R_X86_64_PC8
149        Symbol: foo
150      - Offset: 0x0000000000000073
151        Type:   R_X86_64_DTPMOD64
152        Symbol: foo
153      - Offset: 0x000000000000007A
154        Type:   R_X86_64_DTPOFF64
155        Symbol: foo
156      - Offset: 0x0000000000000081
157        Type:   R_X86_64_TPOFF64
158        Symbol: foo
159      - Offset: 0x0000000000000088
160        Type:   R_X86_64_TLSGD
161        Symbol: foo
162      - Offset: 0x000000000000008F
163        Type:   R_X86_64_TLSLD
164        Symbol: foo
165      - Offset: 0x0000000000000096
166        Type:   R_X86_64_DTPOFF32
167        Symbol: foo
168      - Offset: 0x000000000000009D
169        Type:   R_X86_64_GOTTPOFF
170        Symbol: foo
171      - Offset: 0x00000000000000A4
172        Type:   R_X86_64_TPOFF32
173        Symbol: foo
174      - Offset: 0x00000000000000AB
175        Type:   R_X86_64_PC64
176        Symbol: foo
177      - Offset: 0x00000000000000B2
178        Type:   R_X86_64_GOTOFF64
179        Symbol: foo
180      - Offset: 0x00000000000000B9
181        Type:   R_X86_64_GOTPC32
182        Symbol: foo
183      - Offset: 0x00000000000000C0
184        Type:   R_X86_64_GOT64
185        Symbol: foo
186      - Offset: 0x00000000000000C7
187        Type:   R_X86_64_GOTPCREL64
188        Symbol: foo
189      - Offset: 0x00000000000000CE
190        Type:   R_X86_64_GOTPC64
191        Symbol: foo
192      - Offset: 0x00000000000000D5
193        Type:   R_X86_64_GOTPLT64
194        Symbol: foo
195      - Offset: 0x00000000000000DC
196        Type:   R_X86_64_PLTOFF64
197        Symbol: foo
198      - Offset: 0x00000000000000E3
199        Type:   R_X86_64_SIZE32
200        Symbol: foo
201      - Offset: 0x00000000000000EA
202        Type:   R_X86_64_SIZE64
203        Symbol: foo
204      - Offset: 0x00000000000000F1
205        Type:   R_X86_64_GOTPC32_TLSDESC
206        Symbol: foo
207      - Offset: 0x00000000000000F8
208        Type:   R_X86_64_TLSDESC_CALL
209        Symbol: foo
210      - Offset: 0x00000000000000FF
211        Type:   R_X86_64_TLSDESC
212        Symbol: foo
213      - Offset: 0x0000000000000106
214        Type:   R_X86_64_IRELATIVE
215        Symbol: foo
216      - Offset: 0x000000000000010A
217        Type:   R_X86_64_GOTPCRELX
218        Symbol: foo
219      - Offset: 0x000000000000010E
220        Type:   R_X86_64_REX_GOTPCRELX
221        Symbol: foo
222Symbols:
223  - Name:    foo
224    Binding: STB_GLOBAL
225