Skip to content

Commit ee68fda

Browse files
committedOct 14, 2016
[Support/ELF/AMDGPU] Add 32-bit lo/hi got and pc relative relocations
Added relocation names: - R_AMDGPU_GOTPCREL32_LO - R_AMDGPU_GOTPCREL32_HI - R_AMDGPU_REL32_LO - R_AMDGPU_REL32_HI AMDGPU isa only supports 32-bit immediates. In order to access 64-bit address we need to generate 32-bit lo/hi relocations, and do the right math (separate patch). Currently we only generate one 32 bit relocation for lower bits for each access, losing higher bits. Hence we need relocations listed above. Differential Revision: https://reviews.llvm.org/D25546 llvm-svn: 284191
1 parent e1f0945 commit ee68fda

File tree

3 files changed

+68
-40
lines changed

3 files changed

+68
-40
lines changed
 

‎llvm/docs/CodeGenerator.rst

+16-12
Original file line numberDiff line numberDiff line change
@@ -2682,15 +2682,19 @@ Following notations are used for specifying relocation calculations:
26822682
AMDGPU Backend generates *Elf64_Rela* relocation records with the following
26832683
supported relocation types:
26842684

2685-
===================== ===== ========== ====================
2686-
Relocation type Value Field Calculation
2687-
===================== ===== ========== ====================
2688-
``R_AMDGPU_NONE`` 0 ``none`` ``none``
2689-
``R_AMDGPU_ABS32_LO`` 1 ``word32`` (S + A) & 0xFFFFFFFF
2690-
``R_AMDGPU_ABS32_HI`` 2 ``word32`` (S + A) >> 32
2691-
``R_AMDGPU_ABS64`` 3 ``word64`` S + A
2692-
``R_AMDGPU_REL32`` 4 ``word32`` S + A - P
2693-
``R_AMDGPU_REL64`` 5 ``word64`` S + A - P
2694-
``R_AMDGPU_ABS32`` 6 ``word32`` S + A
2695-
``R_AMDGPU_GOTPCREL`` 7 ``word32`` G + GOT + A - P
2696-
===================== ===== ========== ====================
2685+
========================== ===== ========== ==============================
2686+
Relocation type Value Field Calculation
2687+
========================== ===== ========== ==============================
2688+
``R_AMDGPU_NONE`` 0 ``none`` ``none``
2689+
``R_AMDGPU_ABS32_LO`` 1 ``word32`` (S + A) & 0xFFFFFFFF
2690+
``R_AMDGPU_ABS32_HI`` 2 ``word32`` (S + A) >> 32
2691+
``R_AMDGPU_ABS64`` 3 ``word64`` S + A
2692+
``R_AMDGPU_REL32`` 4 ``word32`` S + A - P
2693+
``R_AMDGPU_REL64`` 5 ``word64`` S + A - P
2694+
``R_AMDGPU_ABS32`` 6 ``word32`` S + A
2695+
``R_AMDGPU_GOTPCREL`` 7 ``word32`` G + GOT + A - P
2696+
``R_AMDGPU_GOTPCREL32_LO`` 8 ``word32`` (G + GOT + A - P) & 0xFFFFFFFF
2697+
``R_AMDGPU_GOTPCREL32_HI`` 9 ``word32`` (G + GOT + A - P) >> 32
2698+
``R_AMDGPU_REL32_LO`` 10 ``word32`` (S + A - P) & 0xFFFFFFFF
2699+
``R_AMDGPU_REL32_HI`` 11 ``word32`` (S + A - P) >> 32
2700+
========================== ===== ========== ==============================

‎llvm/include/llvm/Support/ELFRelocs/AMDGPU.def

+12-8
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22
#error "ELF_RELOC must be defined"
33
#endif
44

5-
ELF_RELOC(R_AMDGPU_NONE, 0)
6-
ELF_RELOC(R_AMDGPU_ABS32_LO, 1)
7-
ELF_RELOC(R_AMDGPU_ABS32_HI, 2)
8-
ELF_RELOC(R_AMDGPU_ABS64, 3)
9-
ELF_RELOC(R_AMDGPU_REL32, 4)
10-
ELF_RELOC(R_AMDGPU_REL64, 5)
11-
ELF_RELOC(R_AMDGPU_ABS32, 6)
12-
ELF_RELOC(R_AMDGPU_GOTPCREL, 7)
5+
ELF_RELOC(R_AMDGPU_NONE, 0)
6+
ELF_RELOC(R_AMDGPU_ABS32_LO, 1)
7+
ELF_RELOC(R_AMDGPU_ABS32_HI, 2)
8+
ELF_RELOC(R_AMDGPU_ABS64, 3)
9+
ELF_RELOC(R_AMDGPU_REL32, 4)
10+
ELF_RELOC(R_AMDGPU_REL64, 5)
11+
ELF_RELOC(R_AMDGPU_ABS32, 6)
12+
ELF_RELOC(R_AMDGPU_GOTPCREL, 7)
13+
ELF_RELOC(R_AMDGPU_GOTPCREL32_LO, 8)
14+
ELF_RELOC(R_AMDGPU_GOTPCREL32_HI, 9)
15+
ELF_RELOC(R_AMDGPU_REL32_LO, 10)
16+
ELF_RELOC(R_AMDGPU_REL32_HI, 11)

