Skip to content

Commit 39d3c4a

Browse files
abner-chenccherrymui
authored andcommitted
debug/elf,cmd/link: add additional relocations for loong64
The Linker Relaxation feature on Loong64 is already supported in binutils 2.41. The intermediate code generated after enabling this feature introduces three reloc types R_LARCH_B26, R_LARCH_ADD32 and R_LARCH_SUB32. The other relocation types are not currently used when running all.bash, but in order to avoid the host tool chain making the decision to use it we don't have to catch it every time. The LoongArch ABI at here: https://github.com/loongson/la-abi-specs/blob/release/la-abi.adoc Corresponding binutils implementation: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=be1ebb6710a8f707bd4b0eecbd00f4f4964050e5 https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=1b6fccd28db14fffe75ff6755307047ef932c81e Fixes #63725 Change-Id: I891115cfdbcf785ab494c881d5f9d1bf8748da8b Reviewed-on: https://go-review.googlesource.com/c/go/+/537615 Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: David Chase <[email protected]> Reviewed-by: Meidan Li <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 925a4d9 commit 39d3c4a

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

api/next/63725.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
pkg debug/elf, const R_LARCH_64_PCREL = 109 #63725
2+
pkg debug/elf, const R_LARCH_64_PCREL R_LARCH #63725
3+
pkg debug/elf, const R_LARCH_ADD6 = 105 #63725
4+
pkg debug/elf, const R_LARCH_ADD6 R_LARCH #63725
5+
pkg debug/elf, const R_LARCH_ADD_ULEB128 = 107 #63725
6+
pkg debug/elf, const R_LARCH_ADD_ULEB128 R_LARCH #63725
7+
pkg debug/elf, const R_LARCH_ALIGN = 102 #63725
8+
pkg debug/elf, const R_LARCH_ALIGN R_LARCH #63725
9+
pkg debug/elf, const R_LARCH_CFA = 104 #63725
10+
pkg debug/elf, const R_LARCH_CFA R_LARCH #63725
11+
pkg debug/elf, const R_LARCH_DELETE = 101 #63725
12+
pkg debug/elf, const R_LARCH_DELETE R_LARCH #63725
13+
pkg debug/elf, const R_LARCH_PCREL20_S2 = 103 #63725
14+
pkg debug/elf, const R_LARCH_PCREL20_S2 R_LARCH #63725
15+
pkg debug/elf, const R_LARCH_SUB6 = 106 #63725
16+
pkg debug/elf, const R_LARCH_SUB6 R_LARCH #63725
17+
pkg debug/elf, const R_LARCH_SUB_ULEB128 = 108 #63725
18+
pkg debug/elf, const R_LARCH_SUB_ULEB128 R_LARCH #63725

src/cmd/link/internal/loadelf/ldelf.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,16 +1022,32 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) {
10221022
MIPS64 | uint32(elf.R_MIPS_PC32)<<16:
10231023
return 4, 4, nil
10241024

1025+
case LOONG64 | uint32(elf.R_LARCH_ADD8)<<16,
1026+
LOONG64 | uint32(elf.R_LARCH_SUB8)<<16:
1027+
return 1, 1, nil
1028+
1029+
case LOONG64 | uint32(elf.R_LARCH_ADD16)<<16,
1030+
LOONG64 | uint32(elf.R_LARCH_SUB16)<<16:
1031+
return 2, 2, nil
1032+
10251033
case LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_PCREL)<<16,
10261034
LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_GPREL)<<16,
10271035
LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_ABSOLUTE)<<16,
10281036
LOONG64 | uint32(elf.R_LARCH_MARK_LA)<<16,
10291037
LOONG64 | uint32(elf.R_LARCH_SOP_POP_32_S_0_10_10_16_S2)<<16,
10301038
LOONG64 | uint32(elf.R_LARCH_MARK_PCREL)<<16,
1039+
LOONG64 | uint32(elf.R_LARCH_ADD24)<<16,
1040+
LOONG64 | uint32(elf.R_LARCH_ADD32)<<16,
1041+
LOONG64 | uint32(elf.R_LARCH_SUB24)<<16,
1042+
LOONG64 | uint32(elf.R_LARCH_SUB32)<<16,
1043+
LOONG64 | uint32(elf.R_LARCH_B26)<<16,
10311044
LOONG64 | uint32(elf.R_LARCH_32_PCREL)<<16:
10321045
return 4, 4, nil
10331046

1034-
case LOONG64 | uint32(elf.R_LARCH_64)<<16:
1047+
case LOONG64 | uint32(elf.R_LARCH_64)<<16,
1048+
LOONG64 | uint32(elf.R_LARCH_ADD64)<<16,
1049+
LOONG64 | uint32(elf.R_LARCH_SUB64)<<16,
1050+
LOONG64 | uint32(elf.R_LARCH_64_PCREL)<<16:
10351051
return 8, 8, nil
10361052

10371053
case S390X | uint32(elf.R_390_8)<<16:

src/debug/elf/elf.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2368,6 +2368,15 @@ const (
23682368
R_LARCH_TLS_GD_HI20 R_LARCH = 98
23692369
R_LARCH_32_PCREL R_LARCH = 99
23702370
R_LARCH_RELAX R_LARCH = 100
2371+
R_LARCH_DELETE R_LARCH = 101
2372+
R_LARCH_ALIGN R_LARCH = 102
2373+
R_LARCH_PCREL20_S2 R_LARCH = 103
2374+
R_LARCH_CFA R_LARCH = 104
2375+
R_LARCH_ADD6 R_LARCH = 105
2376+
R_LARCH_SUB6 R_LARCH = 106
2377+
R_LARCH_ADD_ULEB128 R_LARCH = 107
2378+
R_LARCH_SUB_ULEB128 R_LARCH = 108
2379+
R_LARCH_64_PCREL R_LARCH = 109
23712380
)
23722381

23732382
var rlarchStrings = []intName{
@@ -2460,6 +2469,15 @@ var rlarchStrings = []intName{
24602469
{98, "R_LARCH_TLS_GD_HI20"},
24612470
{99, "R_LARCH_32_PCREL"},
24622471
{100, "R_LARCH_RELAX"},
2472+
{101, "R_LARCH_DELETE"},
2473+
{102, "R_LARCH_ALIGN"},
2474+
{103, "R_LARCH_PCREL20_S2"},
2475+
{104, "R_LARCH_CFA"},
2476+
{105, "R_LARCH_ADD6"},
2477+
{106, "R_LARCH_SUB6"},
2478+
{107, "R_LARCH_ADD_ULEB128"},
2479+
{108, "R_LARCH_SUB_ULEB128"},
2480+
{109, "R_LARCH_64_PCREL"},
24632481
}
24642482

24652483
func (i R_LARCH) String() string { return stringName(uint32(i), rlarchStrings, false) }

0 commit comments

Comments
 (0)