]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: allow for usleep2HighRes to run without TLS setup
authorAlex Brainman <alex.brainman@gmail.com>
Sat, 21 Nov 2020 03:56:26 +0000 (14:56 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 24 Nov 2020 07:07:06 +0000 (07:07 +0000)
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>

src/runtime/sys_windows_386.s
src/runtime/sys_windows_amd64.s

index 2e5e82879c8c9b28a4d8178a8fbb083d10280c1f..ef8a3dd3c27d67a2358c2d8f931ea9326abb719b 100644 (file)
@@ -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
index e9ec99a51d3d1403e5b58ad2158df149d20064de..d1690cad587ba844094ab3bcfabad6406ebae0ea 100644 (file)
@@ -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