debug/elf: sync new loong64 relocation types up to LoongArch ELF psABI v20250521

Add several new relocation types defined in newer versions of LoongArch
ELF psABI v20250521, part of the v2.40 spec bundle. The new relocations
are seeing increased adoption because distributions are moving to newer
GNU/LLVM toolchain versions, so Go's internal linker must be prepared to
handle some of them, especially R_LARCH_CALL36 because the ecosystem is
slowly migrating to the "medium" code model by default.

The constants R_LARCH_DELETE and R_LARCH_CFA were removed in LoongArch
ELF psABI v20231102 (spec bundle v2.20), but they are already part of
the public API, so they are retained for now for upholding the go1
compatibility guarantee.

Corresponding binutils implementation:

* R_LARCH_CALL36: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=dc5f359ed6a36d2c895d89c3e4886f3a2b6d9232
* TLSDESC: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=26265e7fdf19d461563388495b6799eb3719f80a
* TLS {LD,GD,DESC} relaxation: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=ae296cc45258b95223210263d1b91115e84beb56
* TLS LE relaxation: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=775dead218e12e3fb94481c7a99aa0238d6a9138

Updates #75562

See: https://github.com/loongson/la-abi-specs/blob/v2.40/laelf.adoc
See: https://github.com/loongson-community/discussions/issues/43
Change-Id: Ib023e0b6becc0862d27afc419d3eb84c737359db
Reviewed-on: https://go-review.googlesource.com/c/go/+/709716
Reviewed-by: Mark Freeman <markfreeman@google.com>
Reviewed-by: Meidan Li <limeidan@loongson.cn>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
This commit is contained in:
WANG Xuerui 2025-09-13 15:57:12 +08:00 committed by abner chenc
parent e1a12c781f
commit a087dea869
4 changed files with 81 additions and 0 deletions

38
api/next/75562.txt Normal file
View file

@ -0,0 +1,38 @@
pkg debug/elf, const R_LARCH_TLS_DESC32 = 13 #75562
pkg debug/elf, const R_LARCH_TLS_DESC32 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC64 = 14 #75562
pkg debug/elf, const R_LARCH_TLS_DESC64 R_LARCH #75562
pkg debug/elf, const R_LARCH_CALL36 = 110 #75562
pkg debug/elf, const R_LARCH_CALL36 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PC_HI20 = 111 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PC_HI20 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PC_LO12 = 112 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PC_LO12 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_PC_LO20 = 113 #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_PC_LO20 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_PC_HI12 = 114 #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_PC_HI12 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_HI20 = 115 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_HI20 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_LO12 = 116 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_LO12 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_LO20 = 117 #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_LO20 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_HI12 = 118 #75562
pkg debug/elf, const R_LARCH_TLS_DESC64_HI12 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_LD = 119 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_LD R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_CALL = 120 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_CALL R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_LE_HI20_R = 121 #75562
pkg debug/elf, const R_LARCH_TLS_LE_HI20_R R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_LE_ADD_R = 122 #75562
pkg debug/elf, const R_LARCH_TLS_LE_ADD_R R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_LE_LO12_R = 123 #75562
pkg debug/elf, const R_LARCH_TLS_LE_LO12_R R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_LD_PCREL20_S2 = 124 #75562
pkg debug/elf, const R_LARCH_TLS_LD_PCREL20_S2 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_GD_PCREL20_S2 = 125 #75562
pkg debug/elf, const R_LARCH_TLS_GD_PCREL20_S2 R_LARCH #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PCREL20_S2 = 126 #75562
pkg debug/elf, const R_LARCH_TLS_DESC_PCREL20_S2 R_LARCH #75562

View file

@ -0,0 +1,4 @@
Additional `R_LARCH_*` constants from [LoongArch ELF psABI v20250521][laelf-20250521]
(global version v2.40) are defined for use with LoongArch systems.
[laelf-20250521]: https://github.com/loongson/la-abi-specs/blob/v2.40/laelf.adoc

View file

