aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2025-11-25 13:54:18 -0500
committerCherry Mui <cherryyz@google.com>2026-04-01 11:00:13 -0700
commit46755cb4dea406093296ead4250ff5f7091c04a2 (patch)
tree4558617545a2c0b2dc924d2f95c15655ccb74ee3 /src/runtime
parent8ea160279ff6700282f254d6b74fb02f8a316abe (diff)
downloadgo-46755cb4dea406093296ead4250ff5f7091c04a2.tar.xz
cmd/compile, cmd/link: add linknamestd directive for std-only linknames
In the standard library, there are a number of linknames, for sharing symbols within the standard library. They are not supposed to be accessed externally. But currently there is no good mechanism to prevent that. In the linker we have a blocklist of linknames, which forbids linkname references other than explicitly allowed packages. The blocklist is manually maintained, requiring periodic manual update. To move away from that manually maintained blocklist, this CL introduces a new directive, linknamestd, that marks a linkname for use within the standard library only. The linker will allow references within the standard library and forbid others. For a proof of concept, runtime.coroswitch is removed from the blocklist, and replaced with linknamestd. An external reference to it is still disallowed by the linker, as tested with cmd/link.TestCheckLinkname with testdata/linkname/coro.go. Change-Id: I0d0f8746b8835d8cdcfc3ff835d22a551da5f038 Reviewed-on: https://go-review.googlesource.com/c/go/+/749942 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/coro.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/runtime/coro.go b/src/runtime/coro.go
index 40d4e47fbe..72c58b7964 100644
--- a/src/runtime/coro.go
+++ b/src/runtime/coro.go
@@ -84,7 +84,7 @@ func coroexit(c *coro) {
mcall(coroswitch_m)
}
-//go:linkname coroswitch
+//go:linknamestd coroswitch
// coroswitch switches to the goroutine blocked on c
// and then blocks the current goroutine on c.