mirror of
https://github.com/golang/go
synced 2024-11-26 01:57:56 -07:00
runtime: allow for usleep2HighRes to run without TLS setup
This change adjusts usleep2HighRes so it does not crash when TLS is not configured. When g is not available, usleep2HighRes just calls usleep2 instead. Updates #8687 Change-Id: Idbb80f7b71d1da350a6a7df7c49154eb1ffe29a8 Reviewed-on: https://go-review.googlesource.com/c/go/+/271907 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Simon Rozman <simon@rozman.si> Trust: Jason A. Donenfeld <Jason@zx2c4.com> Trust: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
7dc5d909fb
commit
6965b01ea2
@ -415,12 +415,15 @@ TEXT runtime·usleep2(SB),NOSPLIT,$20
|
||||
|
||||
// Runs on OS stack. duration (in 100ns units) is in BX.
|
||||
TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
|
||||
get_tls(CX)
|
||||
CMPL CX, $0
|
||||
JE gisnotset
|
||||
|
||||
// Want negative 100ns units.
|
||||
NEGL BX
|
||||
MOVL $-1, hi-4(SP)
|
||||
MOVL BX, lo-8(SP)
|
||||
|
||||
get_tls(CX)
|
||||
MOVL g(CX), CX
|
||||
MOVL g_m(CX), CX
|
||||
MOVL (m_mOS+mOS_highResTimer)(CX), CX
|
||||
@ -449,6 +452,12 @@ TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
|
||||
|
||||
RET
|
||||
|
||||
gisnotset:
|
||||
// TLS is not configured. Call usleep2 instead.
|
||||
MOVL $runtime·usleep2(SB), AX
|
||||
CALL AX
|
||||
RET
|
||||
|
||||
// Runs on OS stack.
|
||||
TEXT runtime·switchtothread(SB),NOSPLIT,$0
|
||||
MOVL SP, BP
|
||||
|
@ -454,11 +454,14 @@ TEXT runtime·usleep2(SB),NOSPLIT|NOFRAME,$48
|
||||
|
||||
// Runs on OS stack. duration (in 100ns units) is in BX.
|
||||
TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
|
||||
get_tls(CX)
|
||||
CMPQ CX, $0
|
||||
JE gisnotset
|
||||
|
||||
MOVQ SP, AX
|
||||
ANDQ $~15, SP // alignment as per Windows requirement
|
||||
MOVQ AX, 64(SP)
|
||||
|
||||
get_tls(CX)
|
||||
MOVQ g(CX), CX
|
||||
MOVQ g_m(CX), CX
|
||||
MOVQ (m_mOS+mOS_highResTimer)(CX), CX // hTimer
|
||||
@ -484,6 +487,12 @@ TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
|
||||
MOVQ 64(SP), SP
|
||||
RET
|
||||
|
||||
gisnotset:
|
||||
// TLS is not configured. Call usleep2 instead.
|
||||
MOVQ $runtime·usleep2(SB), AX
|
||||
CALL AX
|
||||
RET
|
||||
|
||||
// Runs on OS stack.
|
||||
TEXT runtime·switchtothread(SB),NOSPLIT|NOFRAME,$0
|
||||
MOVQ SP, AX
|
||||
|
Loading…
Reference in New Issue
Block a user