]> Cypherpunks.ru repositories - gostls13.git/commit
[release-branch.go1.21] runtime/cgo: avoid taking the address of crosscall2 in code
authorCherry Mui <cherryyz@google.com>
Sat, 7 Oct 2023 00:53:27 +0000 (20:53 -0400)
committerCherry Mui <cherryyz@google.com>
Mon, 30 Oct 2023 20:36:26 +0000 (20:36 +0000)
commit7b04d81cbc2e45172c17e62943a777286a3341be
tree54de14373fcd4074b45ce84caa62c1587815c922
parentf9a31cda3c8a92e81989af4167c9ae5bfbb8ea5e
[release-branch.go1.21] runtime/cgo: avoid taking the address of crosscall2 in code

Currently, set_crosscall2 takes the address of crosscall2 without
using the GOT, which, on some architectures, results in a
PC-relative relocation (e.g. R_AARCH64_ADR_PREL_PG_HI21 on ARM64)
to the crosscall2 symbol. But crosscall2 is dynamically exported,
so the C linker thinks it may bind to a symbol from a different
DSO. Some C linker may not like a PC-relative relocation to such a
symbol. Using a local trampoline to avoid taking the address of a
dynamically exported symbol.

It may be possible to not dynamically export crosscall2. But this
CL is safer for backport. Later we may remove the trampolines
after unexport crosscall2, if they are not needed.

Fixes #63509.
Updates #62556.

Change-Id: Id28457f65ef121d3f87d8189803abc65ed453283
Reviewed-on: https://go-review.googlesource.com/c/go/+/533535
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
(cherry picked from commit 872d7181f4084461441787c70ffd1354314987af)
Reviewed-on: https://go-review.googlesource.com/c/go/+/534915
Reviewed-by: David Chase <drchase@google.com>
src/cmd/cgo/internal/testcarchive/carchive_test.go
src/runtime/cgo/asm_386.s
src/runtime/cgo/asm_amd64.s
src/runtime/cgo/asm_arm.s
src/runtime/cgo/asm_arm64.s
src/runtime/cgo/asm_loong64.s
src/runtime/cgo/asm_mips64x.s
src/runtime/cgo/asm_mipsx.s
src/runtime/cgo/asm_ppc64x.s
src/runtime/cgo/asm_riscv64.s
src/runtime/cgo/asm_s390x.s