@ -2305,6 +2305,8 @@ const (
R_LARCH_TLS_TPREL32 R_LARCH = 10
R_LARCH_TLS_TPREL64 R_LARCH = 11
R_LARCH_IRELATIVE R_LARCH = 12
R_LARCH_TLS_DESC32 R_LARCH = 13
R_LARCH_TLS_DESC64 R_LARCH = 14
R_LARCH_MARK_LA R_LARCH = 20
R_LARCH_MARK_PCREL R_LARCH = 21
R_LARCH_SOP_PUSH_PCREL R_LARCH = 22
@ -2390,6 +2392,23 @@ const (
R_LARCH_ADD_ULEB128 R_LARCH = 107
R_LARCH_SUB_ULEB128 R_LARCH = 108
R_LARCH_64_PCREL R_LARCH = 109
R_LARCH_CALL36 R_LARCH = 110
R_LARCH_TLS_DESC_PC_HI20 R_LARCH = 111
R_LARCH_TLS_DESC_PC_LO12 R_LARCH = 112
R_LARCH_TLS_DESC64_PC_LO20 R_LARCH = 113
R_LARCH_TLS_DESC64_PC_HI12 R_LARCH = 114
R_LARCH_TLS_DESC_HI20 R_LARCH = 115
R_LARCH_TLS_DESC_LO12 R_LARCH = 116
R_LARCH_TLS_DESC64_LO20 R_LARCH = 117
R_LARCH_TLS_DESC64_HI12 R_LARCH = 118
R_LARCH_TLS_DESC_LD R_LARCH = 119
R_LARCH_TLS_DESC_CALL R_LARCH = 120
R_LARCH_TLS_LE_HI20_R R_LARCH = 121
R_LARCH_TLS_LE_ADD_R R_LARCH = 122
R_LARCH_TLS_LE_LO12_R R_LARCH = 123
R_LARCH_TLS_LD_PCREL20_S2 R_LARCH = 124
R_LARCH_TLS_GD_PCREL20_S2 R_LARCH = 125
R_LARCH_TLS_DESC_PCREL20_S2 R_LARCH = 126
)
var rlarchStrings = []intName{
@ -2406,6 +2425,8 @@ var rlarchStrings = []intName{
{10, "R_LARCH_TLS_TPREL32"},
{11, "R_LARCH_TLS_TPREL64"},
{12, "R_LARCH_IRELATIVE"},
{13, "R_LARCH_TLS_DESC32"},
{14, "R_LARCH_TLS_DESC64"},
{20, "R_LARCH_MARK_LA"},
{21, "R_LARCH_MARK_PCREL"},
{22, "R_LARCH_SOP_PUSH_PCREL"},
@ -2491,6 +2512,23 @@ var rlarchStrings = []intName{
{107, "R_LARCH_ADD_ULEB128"},
{108, "R_LARCH_SUB_ULEB128"},
{109, "R_LARCH_64_PCREL"},
{110, "R_LARCH_CALL36"},
{111, "R_LARCH_TLS_DESC_PC_HI20"},
{112, "R_LARCH_TLS_DESC_PC_LO12"},
{113, "R_LARCH_TLS_DESC64_PC_LO20"},
{114, "R_LARCH_TLS_DESC64_PC_HI12"},
{115, "R_LARCH_TLS_DESC_HI20"},
{116, "R_LARCH_TLS_DESC_LO12"},
{117, "R_LARCH_TLS_DESC64_LO20"},
{118, "R_LARCH_TLS_DESC64_HI12"},
{119, "R_LARCH_TLS_DESC_LD"},
{120, "R_LARCH_TLS_DESC_CALL"},
{121, "R_LARCH_TLS_LE_HI20_R"},
{122, "R_LARCH_TLS_LE_ADD_R"},
{123, "R_LARCH_TLS_LE_LO12_R"},
{124, "R_LARCH_TLS_LD_PCREL20_S2"},
{125, "R_LARCH_TLS_GD_PCREL20_S2"},
{126, "R_LARCH_TLS_DESC_PCREL20_S2"},
}
func (i R_LARCH) String() string { return stringName(uint32(i), rlarchStrings, false) }

View file

@ -34,6 +34,7 @@ var nameTests = []nameTest{
{R_ALPHA_OP_PUSH, "R_ALPHA_OP_PUSH"},
{R_ARM_THM_ABS5, "R_ARM_THM_ABS5"},
{R_386_GOT32, "R_386_GOT32"},
{R_LARCH_CALL36, "R_LARCH_CALL36"},
{R_PPC_GOT16_HI, "R_PPC_GOT16_HI"},
{R_SPARC_GOT22, "R_SPARC_GOT22"},
{ET_LOOS + 5, "ET_LOOS+5"},