]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] runtime: fix ABI targets in runtime.panic{Index,Slice} shims
authorThan McIntosh <thanm@google.com>
Mon, 14 Dec 2020 15:03:37 +0000 (10:03 -0500)
committerThan McIntosh <thanm@google.com>
Tue, 22 Dec 2020 14:50:50 +0000 (14:50 +0000)
Fix up the assembly shim routines runtime.panic{Index,Slice} and
friends so that their tail calls target ABIInternal and not ABI0
functions. This is so as to ensure that these calls don't go through
an ABI0->ABIInternal wrapper (which would throw off the machinery in
the called routines designed to detect whether the violation happened
in the runtime).

Note that when the compiler starts emitting real register calls to
these routines, we'll need to rewrite them to update the arg size and
ensure that args are in the correct registers. For example, the
current shim

TEXT runtime·panicIndex<ABIInternal>(SB),NOSPLIT,$0-16
MOVQ AX, x+0(FP)
MOVQ CX, y+8(FP)
JMP runtime·goPanicIndex<ABIInternal>(SB)

will need to change to

TEXT runtime·panicIndex<ABIInternal>(SB),NOSPLIT,$0
// AX already set up properly
MOVQ CX, BX // second argument expected in BX
JMP runtime·goPanicIndex<ABIInternal>(SB)

Change-Id: I48d1b5138fb4d229380ad12735cfaca5c50e6cc3
Reviewed-on: https://go-review.googlesource.com/c/go/+/278755
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Trust: Than McIntosh <thanm@google.com>

src/runtime/asm_amd64.s

index 196252e1dd993c8a7d18fd8e027fbd8df588eddc..53d1f8e358714e519d374dfd8a1374aa7dca996c 100644 (file)
@@ -1728,67 +1728,67 @@ TEXT runtime·debugCallPanicked(SB),NOSPLIT,$16-16
 TEXT runtime·panicIndex<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicIndex(SB)
+       JMP     runtime·goPanicIndex<ABIInternal>(SB)
 TEXT runtime·panicIndexU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicIndexU(SB)
+       JMP     runtime·goPanicIndexU<ABIInternal>(SB)
 TEXT runtime·panicSliceAlen<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSliceAlen(SB)
+       JMP     runtime·goPanicSliceAlen<ABIInternal>(SB)
 TEXT runtime·panicSliceAlenU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSliceAlenU(SB)
+       JMP     runtime·goPanicSliceAlenU<ABIInternal>(SB)
 TEXT runtime·panicSliceAcap<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSliceAcap(SB)
+       JMP     runtime·goPanicSliceAcap<ABIInternal>(SB)
 TEXT runtime·panicSliceAcapU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSliceAcapU(SB)
+       JMP     runtime·goPanicSliceAcapU<ABIInternal>(SB)
 TEXT runtime·panicSliceB<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicSliceB(SB)
+       JMP     runtime·goPanicSliceB<ABIInternal>(SB)
 TEXT runtime·panicSliceBU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicSliceBU(SB)
+       JMP     runtime·goPanicSliceBU<ABIInternal>(SB)
 TEXT runtime·panicSlice3Alen<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    DX, x+0(FP)
        MOVQ    BX, y+8(FP)
-       JMP     runtime·goPanicSlice3Alen(SB)
+       JMP     runtime·goPanicSlice3Alen<ABIInternal>(SB)
 TEXT runtime·panicSlice3AlenU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    DX, x+0(FP)
        MOVQ    BX, y+8(FP)
-       JMP     runtime·goPanicSlice3AlenU(SB)
+       JMP     runtime·goPanicSlice3AlenU<ABIInternal>(SB)
 TEXT runtime·panicSlice3Acap<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    DX, x+0(FP)
        MOVQ    BX, y+8(FP)
-       JMP     runtime·goPanicSlice3Acap(SB)
+       JMP     runtime·goPanicSlice3Acap<ABIInternal>(SB)
 TEXT runtime·panicSlice3AcapU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    DX, x+0(FP)
        MOVQ    BX, y+8(FP)
-       JMP     runtime·goPanicSlice3AcapU(SB)
+       JMP     runtime·goPanicSlice3AcapU<ABIInternal>(SB)
 TEXT runtime·panicSlice3B<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSlice3B(SB)
+       JMP     runtime·goPanicSlice3B<ABIInternal>(SB)
 TEXT runtime·panicSlice3BU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    CX, x+0(FP)
        MOVQ    DX, y+8(FP)
-       JMP     runtime·goPanicSlice3BU(SB)
+       JMP     runtime·goPanicSlice3BU<ABIInternal>(SB)
 TEXT runtime·panicSlice3C<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicSlice3C(SB)
+       JMP     runtime·goPanicSlice3C<ABIInternal>(SB)
 TEXT runtime·panicSlice3CU<ABIInternal>(SB),NOSPLIT,$0-16
        MOVQ    AX, x+0(FP)
        MOVQ    CX, y+8(FP)
-       JMP     runtime·goPanicSlice3CU(SB)
+       JMP     runtime·goPanicSlice3CU<ABIInternal>(SB)
 
 #ifdef GOOS_android
 // Use the free TLS_SLOT_APP slot #2 on Android Q.