diff options
| author | WANG Xuerui <git@xen0n.name> | 2025-09-13 15:57:12 +0800 |
|---|---|---|
| committer | abner chenc <chenguoqi@loongson.cn> | 2025-11-17 17:00:42 -0800 |
| commit | a087dea8692eee879e8226b70eb691dea7758b0b (patch) | |
| tree | 3e1631dc457224ae7ba6a86016bd9b3a9eecbfba /src/debug/elf | |
| parent | e1a12c781f55da85a30fd63471f8adcba908acd2 (diff) | |
| download | go-a087dea8692eee879e8226b70eb691dea7758b0b.tar.xz | |
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>
Diffstat (limited to 'src/debug/elf')
| -rw-r--r-- | src/debug/elf/elf.go | 38 | ||||
| -rw-r--r-- | src/debug/elf/elf_test.go | 1 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/debug/elf/elf.go b/src/debug/elf/elf.go index 58e37daed2..557648ece9 100644 --- a/src/debug/elf/elf.go +++ b/src/debug/elf/elf.go @@ -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) } diff --git a/src/debug/elf/elf_test.go b/src/debug/elf/elf_test.go index 0350d53050..256f850f96 100644 --- a/src/debug/elf/elf_test.go +++ b/src/debug/elf/elf_test.go @@ -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"}, |
