aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqmuntal <quimmuntal@gmail.com>2022-07-21 12:18:51 +0200
committerCherry Mui <cherryyz@google.com>2022-07-25 20:35:06 +0000
commit9fcc8b2c1eeb2333751d80626e4204d304c8b3c6 (patch)
treeb1b026ccd3b91ede1463fbfbf55d07398424d5d5
parent795a88d0c383fae04242632449518a5985d50973 (diff)
downloadgo-9fcc8b2c1eeb2333751d80626e4204d304c8b3c6.tar.gz
go-9fcc8b2c1eeb2333751d80626e4204d304c8b3c6.zip
runtime: fix runtime.Breakpoint() on windows/arm64
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>
-rw-r--r--src/runtime/asm_arm64.s24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/runtime/asm_arm64.s b/src/runtime/asm_arm64.s
index f593b4a78b..7836ba1d96 100644
--- a/src/runtime/asm_arm64.s
+++ b/src/runtime/asm_arm64.s
@@ -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.