runtime: openbsd/arm fails when compiled with GOARM=5
When the arm architecture is compiled with GOARM=5, the linker rewrites TLS register loads from MRC with a call to runtime.read_tls_fallback - on OpenBSD post 6.9, this fails since runtime.read_tls_fallback is still a direct system call:
https://github.com/golang/go/blob/master/src/runtime/sys_openbsd_arm.s#L90
This code path is generally never hit, since the minimum ARM CPU supported by OpenBSD is v7 and hence GOARM=7 is the default.
We should either:
-
Revise
runtime.read_tls_fallbackto use a libc-based system call. -
Prevent
GOARM< 7 from being used on openbsd/arm and remove the fallback code entirely.
I think we only support GOARM=5 on Linux. On other OSes we only support GOARM=6 or 7.
I think it is okay to have a check with better error message (and remove fallback code). Thanks.
Change https://go.dev/cl/443276 mentions this issue: cmd/dist,internal/buildcfg,runtime: only allow GOARM=7 for openbsd/arm