func lwp_create(ctxt unsafe.Pointer, flags uintptr, lwpid unsafe.Pointer) int32
//go:noescape
-func lwp_park(abstime *timespec, unpark int32, hint, unparkhint unsafe.Pointer) int32
+func lwp_park(clockid, flags int32, ts *timespec, unpark int32, hint, unparkhint unsafe.Pointer) int32
//go:noescape
func lwp_unpark(lwp int32, hint unsafe.Pointer) int32
_CLOCK_VIRTUAL = 1
_CLOCK_PROF = 2
_CLOCK_MONOTONIC = 3
+
+ _TIMER_RELTIME = 0
+ _TIMER_ABSTIME = 1
)
var sigset_all = sigset{[4]uint32{^uint32(0), ^uint32(0), ^uint32(0), ^uint32(0)}}
if ns >= 0 {
var ts timespec
var nsec int32
- ns += nanotime()
ts.set_sec(timediv(ns, 1000000000, &nsec))
ts.set_nsec(nsec)
tsp = &ts
}
// Sleep until unparked by semawakeup or timeout.
- ret := lwp_park(tsp, 0, unsafe.Pointer(&_g_.m.waitsemacount), nil)
+ ret := lwp_park(_CLOCK_MONOTONIC, _TIMER_RELTIME, tsp, 0, unsafe.Pointer(&_g_.m.waitsemacount), nil)
if ret == _ETIMEDOUT {
return -1
}
RET
TEXT runtime·lwp_park(SB),NOSPLIT,$-4
- MOVL $434, AX // sys__lwp_park
+ MOVL $478, AX // sys__lwp_park
INT $0x80
- MOVL AX, ret+16(FP)
+ MOVL AX, ret+24(FP)
RET
TEXT runtime·lwp_unpark(SB),NOSPLIT,$-4
RET
TEXT runtime·lwp_park(SB),NOSPLIT,$0
- MOVQ abstime+0(FP), DI // arg 1 - abstime
- MOVL unpark+8(FP), SI // arg 2 - unpark
- MOVQ hint+16(FP), DX // arg 3 - hint
- MOVQ unparkhint+24(FP), R10 // arg 4 - unparkhint
- MOVL $434, AX // sys__lwp_park
- SYSCALL
- MOVL AX, ret+32(FP)
+ MOVL clockid+0(FP), DI // arg 1 - clockid
+ MOVL flags+4(FP), SI // arg 2 - flags
+ MOVQ ts+8(FP), DX // arg 3 - ts
+ MOVL unpark+16(FP), R10 // arg 4 - unpark
+ MOVQ hint+24(FP), R8 // arg 5 - hint
+ MOVQ unparkhint+32(FP), R9 // arg 6 - unparkhint
+ MOVL $478, AX // sys__lwp_park
+ SYSCALL
+ MOVL AX, ret+40(FP)
RET
TEXT runtime·lwp_unpark(SB),NOSPLIT,$0
SWI $0xa0015e // sys_sched_yield
RET
-TEXT runtime·lwp_park(SB),NOSPLIT,$0
- MOVW abstime+0(FP), R0 // arg 1 - abstime
- MOVW unpark+4(FP), R1 // arg 2 - unpark
- MOVW hint+8(FP), R2 // arg 3 - hint
- MOVW unparkhint+12(FP), R3 // arg 4 - unparkhint
- SWI $0xa001b2 // sys__lwp_park
- MOVW R0, ret+16(FP)
+TEXT runtime·lwp_park(SB),NOSPLIT,$8
+ MOVW clockid+0(FP), R0 // arg 1 - clock_id
+ MOVW flags+4(FP), R1 // arg 2 - flags
+ MOVW ts+8(FP), R2 // arg 3 - ts
+ MOVW unpark+12(FP), R3 // arg 4 - unpark
+ MOVW hint+16(FP), R4 // arg 5 - hint
+ MOVW R4, 4(R13)
+ MOVW unparkhint+20(FP), R5 // arg 6 - unparkhint
+ MOVW R5, 8(R13)
+ SWI $0xa001de // sys__lwp_park
+ MOVW R0, ret+24(FP)
RET
TEXT runtime·lwp_unpark(SB),NOSPLIT,$0
// int64 nanotime(void) so really
// void nanotime(int64 *nsec)
TEXT runtime·nanotime(SB), NOSPLIT, $32
- MOVW $0, R0 // CLOCK_REALTIME
+ MOVW $3, R0 // CLOCK_MONOTONIC
MOVW $8(R13), R1
SWI $0xa001ab // clock_gettime