]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix runtime.Breakpoint() on windows/arm64
authorqmuntal <quimmuntal@gmail.com>
Thu, 21 Jul 2022 10:18:51 +0000 (12:18 +0200)
committerCherry Mui <cherryyz@google.com>
Mon, 25 Jul 2022 20:35:06 +0000 (20:35 +0000)
Fixes #53837

Change-Id: I4219fe35aac1a88aae2905998fbb1d7db87bbfb2
Reviewed-on: https://go-review.googlesource.com/c/go/+/418734
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Alessandro Arzilli <alessandro.arzilli@gmail.com>

src/runtime/asm_arm64.s

index f593b4a78b9106336342b7970156b2daa5690c0d..7836ba1d96c01588a4aac93c23930d5587c2149a 100644 (file)
@@ -107,8 +107,18 @@ nocgo:
 DATA   runtime·mainPC+0(SB)/8,$runtime·main<ABIInternal>(SB)
 GLOBL  runtime·mainPC(SB),RODATA,$8
 
+// Windows ARM64 needs an immediate 0xf000 argument.
+// See go.dev/issues/53837.
+#define BREAK  \
+#ifdef GOOS_windows    \
+       BRK     $0xf000         \
+#else                          \
+       BRK                     \
+#endif                                 \
+
+
 TEXT runtime·breakpoint(SB),NOSPLIT|NOFRAME,$0-0
-       BRK
+       BREAK
        RET
 
 TEXT runtime·asminit(SB),NOSPLIT|NOFRAME,$0-0
@@ -1325,7 +1335,7 @@ TEXT runtime·debugCallV2<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-0
        // Set R20 to 8 and invoke BRK. The debugger should get the
        // reason a call can't be injected from SP+8 and resume execution.
        MOVD    $8, R20
-       BRK
+       BREAK
        JMP     restore
 
 good:
@@ -1374,7 +1384,7 @@ good:
        MOVD    $20, R0
        MOVD    R0, 16(RSP) // length of debugCallFrameTooLarge string
        MOVD    $8, R20
-       BRK
+       BREAK
        JMP     restore
 
 restore:
@@ -1383,7 +1393,7 @@ restore:
        // Set R20 to 16 and invoke BRK. The debugger should restore
        // all registers except for PC and RSP and resume execution.
        MOVD    $16, R20
-       BRK
+       BREAK
        // We must not modify flags after this point.
 
        // Restore pointer-containing registers, which may have been
@@ -1414,9 +1424,9 @@ restore:
 TEXT NAME(SB),WRAPPER,$MAXSIZE-0;              \
        NO_LOCAL_POINTERS;              \
        MOVD    $0, R20;                \
-       BRK;            \
+       BREAK;          \
        MOVD    $1, R20;                \
-       BRK;            \
+       BREAK;          \
        RET
 DEBUG_CALL_FN(debugCall32<>, 32)
 DEBUG_CALL_FN(debugCall64<>, 64)
@@ -1439,7 +1449,7 @@ TEXT runtime·debugCallPanicked(SB),NOSPLIT,$16-16
        MOVD    val_data+8(FP), R0
        MOVD    R0, 16(RSP)
        MOVD    $2, R20
-       BRK
+       BREAK
        RET
 
 // Note: these functions use a special calling convention to save generated code space.