mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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
2 changed files with 20 additions and 2 deletions
|
|
@ -415,12 +415,15 @@ TEXT runtime·usleep2(SB),NOSPLIT,$20
|
||||||
|
|
||||||
// Runs on OS stack. duration (in 100ns units) is in BX.
|
// Runs on OS stack. duration (in 100ns units) is in BX.
|
||||||
TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
|
TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
|
||||||
|
get_tls(CX)
|
||||||
|
CMPL CX, $0
|
||||||
|
JE gisnotset
|
||||||
|
|
||||||
// Want negative 100ns units.
|
// Want negative 100ns units.
|
||||||
NEGL BX
|
NEGL BX
|
||||||
MOVL $-1, hi-4(SP)
|
MOVL $-1, hi-4(SP)
|
||||||
MOVL BX, lo-8(SP)
|
MOVL BX, lo-8(SP)
|
||||||
|
|
||||||
get_tls(CX)
|
|
||||||
MOVL g(CX), CX
|
MOVL g(CX), CX
|
||||||
MOVL g_m(CX), CX
|
MOVL g_m(CX), CX
|
||||||
MOVL (m_mOS+mOS_highResTimer)(CX), CX
|
MOVL (m_mOS+mOS_highResTimer)(CX), CX
|
||||||
|
|
@ -449,6 +452,12 @@ TEXT runtime·usleep2HighRes(SB),NOSPLIT,$36
|
||||||
|
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
gisnotset:
|
||||||
|
// TLS is not configured. Call usleep2 instead.
|
||||||
|
MOVL $runtime·usleep2(SB), AX
|
||||||
|
CALL AX
|
||||||
|
RET
|
||||||
|
|
||||||
// Runs on OS stack.
|
// Runs on OS stack.
|
||||||
TEXT runtime·switchtothread(SB),NOSPLIT,$0
|
TEXT runtime·switchtothread(SB),NOSPLIT,$0
|
||||||
MOVL SP, BP
|
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.
|
// Runs on OS stack. duration (in 100ns units) is in BX.
|
||||||
TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
|
TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
|
||||||
|
get_tls(CX)
|
||||||
|
CMPQ CX, $0
|
||||||
|
JE gisnotset
|
||||||
|
|
||||||
MOVQ SP, AX
|
MOVQ SP, AX
|
||||||
ANDQ $~15, SP // alignment as per Windows requirement
|
ANDQ $~15, SP // alignment as per Windows requirement
|
||||||
MOVQ AX, 64(SP)
|
MOVQ AX, 64(SP)
|
||||||
|
|
||||||
get_tls(CX)
|
|
||||||
MOVQ g(CX), CX
|
MOVQ g(CX), CX
|
||||||
MOVQ g_m(CX), CX
|
MOVQ g_m(CX), CX
|
||||||
MOVQ (m_mOS+mOS_highResTimer)(CX), CX // hTimer
|
MOVQ (m_mOS+mOS_highResTimer)(CX), CX // hTimer
|
||||||
|
|
@ -484,6 +487,12 @@ TEXT runtime·usleep2HighRes(SB),NOSPLIT|NOFRAME,$72
|
||||||
MOVQ 64(SP), SP
|
MOVQ 64(SP), SP
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
gisnotset:
|
||||||
|
// TLS is not configured. Call usleep2 instead.
|
||||||
|
MOVQ $runtime·usleep2(SB), AX
|
||||||
|
CALL AX
|
||||||
|
RET
|
||||||
|
|
||||||
// Runs on OS stack.
|
// Runs on OS stack.
|
||||||
TEXT runtime·switchtothread(SB),NOSPLIT|NOFRAME,$0
|
TEXT runtime·switchtothread(SB),NOSPLIT|NOFRAME,$0
|
||||||
MOVQ SP, AX
|
MOVQ SP, AX
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue