diff options
Diffstat (limited to '')
-rw-r--r-- | go-patches/0010-runtime-allow-for-usleep2HighRes-to-run-without-TLS-.patch | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/go-patches/0010-runtime-allow-for-usleep2HighRes-to-run-without-TLS-.patch b/go-patches/0010-runtime-allow-for-usleep2HighRes-to-run-without-TLS-.patch new file mode 100644 index 00000000..582f585c --- /dev/null +++ b/go-patches/0010-runtime-allow-for-usleep2HighRes-to-run-without-TLS-.patch @@ -0,0 +1,91 @@ +From 1edac4879e2d4a36d339353c151cb7b9871e135f Mon Sep 17 00:00:00 2001 +From: Alex Brainman <alex.brainman@gmail.com> +Date: Sat, 21 Nov 2020 14:56:26 +1100 +Subject: [PATCH 10/10] runtime: allow for usleep2HighRes to run without TLS + setup +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 +--- + src/runtime/sys_windows_386.s | 11 ++++++++++- + src/runtime/sys_windows_amd64.s | 11 ++++++++++- + 2 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/src/runtime/sys_windows_386.s b/src/runtime/sys_windows_386.s +index 4ac1527ab1..310c4008e5 100644 +--- a/src/runtime/sys_windows_386.s ++++ b/src/runtime/sys_windows_386.s +@@ -430,12 +430,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 +@@ -464,6 +467,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 +diff --git a/src/runtime/sys_windows_amd64.s b/src/runtime/sys_windows_amd64.s +index 847542592b..699a6e6ff2 100644 +--- a/src/runtime/sys_windows_amd64.s ++++ b/src/runtime/sys_windows_amd64.s +@@ -459,11 +459,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 +@@ -489,6 +492,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 +-- +2.29.2 + |