Skip to content

Commit c3a9c90

Browse files
authored
[BinaryFormat][LoongArch] Define psABI v2.20 relocs (#73345)
psABI v2.20 added R_LARCH_CALL36 and removed R_LARCH_DELETE / R_LARCH_CFA. R_LARCH_CALL36 was designed for function call on medium code model where the 2 instructions (pcaddu18i + jirl) must be adjacent.
1 parent 66784dc commit c3a9c90

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,20 @@ ELF_RELOC(R_LARCH_RELAX, 100)
109109
//
110110
// Spec addition: https://github.com/loongson/la-abi-specs/pull/1
111111
// Binutils commit 57a930e3bfe4b2c7fd6463ed39311e1938513138
112-
ELF_RELOC(R_LARCH_DELETE, 101)
112+
// Note that the 101 and 104 relocation numbers are defined as R_LARCH_DELETE
113+
// and R_LARCH_CFA respectively in psABI 2.10. But they are marked as reserved
114+
// in psABI v2.20 because they were proved not necessary to be exposed outside
115+
// of the linker.
113116
ELF_RELOC(R_LARCH_ALIGN, 102)
114117
ELF_RELOC(R_LARCH_PCREL20_S2, 103)
115-
ELF_RELOC(R_LARCH_CFA, 104)
116118
ELF_RELOC(R_LARCH_ADD6, 105)
117119
ELF_RELOC(R_LARCH_SUB6, 106)
118120
ELF_RELOC(R_LARCH_ADD_ULEB128, 107)
119121
ELF_RELOC(R_LARCH_SUB_ULEB128, 108)
120122
ELF_RELOC(R_LARCH_64_PCREL, 109)
123+
124+
// Relocs added in ELF for the LoongArch™ Architecture v20231102, part of the
125+
// v2.20 LoongArch ABI specs.
126+
//
127+
// Spec addition: https://github.com/loongson/la-abi-specs/pull/4
128+
ELF_RELOC(R_LARCH_CALL36, 110)

llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,14 @@
9393
# CHECK: Type: R_LARCH_TLS_GD_HI20 (98)
9494
# CHECK: Type: R_LARCH_32_PCREL (99)
9595
# CHECK: Type: R_LARCH_RELAX (100)
96-
# CHECK: Type: R_LARCH_DELETE (101)
9796
# CHECK: Type: R_LARCH_ALIGN (102)
9897
# CHECK: Type: R_LARCH_PCREL20_S2 (103)
99-
# CHECK: Type: R_LARCH_CFA (104)
10098
# CHECK: Type: R_LARCH_ADD6 (105)
10199
# CHECK: Type: R_LARCH_SUB6 (106)
102100
# CHECK: Type: R_LARCH_ADD_ULEB128 (107)
103101
# CHECK: Type: R_LARCH_SUB_ULEB128 (108)
104102
# CHECK: Type: R_LARCH_64_PCREL (109)
103+
# CHECK: Type: R_LARCH_CALL36 (110)
105104

106105
--- !ELF
107106
FileHeader:
@@ -202,12 +201,11 @@ Sections:
202201
- Type: R_LARCH_TLS_GD_HI20
203202
- Type: R_LARCH_32_PCREL
204203
- Type: R_LARCH_RELAX
205-
- Type: R_LARCH_DELETE
206204
- Type: R_LARCH_ALIGN
207205
- Type: R_LARCH_PCREL20_S2
208-
- Type: R_LARCH_CFA
209206
- Type: R_LARCH_ADD6
210207
- Type: R_LARCH_SUB6
211208
- Type: R_LARCH_ADD_ULEB128
212209
- Type: R_LARCH_SUB_ULEB128
213210
- Type: R_LARCH_64_PCREL
211+
- Type: R_LARCH_CALL36

llvm/unittests/Object/ELFTest.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,10 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
233233
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_32_PCREL));
234234
EXPECT_EQ("R_LARCH_RELAX",
235235
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_RELAX));
236-
EXPECT_EQ("R_LARCH_DELETE",
237-
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_DELETE));
238236
EXPECT_EQ("R_LARCH_ALIGN",
239237
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ALIGN));
240238
EXPECT_EQ("R_LARCH_PCREL20_S2",
241239
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCREL20_S2));
242-
EXPECT_EQ("R_LARCH_CFA",
243-
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CFA));
244240
EXPECT_EQ("R_LARCH_ADD6",
245241
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ADD6));
246242
EXPECT_EQ("R_LARCH_SUB6",
@@ -251,6 +247,8 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
251247
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_SUB_ULEB128));
252248
EXPECT_EQ("R_LARCH_64_PCREL",
253249
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_64_PCREL));
250+
EXPECT_EQ("R_LARCH_CALL36",
251+
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CALL36));
254252
}
255253

256254
TEST(ELFTest, getELFRelativeRelocationType) {

0 commit comments

Comments
 (0)