diff options
author | qmuntal <quimmuntal@gmail.com> | 2022-07-21 12:18:51 +0200 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2022-07-25 20:35:06 +0000 |
commit | 9fcc8b2c1eeb2333751d80626e4204d304c8b3c6 (patch) | |
tree | b1b026ccd3b91ede1463fbfbf55d07398424d5d5 | |
parent | 795a88d0c383fae04242632449518a5985d50973 (diff) | |
download | go-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.s | 24 |
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. |