]> Cypherpunks repositories - gostls13.git/commitdiff
debug/elf: sync new loong64 relocation types up to LoongArch ELF psABI v20250521
authorWANG Xuerui <git@xen0n.name>
Sat, 13 Sep 2025 07:57:12 +0000 (15:57 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Tue, 18 Nov 2025 01:00:42 +0000 (17:00 -0800)
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>
api/next/75562.txt [new file with mode: 0644]
doc/next/6-stdlib/99-minor/debug/elf/75562.md [new file with mode: 0644]
src/debug/elf/elf.go
src/debug/elf/elf_test.go

diff --git a/api/next/75562.txt b/api/next/75562.txt
new file mode 100644 (file)
index 0000000..5e3fe6c
--- /dev/null
@@ -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
diff --git a/doc/next/6-stdlib/99-minor/debug/elf/75562.md b/doc/next/6-stdlib/99-minor/debug/elf/75562.md
new file mode 100644 (file)
index 0000000..306111d
--- /dev/null
@@ -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
index 58e37daed2c0817bfeeef50dacb44679aeab9c2e..557648ece9b03d24e324231341044c5a8e089a50 100644 (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) }
index 0350d530502b2e8919fa78fb17470c3dc8178348..256f850f967860b7a2834e9fac4e094edcd5066e 100644 (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"},