‎llvm/test/Object/AMDGPU/elf64-relocs.yaml

+40-20
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@
33

44
# CHECK: Relocations [
55
# CHECK: Section (2) .rela.text {
6-
# CHECK: 0x0 R_AMDGPU_NONE main 0x0
7-
# CHECK: 0x8 R_AMDGPU_ABS32_LO - 0x0
8-
# CHECK: 0x10 R_AMDGPU_ABS32_HI - 0x0
9-
# CHECK: 0x18 R_AMDGPU_ABS64 - 0x0
10-
# CHECK: 0x20 R_AMDGPU_REL32 - 0x0
11-
# CHECK: 0x28 R_AMDGPU_REL64 - 0x0
12-
# CHECK: 0x30 R_AMDGPU_ABS32 - 0x0
6+
# CHECK: 0x0 R_AMDGPU_NONE - 0x0
7+
# CHECK: 0x2 R_AMDGPU_ABS32_LO - 0x0
8+
# CHECK: 0x4 R_AMDGPU_ABS32_HI - 0x0
9+
# CHECK: 0x6 R_AMDGPU_ABS64 - 0x0
10+
# CHECK: 0x8 R_AMDGPU_REL32 - 0x0
11+
# CHECK: 0x10 R_AMDGPU_REL64 - 0x0
12+
# CHECK: 0x12 R_AMDGPU_ABS32 - 0x0
13+
# CHECK: 0x14 R_AMDGPU_GOTPCREL - 0x0
14+
# CHECK: 0x16 R_AMDGPU_GOTPCREL32_LO - 0x0
15+
# CHECK: 0x18 R_AMDGPU_GOTPCREL32_HI - 0x0
16+
# CHECK: 0x20 R_AMDGPU_REL32_LO - 0x0
17+
# CHECK: 0x22 R_AMDGPU_REL32_HI - 0x0
1318
# CHECK: }
1419
# CHECK: ]
1520

@@ -32,26 +37,41 @@ Sections:
3237
AddressAlign: 0x08
3338
Relocations:
3439
- Offset: 0x0
35-
Symbol: main
40+
Symbol: s0
3641
Type: R_AMDGPU_NONE
37-
- Offset: 0x8
38-
Symbol: a
42+
- Offset: 0x2
43+
Symbol: s1
3944
Type: R_AMDGPU_ABS32_LO
40-
- Offset: 0x10
41-
Symbol: b
45+
- Offset: 0x4
46+
Symbol: s2
4247
Type: R_AMDGPU_ABS32_HI
43-
- Offset: 0x18
44-
Symbol: c
48+
- Offset: 0x6
49+
Symbol: s3
4550
Type: R_AMDGPU_ABS64
46-
- Offset: 0x20
47-
Symbol: d
51+
- Offset: 0x8
52+
Symbol: s4
4853
Type: R_AMDGPU_REL32
49-
- Offset: 0x28
50-
Symbol: e
54+
- Offset: 0x10
55+
Symbol: s5
5156
Type: R_AMDGPU_REL64
52-
- Offset: 0x30
53-
Symbol: f
57+
- Offset: 0x12
58+
Symbol: s6
5459
Type: R_AMDGPU_ABS32
60+
- Offset: 0x14
61+
Symbol: s7
62+
Type: R_AMDGPU_GOTPCREL
63+
- Offset: 0x16
64+
Symbol: s8
65+
Type: R_AMDGPU_GOTPCREL32_LO
66+
- Offset: 0x18
67+
Symbol: s9
68+
Type: R_AMDGPU_GOTPCREL32_HI
69+
- Offset: 0x20
70+
Symbol: s10
71+
Type: R_AMDGPU_REL32_LO
72+
- Offset: 0x22
73+
Symbol: s11
74+
Type: R_AMDGPU_REL32_HI
5575

5676
Symbols:
5777
Local:

0 commit comments

Comments
 (0)
Please sign in to comment.