aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2018-01-17 15:51:09 -0500
committerAustin Clements <austin@google.com>2018-03-08 22:55:54 +0000
commitc950a90d7240a6f2124ae38564c137b86866b191 (patch)
treed2a05d2c0be7fe5491b7827274f67f0d116b5ce9 /src/runtime
parent7f1b2738bb7a8863ee78d5357acbc820b7083821 (diff)
downloadgo-c950a90d7240a6f2124ae38564c137b86866b191.tar.xz
runtime: call abort instead of raw INT $3 or bad MOV
Everything except for amd64, amd64p32, and 386 currently defines and uses an abort function. This CL makes these match. The next CL will recognize the abort function to make this more useful. Change-Id: I7c155871ea48919a9220417df0630005b444f488 Reviewed-on: https://go-review.googlesource.com/93660 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/asm_386.s19
-rw-r--r--src/runtime/asm_amd64.s19
-rw-r--r--src/runtime/asm_amd64p32.s7
3 files changed, 30 insertions, 15 deletions
diff --git a/src/runtime/asm_386.s b/src/runtime/asm_386.s
index 6cea848374..f565bb305d 100644
--- a/src/runtime/asm_386.s
+++ b/src/runtime/asm_386.s
@@ -132,7 +132,7 @@ bad_proc: // show that the program requires MMX.
CALL runtime·write(SB)
MOVL $1, 0(SP)
CALL runtime·exit(SB)
- INT $3
+ CALL runtime·abort(SB)
has_cpuid:
MOVL $0, AX
@@ -306,7 +306,7 @@ ok:
// start this M
CALL runtime·mstart(SB)
- INT $3
+ CALL runtime·abort(SB)
RET
DATA bad_proc_msg<>+0x00(SB)/8, $"This pro"
@@ -500,14 +500,14 @@ TEXT runtime·morestack(SB),NOSPLIT,$0-0
CMPL g(CX), SI
JNE 3(PC)
CALL runtime·badmorestackg0(SB)
- INT $3
+ CALL runtime·abort(SB)
// Cannot grow signal stack.
MOVL m_gsignal(BX), SI
CMPL g(CX), SI
JNE 3(PC)
CALL runtime·badmorestackgsignal(SB)
- INT $3
+ CALL runtime·abort(SB)
// Called from f.
// Set m->morebuf to f's caller.
@@ -534,7 +534,7 @@ TEXT runtime·morestack(SB),NOSPLIT,$0-0
MOVL -4(AX), BX // fault if CALL would, before smashing SP
MOVL AX, SP
CALL runtime·newstack(SB)
- MOVL $0, 0x1003 // crash if newstack returns
+ CALL runtime·abort(SB) // crash if newstack returns
RET
TEXT runtime·morestack_noctxt(SB),NOSPLIT,$0-0
@@ -907,16 +907,21 @@ TEXT setg_gcc<>(SB), NOSPLIT, $0
MOVL DX, g(AX)
RET
+TEXT runtime·abort(SB),NOSPLIT,$0-0
+ INT $3
+loop:
+ JMP loop
+
// check that SP is in range [g->stack.lo, g->stack.hi)
TEXT runtime·stackcheck(SB), NOSPLIT, $0-0
get_tls(CX)
MOVL g(CX), AX
CMPL (g_stack+stack_hi)(AX), SP
JHI 2(PC)
- INT $3
+ CALL runtime·abort(SB)
CMPL SP, (g_stack+stack_lo)(AX)
JHI 2(PC)
- INT $3
+ CALL runtime·abort(SB)
RET
// func cputicks() int64
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s
index 953f118146..16e9f5fe40 100644
--- a/src/runtime/asm_amd64.s
+++ b/src/runtime/asm_amd64.s
@@ -227,7 +227,7 @@ needtls:
MOVQ runtime·m0+m_tls(SB), AX
CMPQ AX, $0x123
JEQ 2(PC)
- MOVL AX, 0 // abort
+ CALL runtime·abort(SB)
ok:
// set the per-goroutine and per-mach "registers"
get_tls(BX)
@@ -262,7 +262,7 @@ ok:
// start this M
CALL runtime·mstart(SB)
- MOVL $0xf1, 0xf1 // crash
+ CALL runtime·abort(SB) // mstart should never return
RET
DATA runtime·mainPC+0(SB)/8,$runtime·main(SB)
@@ -446,14 +446,14 @@ TEXT runtime·morestack(SB),NOSPLIT,$0-0
CMPQ g(CX), SI
JNE 3(PC)
CALL runtime·badmorestackg0(SB)
- INT $3
+ CALL runtime·abort(SB)
// Cannot grow signal stack (m->gsignal).
MOVQ m_gsignal(BX), SI
CMPQ g(CX), SI
JNE 3(PC)
CALL runtime·badmorestackgsignal(SB)
- INT $3
+ CALL runtime·abort(SB)
// Called from f.
// Set m->morebuf to f's caller.
@@ -479,7 +479,7 @@ TEXT runtime·morestack(SB),NOSPLIT,$0-0
MOVQ BX, g(CX)
MOVQ (g_sched+gobuf_sp)(BX), SP
CALL runtime·newstack(SB)
- MOVQ $0, 0x1003 // crash if newstack returns
+ CALL runtime·abort(SB) // crash if newstack returns
RET
// morestack but not preserving ctxt.
@@ -886,16 +886,21 @@ TEXT setg_gcc<>(SB),NOSPLIT,$0
MOVQ DI, g(AX)
RET
+TEXT runtime·abort(SB),NOSPLIT,$0-0
+ INT $3
+loop:
+ JMP loop
+
// check that SP is in range [g->stack.lo, g->stack.hi)
TEXT runtime·stackcheck(SB), NOSPLIT, $0-0
get_tls(CX)
MOVQ g(CX), AX
CMPQ (g_stack+stack_hi)(AX), SP
JHI 2(PC)
- INT $3
+ CALL runtime·abort(SB)
CMPQ SP, (g_stack+stack_lo)(AX)
JHI 2(PC)
- INT $3
+ CALL runtime·abort(SB)
RET
// func cputicks() int64
diff --git a/src/runtime/asm_amd64p32.s b/src/runtime/asm_amd64p32.s
index 1fbc6c4218..160dc556d4 100644
--- a/src/runtime/asm_amd64p32.s
+++ b/src/runtime/asm_amd64p32.s
@@ -124,7 +124,7 @@ needtls:
MOVQ runtime·m0+m_tls(SB), AX
CMPQ AX, $0x123
JEQ 2(PC)
- MOVL AX, 0 // abort
+ CALL runtime·abort(SB)
ok:
// set the per-goroutine and per-mach "registers"
get_tls(BX)
@@ -534,6 +534,11 @@ TEXT runtime·setg(SB), NOSPLIT, $0-4
MOVL 0, AX
RET
+TEXT runtime·abort(SB),NOSPLIT,$0-0
+ INT $3
+loop:
+ JMP loop
+
// check that SP is in range [g->stack.lo, g->stack.hi)
TEXT runtime·stackcheck(SB), NOSPLIT, $0-0
get_tls(CX)