Skip to content

Commit

Permalink
runtime: fix runtime.Breakpoint() on windows/arm64
Browse files Browse the repository at this point in the history
Fixes #53837

Change-Id: I4219fe35aac1a88aae2905998fbb1d7db87bbfb2
Reviewed-on: https://go-review.googlesource.com/c/go/+/418734
Reviewed-by: Michael Pratt <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
Reviewed-by: Alessandro Arzilli <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Run-TryBot: Alessandro Arzilli <[email protected]>
  • Loading branch information
qmuntal authored and cherrymui committed Jul 25, 2022
1 parent 795a88d commit 9fcc8b2
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions src/runtime/asm_arm64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -1374,7 +1384,7 @@ good:
MOVD $20, R0
MOVD R0, 16(RSP) // length of debugCallFrameTooLarge string
MOVD $8, R20
BRK
BREAK
JMP restore

restore:
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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.
Expand Down

0 comments on commit 9fcc8b2

Please sign in to comment.