]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix spurious stack overflow detection
authorRuss Cox <rsc@golang.org>
Fri, 19 Feb 2021 10:22:35 +0000 (05:22 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 19 Feb 2021 15:30:52 +0000 (15:30 +0000)
The regabi builders are unhappy about badctxt calling throw
calling systemstack calling gosave_systemstack_switch calling
badctxt, all nosplit, repeating. This wouldn't actually happen
since after one systemstack we'd end up on the system stack
and the next one wouldn't call gosave_systemstack_switch at all.

The badctxt call itself is in a very unlikely assertion failure
inside gosave_systemstack_switch.
Keep the assertion check but call runtime.abort instead on failure,
breaking the detected (but not real) cycle.

Change-Id: Iaf5c0fc065783b8c1c6d0f62d848f023a0714b96
Reviewed-on: https://go-review.googlesource.com/c/go/+/294069
Trust: Russ Cox <rsc@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_arm.s
src/runtime/asm_arm64.s
src/runtime/asm_mips64x.s
src/runtime/asm_mipsx.s
src/runtime/asm_ppc64x.s
src/runtime/asm_riscv64.s
src/runtime/asm_s390x.s

index 5b0852f78043eb9c087b8dd2a3185ec10096f427..5cf6827c210554f72df57f875041bb51b1912664 100644 (file)
@@ -618,7 +618,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT,$0
        MOVL    (g_sched+gobuf_ctxt)(BX), AX
        TESTL   AX, AX
        JZ      2(PC)
-       CALL    runtime·badctxt(SB)
+       CALL    runtime·abort(SB)
        POPL    BX
        POPL    AX
        RET
index a68dc72ae5332a8bf3bf91d84004632b71e52ede..517c5a9d3ef91334b0c0b63bea1f7df506a44040 100644 (file)
@@ -677,7 +677,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT,$0
        MOVQ    (g_sched+gobuf_ctxt)(R14), R9
        TESTQ   R9, R9
        JZ      2(PC)
-       CALL    runtime·badctxt(SB)
+       CALL    runtime·abort(SB)
        RET
 
 // func asmcgocall_no_g(fn, arg unsafe.Pointer)
index f9535bb1bc1198aae4769deecf754ffc8cf3a801..9896ab4383fe173ebc343255dc3ed918e86ac2da 100644 (file)
@@ -536,7 +536,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        MOVW    (g_sched+gobuf_ctxt)(g), R11
        TST     R11, R11
        B.EQ    2(PC)
-       BL      runtime·badctxt(SB)
+       BL      runtime·abort(SB)
        RET
 
 // func asmcgocall_no_g(fn, arg unsafe.Pointer)
index 699fc99d589e06e1e173fced5a894d3d922ff07b..3709f1d95e728cae59c6c8034775dc2863543f84 100644 (file)
@@ -875,7 +875,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        // Assert ctxt is zero. See func save.
        MOVD    (g_sched+gobuf_ctxt)(g), R0
        CBZ     R0, 2(PC)
-       CALL    runtime·badctxt(SB)
+       CALL    runtime·abort(SB)
        RET
 
 // func asmcgocall_no_g(fn, arg unsafe.Pointer)
index c123e96a71add56c1561aebe214fecb884057d2a..cee4b528bb9534c2daaa64fe1d405f856955782c 100644 (file)
@@ -415,7 +415,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        // Assert ctxt is zero. See func save.
        MOVV    (g_sched+gobuf_ctxt)(g), R1
        BEQ     R1, 2(PC)
-       JAL     runtime·badctxt(SB)
+       JAL     runtime·abort(SB)
        RET
 
 // func asmcgocall_no_g(fn, arg unsafe.Pointer)
index 0c7d28dcf7da16ba82060aa50e4d99893ad04f2c..17fbc902c22306f1ac74d54b5f1a8b329aa9ca7c 100644 (file)
@@ -413,7 +413,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        // Assert ctxt is zero. See func save.
        MOVW    (g_sched+gobuf_ctxt)(g), R1
        BEQ     R1, 2(PC)
-       JAL     runtime·badctxt(SB)
+       JAL     runtime·abort(SB)
        RET
 
 // func asmcgocall(fn, arg unsafe.Pointer) int32
index 56e73742ea446fdc69bb3b29067868fdc00f40fe..65440484975d23392a2dfca832c109d69d32b726 100644 (file)
@@ -547,7 +547,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        MOVD    (g_sched+gobuf_ctxt)(g), R31
        CMP     R0, R31
        BEQ     2(PC)
-       BL      runtime·badctxt(SB)
+       BL      runtime·abort(SB)
        RET
 
 #ifdef GOOS_aix
index 30f2bd2e4a587438eb19e69dc401ee980e0c9584..d8d5252ed5bc8479051fb95d0dc77e99bc17a0bb 100644 (file)
@@ -310,7 +310,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        // Assert ctxt is zero. See func save.
        MOV     (g_sched+gobuf_ctxt)(g), X31
        BEQ     ZERO, X31, 2(PC)
-       CALL    runtime·badctxt(SB)
+       CALL    runtime·abort(SB)
        RET
 
 // func asmcgocall(fn, arg unsafe.Pointer) int32
index f9fb1a4c5522c75a672ff20ec26b71362227d090..4748e00aa81b243dbac90167a20e80114a4f77dc 100644 (file)
@@ -511,7 +511,7 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
        // Assert ctxt is zero. See func save.
        MOVD    (g_sched+gobuf_ctxt)(g), R1
        CMPBEQ  R1, $0, 2(PC)
-       BL      runtime·badctxt(SB)
+       BL      runtime·abort(SB)
        RET
 
 // func asmcgocall(fn, arg unsafe.Pointer) int32