diff options
Diffstat (limited to '')
-rw-r--r-- | debian/patches/0002-cmd-link-internal-riscv64-generate-local-text-symbol.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/debian/patches/0002-cmd-link-internal-riscv64-generate-local-text-symbol.patch b/debian/patches/0002-cmd-link-internal-riscv64-generate-local-text-symbol.patch new file mode 100644 index 0000000..1797128 --- /dev/null +++ b/debian/patches/0002-cmd-link-internal-riscv64-generate-local-text-symbol.patch @@ -0,0 +1,43 @@ +From: Joel Sing <joel@sing.id.au> +Date: Tue, 27 Feb 2024 23:57:43 +1100 +Subject: cmd/link/internal/riscv64: generate local text symbols for + R_RISCV_CALL + +Correctly generate local text symbols needed for R_RISCV_CALL when +external linking. R_RISCV_CALL was added in CL #520095 as a way of +marking AUIPC+JALR pairs, instead of overloading R_RISCV_PCREL_ITYPE. +However, genSymsLate was not updated to generate local text symbols +for the new relocation type, leading to HI20 symbol lookup failures. + +This issue is detected by cmd/internal/obj/riscv.TestLargeCall, +however this is unfortunately skipped in short mode. + +Fixes #65646 + +Change-Id: I8ee0f13791e0628f31657bf7dae2be8482b689b5 +Reviewed-on: https://go-review.googlesource.com/c/go/+/567375 +Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com> +Reviewed-by: Carlos Amedee <carlos@golang.org> +Run-TryBot: Joel Sing <joel@sing.id.au> +Reviewed-by: Cherry Mui <cherryyz@google.com> +TryBot-Result: Gopher Robot <gobot@golang.org> +LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> +--- + src/cmd/link/internal/riscv64/asm.go | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/cmd/link/internal/riscv64/asm.go b/src/cmd/link/internal/riscv64/asm.go +index d95de6c..6a4dd01 100644 +--- a/src/cmd/link/internal/riscv64/asm.go ++++ b/src/cmd/link/internal/riscv64/asm.go +@@ -170,8 +170,8 @@ func genSymsLate(ctxt *ld.Link, ldr *loader.Loader) { + relocs := ldr.Relocs(s) + for ri := 0; ri < relocs.Count(); ri++ { + r := relocs.At(ri) +- if r.Type() != objabi.R_RISCV_PCREL_ITYPE && r.Type() != objabi.R_RISCV_PCREL_STYPE && +- r.Type() != objabi.R_RISCV_TLS_IE { ++ if r.Type() != objabi.R_RISCV_CALL && r.Type() != objabi.R_RISCV_PCREL_ITYPE && ++ r.Type() != objabi.R_RISCV_PCREL_STYPE && r.Type() != objabi.R_RISCV_TLS_IE { + continue + } + if r.Off() == 0 && ldr.SymType(s) == sym.STEXT { |