]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: call abort instead of raw INT $3 or bad MOV
authorAustin Clements <austin@google.com>
Wed, 17 Jan 2018 20:51:09 +0000 (15:51 -0500)
committerAustin Clements <austin@google.com>
Thu, 8 Mar 2018 22:55:54 +0000 (22:55 +0000)
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>
src/cmd/vet/all/whitelist/386.txt
src/cmd/vet/all/whitelist/amd64.txt
src/cmd/vet/all/whitelist/nacl_amd64p32.txt
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_amd64p32.s

index 76e82317edc6201dfc1b9d9a169f9709f95da365..100ec974fb8ce0dd0dabeac4988847e0232ccd2c 100644 (file)
@@ -24,3 +24,5 @@ runtime/asm_386.s: [386] uint32tofloat64: function uint32tofloat64 missing Go de
 runtime/asm_386.s: [386] float64touint32: function float64touint32 missing Go declaration
 
 runtime/asm_386.s: [386] stackcheck: function stackcheck missing Go declaration
+
+runtime/asm_ARCHSUFF.s: [GOARCH] abort: function abort missing Go declaration
index 2268b3935392055fd9163c557d9f09d53e175447..0b61bcaff3c59f574a2d01611bc8c5109cd5773e 100644 (file)
@@ -21,3 +21,4 @@ runtime/asm_amd64.s: [amd64] addmoduledata: function addmoduledata missing Go de
 runtime/duff_amd64.s: [amd64] duffzero: function duffzero missing Go declaration
 runtime/duff_amd64.s: [amd64] duffcopy: function duffcopy missing Go declaration
 runtime/asm_amd64.s: [amd64] stackcheck: function stackcheck missing Go declaration
+runtime/asm_ARCHSUFF.s: [GOARCH] abort: function abort missing Go declaration
index 9280c68d2ca87f1113bbfa13feba329cd41a3627..021a01ace75a19e230d419b88ec3381fe9482c18 100644 (file)
@@ -26,3 +26,5 @@ runtime/asm_amd64p32.s: [amd64p32] rt0_go: unknown variable argv
 runtime/asm_amd64p32.s: [amd64p32] asmcgocall: RET without writing to 4-byte ret+8(FP)
 
 runtime/asm_amd64p32.s: [amd64p32] stackcheck: function stackcheck missing Go declaration
+
+runtime/asm_ARCHSUFF.s: [GOARCH] abort: function abort missing Go declaration
index 6cea84837432a729e84729e5f538f5594ced84c3..f565bb305db30f1ef38d3881e8ff181b3d785a79 100644 (file)
@@ -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
index 953f1181464336355476dd469c510298c1a57f21..16e9f5fe40cdb23bef493aead43e821ff2e0e472 100644 (file)
@@ -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
index 1fbc6c42188fe94367c5713298532886443db1d7..160dc556d465105e131eb9422f7b51df3862e3cf 100644 (file)
@@ -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)