aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/race_amd64.s
diff options
context:
space:
mode:
authorqmuntal <quimmuntal@gmail.com>2022-12-23 13:22:00 +0100
committerQuim Muntal <quimmuntal@gmail.com>2023-01-24 19:29:51 +0000
commit083d94f69c35b2244ea43738c1d28aa5d9e6d567 (patch)
treecbcc4cf9b4eb2a6f7e351423c9e2bcb61135de37 /src/runtime/race_amd64.s
parent27500d88f082d2789f90a644962684b4118c4d44 (diff)
downloadgo-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.s28
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