go/src/testing
Cherry Mui c4772d30bf cmd/link: disallow pull-only linknames
As mentioned in CL 584598, linkname is a mechanism that, when
abused, can break API integrity and even safety of Go programs.
CL 584598 is a first step to restrict the use of linknames, by
implementing a blocklist. This CL takes a step further, tightening
up the restriction by allowing linkname references ("pull") only
when the definition side explicitly opts into it, by having a
linkname on the definition (possibly to itself). This way, it is at
least clear on the definition side that the symbol, despite being
unexported, is accessed outside of the package. Unexported symbols
without linkname can now be actually private. This is similar to
the symbol visibility rule used by gccgo for years (which defines
unexported non-linknamed symbols as C static symbols).

As there can be pull-only linknames in the wild that may be broken
by this change, we currently only enforce this rule for symbols
defined in the standard library. Push linknames are added in the
standard library to allow things build.

Linkname references to external (non-Go) symbols are still allowed,
as their visibility is controlled by the C symbol visibility rules
and enforced by the C (static or dynamic) linker.

Assembly symbols are treated similar to linknamed symbols.

This is controlled by -checklinkname linker flag, currently not
enabled by default. A follow-up CL will enable it by default.

Change-Id: I07344f5c7a02124dbbef0fbc8fec3b666a4b2b0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/585358
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
2024-05-15 19:57:43 +00:00
..
fstest testing/fstest: return structured errors in TestFS 2024-04-05 17:45:39 +00:00
internal/testdeps testing: add available godoc link 2023-11-08 17:55:47 +00:00
iotest testing: add available godoc link 2023-11-08 17:55:47 +00:00
quick testing: add available godoc link 2023-11-08 17:55:47 +00:00
slogtest testing: add available godoc link 2023-11-08 17:55:47 +00:00
allocs.go
allocs_test.go
benchmark.go testing: use QueryPerformanceCounter on Windows 2024-04-26 22:55:25 +00:00
benchmark_test.go testing: add an example showcasing B.RunParallel with B.ReportMetric 2022-10-07 17:49:17 +00:00
cover.go cmd/go,testing: re-implement testing.Coverage 2023-05-23 11:37:31 +00:00
example.go testing: enforce -skip in example tests 2023-07-21 21:37:46 +00:00
export_test.go testing: use QueryPerformanceCounter on Windows 2024-04-26 22:55:25 +00:00
flag_test.go all: use ^TestName$ regular pattern for invoking a single test 2023-09-05 23:35:29 +00:00
fuzz.go testing: use QueryPerformanceCounter on Windows 2024-04-26 22:55:25 +00:00
helper_test.go testing: use subprocesses in TestTBHelper and TestTBHelperParallel 2023-11-21 17:24:47 +00:00
helperfuncs_test.go testing: use subprocesses in TestTBHelper and TestTBHelperParallel 2023-11-21 17:24:47 +00:00
match.go all: use built-in clear to clear maps 2023-07-27 22:07:13 +00:00
match_test.go cmd/go, testing: add go test -skip flag 2022-09-16 14:48:54 +00:00
newcover.go cmd/link: disallow pull-only linknames 2024-05-15 19:57:43 +00:00
panic_test.go Revert "testing: simplify concurrency and cleanup logic" 2023-11-27 16:49:24 +00:00
run_example.go all: add wasip1 support 2023-04-11 20:56:32 +00:00
run_example_wasm.go all: add wasip1 support 2023-04-11 20:56:32 +00:00
sub_test.go testing: add regression tests for reentrant calls to T.Run 2023-12-01 21:27:08 +00:00
testing.go testing: improve the documentation around b.N 2024-05-02 18:41:57 +00:00
testing_other.go testing: use time.Since in highPrecisionTime 2024-04-27 19:42:36 +00:00
testing_test.go runtime: properly frame panic values in tracebacks 2024-05-08 19:10:41 +00:00
testing_windows.go testing: use QueryPerformanceCounter on Windows 2024-04-26 22:55:25 +00:00
testing_windows_test.go testing: use QueryPerformanceCounter on Windows 2024-04-26 22:55:25 +00:00