MOVL g_m(BX), BX
MOVL m_g0(BX), SI
CMPL g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackg0(SB)
INT $3
// Cannot grow signal stack.
MOVL m_gsignal(BX), SI
CMPL g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackgsignal(SB)
INT $3
// Called from f.
MOVQ g_m(BX), BX
MOVQ m_g0(BX), SI
CMPQ g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackg0(SB)
INT $3
// Cannot grow signal stack (m->gsignal).
MOVQ m_gsignal(BX), SI
CMPQ g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackgsignal(SB)
INT $3
// Called from f.
// Cannot grow scheduler stack (m->g0).
MOVL m_g0(BX), SI
CMPL g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackg0(SB)
MOVL 0, AX
// Cannot grow signal stack (m->gsignal).
MOVL m_gsignal(BX), SI
CMPL g(CX), SI
- JNE 2(PC)
+ JNE 3(PC)
+ CALL runtime·badmorestackgsignal(SB)
MOVL 0, AX
// Called from f.
MOVW g_m(g), R8
MOVW m_g0(R8), R4
CMP g, R4
- BL.EQ runtime·abort(SB)
+ BNE 3(PC)
+ BL runtime·badmorestackg0(SB)
+ B runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVW m_gsignal(R8), R4
CMP g, R4
- BL.EQ runtime·abort(SB)
+ BNE 3(PC)
+ BL runtime·badmorestackgsignal(SB)
+ B runtime·abort(SB)
// Called from f.
// Set g->sched to context in f.
MOVD g_m(g), R8
MOVD m_g0(R8), R4
CMP g, R4
- BNE 2(PC)
+ BNE 3(PC)
+ BL runtime·badmorestackg0(SB)
B runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVD m_gsignal(R8), R4
CMP g, R4
- BNE 2(PC)
+ BNE 3(PC)
+ BL runtime·badmorestackgsignal(SB)
B runtime·abort(SB)
// Called from f.
// Cannot grow scheduler stack (m->g0).
MOVV g_m(g), R7
MOVV m_g0(R7), R8
- BNE g, R8, 2(PC)
+ BNE g, R8, 3(PC)
+ JAL runtime·badmorestackg0(SB)
JAL runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVV m_gsignal(R7), R8
- BNE g, R8, 2(PC)
+ BNE g, R8, 3(PC)
+ JAL runtime·badmorestackgsignal(SB)
JAL runtime·abort(SB)
// Called from f.
MOVD g_m(g), R7
MOVD m_g0(R7), R8
CMP g, R8
- BNE 2(PC)
+ BNE 3(PC)
+ BL runtime·badmorestackg0(SB)
BL runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVD m_gsignal(R7), R8
CMP g, R8
- BNE 2(PC)
+ BNE 3(PC)
+ BL runtime·badmorestackgsignal(SB)
BL runtime·abort(SB)
// Called from f.
// Cannot grow scheduler stack (m->g0).
MOVD g_m(g), R7
MOVD m_g0(R7), R8
- CMPBNE g, R8, 2(PC)
+ CMPBNE g, R8, 3(PC)
+ BL runtime·badmorestackg0(SB)
BL runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVD m_gsignal(R7), R8
CMP g, R8
- BNE 2(PC)
+ BNE 3(PC)
+ BL runtime·badmorestackgsignal(SB)
BL runtime·abort(SB)
// Called from f.
panic(plainError("arg size to reflect.call more than 1GB"))
}
+var badmorestackg0Msg = "fatal: morestack on g0\n"
+
+//go:nosplit
+//go:nowritebarrierrec
+func badmorestackg0() {
+ sp := stringStructOf(&badmorestackg0Msg)
+ write(2, sp.str, int32(sp.len))
+}
+
+var badmorestackgsignalMsg = "fatal: morestack on gsignal\n"
+
+//go:nosplit
+//go:nowritebarrierrec
+func badmorestackgsignal() {
+ sp := stringStructOf(&badmorestackgsignalMsg)
+ write(2, sp.str, int32(sp.len))
+}
+
func lockedOSThread() bool {
gp := getg()
return gp.lockedm != nil && gp.m.lockedg != nil