diff options
| author | qmuntal <quimmuntal@gmail.com> | 2022-12-23 13:22:00 +0100 |
|---|---|---|
| committer | Quim Muntal <quimmuntal@gmail.com> | 2023-01-24 19:29:51 +0000 |
| commit | 083d94f69c35b2244ea43738c1d28aa5d9e6d567 (patch) | |
| tree | cbcc4cf9b4eb2a6f7e351423c9e2bcb61135de37 /src/runtime/race_amd64.s | |
| parent | 27500d88f082d2789f90a644962684b4118c4d44 (diff) | |
| download | go-083d94f69c35b2244ea43738c1d28aa5d9e6d567.tar.xz | |
runtime: use explicit NOFRAME on windows/amd64
This CL marks non-leaf nosplit assembly functions as NOFRAME to avoid
relying on the implicit amd64 NOFRAME heuristic, where NOSPLIT functions
without stack were also marked as NOFRAME.
Updates #57302
Updates #40044
Change-Id: Ia4d26f8420dcf2b54528969ffbf40a73f1315d61
Reviewed-on: https://go-review.googlesource.com/c/go/+/459395
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/runtime/race_amd64.s')
| -rw-r--r-- | src/runtime/race_amd64.s | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/runtime/race_amd64.s b/src/runtime/race_amd64.s index c679a876b8..0697be7180 100644 --- a/src/runtime/race_amd64.s +++ b/src/runtime/race_amd64.s @@ -174,7 +174,7 @@ TEXT runtime·racefuncenter(SB), NOSPLIT, $0-8 // Common code for racefuncenter // R11 = caller's return address -TEXT racefuncenter<>(SB), NOSPLIT, $0-0 +TEXT racefuncenter<>(SB), NOSPLIT|NOFRAME, $0-0 MOVQ DX, BX // save function entry context (for closures) MOVQ g_racectx(R14), RARG0 // goroutine context MOVQ R11, RARG1 @@ -196,13 +196,13 @@ TEXT runtime·racefuncexit(SB), NOSPLIT, $0-0 // Atomic operations for sync/atomic package. // Load -TEXT sync∕atomic·LoadInt32(SB), NOSPLIT, $0-12 +TEXT sync∕atomic·LoadInt32(SB), NOSPLIT|NOFRAME, $0-12 GO_ARGS MOVQ $__tsan_go_atomic32_load(SB), AX CALL racecallatomic<>(SB) RET -TEXT sync∕atomic·LoadInt64(SB), NOSPLIT, $0-16 +TEXT sync∕atomic·LoadInt64(SB), NOSPLIT|NOFRAME, $0-16 GO_ARGS MOVQ $__tsan_go_atomic64_load(SB), AX CALL racecallatomic<>(SB) @@ -225,13 +225,13 @@ TEXT sync∕atomic·LoadPointer(SB), NOSPLIT, $0-16 JMP sync∕atomic·LoadInt64(SB) // Store -TEXT sync∕atomic·StoreInt32(SB), NOSPLIT, $0-12 +TEXT sync∕atomic·StoreInt32(SB), NOSPLIT|NOFRAME, $0-12 GO_ARGS MOVQ $__tsan_go_atomic32_store(SB), AX CALL racecallatomic<>(SB) RET -TEXT sync∕atomic·StoreInt64(SB), NOSPLIT, $0-16 +TEXT sync∕atomic·StoreInt64(SB), NOSPLIT|NOFRAME, $0-16 GO_ARGS MOVQ $__tsan_go_atomic64_store(SB), AX CALL racecallatomic<>(SB) @@ -250,13 +250,13 @@ TEXT sync∕atomic·StoreUintptr(SB), NOSPLIT, $0-16 JMP sync∕atomic·StoreInt64(SB) // Swap -TEXT sync∕atomic·SwapInt32(SB), NOSPLIT, $0-20 +TEXT sync∕atomic·SwapInt32(SB), NOSPLIT|NOFRAME, $0-20 GO_ARGS MOVQ $__tsan_go_atomic32_exchange(SB), AX CALL racecallatomic<>(SB) RET -TEXT sync∕atomic·SwapInt64(SB), NOSPLIT, $0-24 +TEXT sync∕atomic·SwapInt64(SB), NOSPLIT|NOFRAME, $0-24 GO_ARGS MOVQ $__tsan_go_atomic64_exchange(SB), AX CALL racecallatomic<>(SB) @@ -275,7 +275,7 @@ TEXT sync∕atomic·SwapUintptr(SB), NOSPLIT, $0-24 JMP sync∕atomic·SwapInt64(SB) // Add -TEXT sync∕atomic·AddInt32(SB), NOSPLIT, $0-20 +TEXT sync∕atomic·AddInt32(SB), NOSPLIT|NOFRAME, $0-20 GO_ARGS MOVQ $__tsan_go_atomic32_fetch_add(SB), AX CALL racecallatomic<>(SB) @@ -283,7 +283,7 @@ TEXT sync∕atomic·AddInt32(SB), NOSPLIT, $0-20 ADDL AX, ret+16(FP) RET -TEXT sync∕atomic·AddInt64(SB), NOSPLIT, $0-24 +TEXT sync∕atomic·AddInt64(SB), NOSPLIT|NOFRAME, $0-24 GO_ARGS MOVQ $__tsan_go_atomic64_fetch_add(SB), AX CALL racecallatomic<>(SB) @@ -304,13 +304,13 @@ TEXT sync∕atomic·AddUintptr(SB), NOSPLIT, $0-24 JMP sync∕atomic·AddInt64(SB) // CompareAndSwap -TEXT sync∕atomic·CompareAndSwapInt32(SB), NOSPLIT, $0-17 +TEXT sync∕atomic·CompareAndSwapInt32(SB), NOSPLIT|NOFRAME, $0-17 GO_ARGS MOVQ $__tsan_go_atomic32_compare_exchange(SB), AX CALL racecallatomic<>(SB) RET -TEXT sync∕atomic·CompareAndSwapInt64(SB), NOSPLIT, $0-25 +TEXT sync∕atomic·CompareAndSwapInt64(SB), NOSPLIT|NOFRAME, $0-25 GO_ARGS MOVQ $__tsan_go_atomic64_compare_exchange(SB), AX CALL racecallatomic<>(SB) @@ -330,7 +330,7 @@ TEXT sync∕atomic·CompareAndSwapUintptr(SB), NOSPLIT, $0-25 // Generic atomic operation implementation. // AX already contains target function. -TEXT racecallatomic<>(SB), NOSPLIT, $0-0 +TEXT racecallatomic<>(SB), NOSPLIT|NOFRAME, $0-0 // Trigger SIGSEGV early. MOVQ 16(SP), R12 MOVL (R12), R13 @@ -383,7 +383,7 @@ TEXT runtime·racecall(SB), NOSPLIT, $0-0 JMP racecall<>(SB) // Switches SP to g0 stack and calls (AX). Arguments already set. -TEXT racecall<>(SB), NOSPLIT, $0-0 +TEXT racecall<>(SB), NOSPLIT|NOFRAME, $0-0 MOVQ g_m(R14), R13 // Switch to g0 stack. MOVQ SP, R12 // callee-saved, preserved across the CALL @@ -405,7 +405,7 @@ call: // The overall effect of Go->C->Go call chain is similar to that of mcall. // RARG0 contains command code. RARG1 contains command-specific context. // See racecallback for command codes. -TEXT runtime·racecallbackthunk(SB), NOSPLIT, $0-0 +TEXT runtime·racecallbackthunk(SB), NOSPLIT|NOFRAME, $0-0 // Handle command raceGetProcCmd (0) here. // First, code below assumes that we are on curg, while raceGetProcCmd // can be executed on g0. Second, it is called frequently, so will |
