From 83df4a590bbd259b82db37e0c6e721ddc267614b Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Mon, 1 Feb 2021 03:51:02 +1100 Subject: runtime: switch openbsd/arm locking to libc Switch openbsd/arm to locking via libc, rather than performing direct system calls. Update #36435 Change-Id: I190abb1aa544d2cb406fe412960ec106c9716f87 Reviewed-on: https://go-review.googlesource.com/c/go/+/315791 Trust: Joel Sing Reviewed-by: Cherry Mui --- src/runtime/os_openbsd_syscall1.go | 4 +-- src/runtime/sys_openbsd1.go | 4 +-- src/runtime/sys_openbsd_arm.s | 67 ++++++++++++++++++++------------------ 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/src/runtime/os_openbsd_syscall1.go b/src/runtime/os_openbsd_syscall1.go index ecae67aa2f..f8f666890a 100644 --- a/src/runtime/os_openbsd_syscall1.go +++ b/src/runtime/os_openbsd_syscall1.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build openbsd && !386 && !amd64 && !arm64 -// +build openbsd,!386,!amd64,!arm64 +//go:build openbsd && !386 && !amd64 && !arm && !arm64 +// +build openbsd,!386,!amd64,!arm,!arm64 package runtime diff --git a/src/runtime/sys_openbsd1.go b/src/runtime/sys_openbsd1.go index b007b6d3f5..1af48539fa 100644 --- a/src/runtime/sys_openbsd1.go +++ b/src/runtime/sys_openbsd1.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm64) -// +build openbsd,386 openbsd,amd64 openbsd,arm64 +//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm) || (openbsd && arm64) +// +build openbsd,386 openbsd,amd64 openbsd,arm openbsd,arm64 package runtime diff --git a/src/runtime/sys_openbsd_arm.s b/src/runtime/sys_openbsd_arm.s index 65d29415b0..1402402de3 100644 --- a/src/runtime/sys_openbsd_arm.s +++ b/src/runtime/sys_openbsd_arm.s @@ -104,7 +104,7 @@ TEXT runtime·pthread_attr_init_trampoline(SB),NOSPLIT,$0 MOVW R13, R9 BIC $0x7, R13 // align for ELF ABI MOVW 0(R0), R0 // arg 1 attr - BL libc_pthread_attr_init(SB) + CALL libc_pthread_attr_init(SB) MOVW R9, R13 RET @@ -112,7 +112,7 @@ TEXT runtime·pthread_attr_destroy_trampoline(SB),NOSPLIT,$0 MOVW R13, R9 BIC $0x7, R13 // align for ELF ABI MOVW 0(R0), R0 // arg 1 attr - BL libc_pthread_attr_destroy(SB) + CALL libc_pthread_attr_destroy(SB) MOVW R9, R13 RET @@ -121,7 +121,7 @@ TEXT runtime·pthread_attr_getstacksize_trampoline(SB),NOSPLIT,$0 BIC $0x7, R13 // align for ELF ABI MOVW 4(R0), R1 // arg 2 size MOVW 0(R0), R0 // arg 1 attr - BL libc_pthread_attr_getstacksize(SB) + CALL libc_pthread_attr_getstacksize(SB) MOVW R9, R13 RET @@ -130,7 +130,7 @@ TEXT runtime·pthread_attr_setdetachstate_trampoline(SB),NOSPLIT,$0 BIC $0x7, R13 // align for ELF ABI MOVW 4(R0), R1 // arg 2 state MOVW 0(R0), R0 // arg 1 attr - BL libc_pthread_attr_setdetachstate(SB) + CALL libc_pthread_attr_setdetachstate(SB) MOVW R9, R13 RET @@ -142,7 +142,37 @@ TEXT runtime·pthread_create_trampoline(SB),NOSPLIT,$0 MOVW 4(R0), R2 // arg 3 start MOVW 8(R0), R3 // arg 4 arg MOVW R13, R0 // arg 1 &threadid (discarded) - BL libc_pthread_create(SB) + CALL libc_pthread_create(SB) + MOVW R9, R13 + RET + +TEXT runtime·thrsleep_trampoline(SB),NOSPLIT,$0 + MOVW R13, R9 + SUB $16, R13 + BIC $0x7, R13 // align for ELF ABI + MOVW 4(R0), R1 // arg 2 - clock_id + MOVW 8(R0), R2 // arg 3 - abstime + MOVW 12(R0), R3 // arg 4 - lock + MOVW 16(R0), R4 // arg 5 - abort (on stack) + MOVW R4, 0(R13) + MOVW 0(R0), R0 // arg 1 - id + CALL libc_thrsleep(SB) + MOVW R9, R13 + RET + +TEXT runtime·thrwakeup_trampoline(SB),NOSPLIT,$0 + MOVW R13, R9 + BIC $0x7, R13 // align for ELF ABI + MOVW 4(R0), R1 // arg 2 - count + MOVW 0(R0), R0 // arg 1 - id + CALL libc_thrwakeup(SB) + MOVW R9, R13 + RET + +TEXT runtime·sched_yield_trampoline(SB),NOSPLIT,$0 + MOVW R13, R9 + BIC $0x7, R13 // align for ELF ABI + CALL libc_sched_yield(SB) MOVW R9, R13 RET @@ -377,33 +407,6 @@ TEXT runtime·sigaltstack(SB),NOSPLIT,$0 MOVW.CS R8, (R8) RET -TEXT runtime·osyield(SB),NOSPLIT,$0 - MOVW $298, R12 // sys_sched_yield - INVOKE_SYSCALL - RET - -TEXT runtime·thrsleep(SB),NOSPLIT,$4 - MOVW ident+0(FP), R0 // arg 1 - ident - MOVW clock_id+4(FP), R1 // arg 2 - clock_id - MOVW tsp+8(FP), R2 // arg 3 - tsp - MOVW lock+12(FP), R3 // arg 4 - lock - MOVW abort+16(FP), R4 // arg 5 - abort (on stack) - MOVW R4, 4(R13) - ADD $4, R13 - MOVW $94, R12 // sys___thrsleep - INVOKE_SYSCALL - SUB $4, R13 - MOVW R0, ret+20(FP) - RET - -TEXT runtime·thrwakeup(SB),NOSPLIT,$0 - MOVW ident+0(FP), R0 // arg 1 - ident - MOVW n+4(FP), R1 // arg 2 - n - MOVW $301, R12 // sys___thrwakeup - INVOKE_SYSCALL - MOVW R0, ret+8(FP) - RET - TEXT runtime·sysctl(SB),NOSPLIT,$8 MOVW mib+0(FP), R0 // arg 1 - mib MOVW miblen+4(FP), R1 // arg 2 - miblen -- cgit v1.2.3-54-g00ecf