From: Yao Zi Date: Fri, 9 May 2025 15:09:39 +0000 (+0000) Subject: cmd/link: ignore mapping symbols on riscv64 X-Git-Tag: go1.25rc1~291 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a2fbb50322e716f75e9c4707afd2de725a95e14b;p=gostls13.git cmd/link: ignore mapping symbols on riscv64 Specified in RISC-V ELF psABI[1], mapping symbols are symbols starting with "$d" or "$x" with STT_NOTYPE, STB_LOCAL and zero sizes, indicating boundaries between code and data in the same section. Let's simply ignore them as they're only markers instead of real symbols. This fixes linking errors like sym#63 ("$d"): ignoring symbol in section 4 (".riscv.attributes") (type 0) when using CGO together with Clang and internal linker, which are caused by unnecessary (but technically correct) mapping symbols created by LLVM for various sections. [1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/87aecf601722171c570120a46003be3c17ad3108/riscv-elf.adoc?plain=1#L1448 Fixes #73516 Change-Id: I02ca90c100ba8a38733fe3b8b8403836b44a3dd1 GitHub-Last-Rev: d7842ceafb840c511cf0c36295c353698898d399 GitHub-Pull-Request: golang/go#73592 Reviewed-on: https://go-review.googlesource.com/c/go/+/669675 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Meng Zhuo Reviewed-by: Michael Knyszek --- diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go index 9f251e746b..c91fed5088 100644 --- a/src/cmd/link/internal/loadelf/ldelf.go +++ b/src/cmd/link/internal/loadelf/ldelf.go @@ -602,6 +602,14 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, f *bio.Reader, // See https://sourceware.org/bugzilla/show_bug.cgi?id=21809 continue } + + if arch.Family == sys.RISCV64 && + (strings.HasPrefix(elfsym.name, "$d") || strings.HasPrefix(elfsym.name, "$x")) { + // Ignore RISC-V mapping symbols, which + // are similar to ARM64's case. + // See issue 73591. + continue + } } if strings.HasPrefix(elfsym.name, ".Linfo_string") {