mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: use register ABI for race detector functions
runtime.raceread/racewrite/racewriterange are functions that are called from compiler instrumented code, follwoing ABIInternal. They are assembly functions defined as ABIInternal in the runtime, in order to avoid wrappers because they need to get the caller's PC. This CL makes them to use the actual internal ABI. Change-Id: Id91d73cf257f7b11a858958d85c38c4aa904d9c3 Reviewed-on: https://go-review.googlesource.com/c/go/+/307812 Trust: Cherry Zhang <cherryyz@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
parent
7da8490cbb
commit
0a510478b0
1 changed files with 13 additions and 0 deletions
|
|
@ -44,7 +44,11 @@
|
||||||
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
||||||
// which would render runtime.getcallerpc ineffective.
|
// which would render runtime.getcallerpc ineffective.
|
||||||
TEXT runtime·raceread<ABIInternal>(SB), NOSPLIT, $0-8
|
TEXT runtime·raceread<ABIInternal>(SB), NOSPLIT, $0-8
|
||||||
|
#ifdef GOEXPERIMENT_REGABI_ARGS
|
||||||
|
MOVQ AX, RARG1
|
||||||
|
#else
|
||||||
MOVQ addr+0(FP), RARG1
|
MOVQ addr+0(FP), RARG1
|
||||||
|
#endif
|
||||||
MOVQ (SP), RARG2
|
MOVQ (SP), RARG2
|
||||||
// void __tsan_read(ThreadState *thr, void *addr, void *pc);
|
// void __tsan_read(ThreadState *thr, void *addr, void *pc);
|
||||||
MOVQ $__tsan_read(SB), AX
|
MOVQ $__tsan_read(SB), AX
|
||||||
|
|
@ -70,7 +74,11 @@ TEXT runtime·racereadpc(SB), NOSPLIT, $0-24
|
||||||
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
||||||
// which would render runtime.getcallerpc ineffective.
|
// which would render runtime.getcallerpc ineffective.
|
||||||
TEXT runtime·racewrite<ABIInternal>(SB), NOSPLIT, $0-8
|
TEXT runtime·racewrite<ABIInternal>(SB), NOSPLIT, $0-8
|
||||||
|
#ifdef GOEXPERIMENT_REGABI_ARGS
|
||||||
|
MOVQ AX, RARG1
|
||||||
|
#else
|
||||||
MOVQ addr+0(FP), RARG1
|
MOVQ addr+0(FP), RARG1
|
||||||
|
#endif
|
||||||
MOVQ (SP), RARG2
|
MOVQ (SP), RARG2
|
||||||
// void __tsan_write(ThreadState *thr, void *addr, void *pc);
|
// void __tsan_write(ThreadState *thr, void *addr, void *pc);
|
||||||
MOVQ $__tsan_write(SB), AX
|
MOVQ $__tsan_write(SB), AX
|
||||||
|
|
@ -121,8 +129,13 @@ TEXT runtime·racereadrangepc1(SB), NOSPLIT, $0-24
|
||||||
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
// Defined as ABIInternal so as to avoid introducing a wrapper,
|
||||||
// which would render runtime.getcallerpc ineffective.
|
// which would render runtime.getcallerpc ineffective.
|
||||||
TEXT runtime·racewriterange<ABIInternal>(SB), NOSPLIT, $0-16
|
TEXT runtime·racewriterange<ABIInternal>(SB), NOSPLIT, $0-16
|
||||||
|
#ifdef GOEXPERIMENT_REGABI_ARGS
|
||||||
|
MOVQ AX, RARG1
|
||||||
|
MOVQ BX, RARG2
|
||||||
|
#else
|
||||||
MOVQ addr+0(FP), RARG1
|
MOVQ addr+0(FP), RARG1
|
||||||
MOVQ size+8(FP), RARG2
|
MOVQ size+8(FP), RARG2
|
||||||
|
#endif
|
||||||
MOVQ (SP), RARG3
|
MOVQ (SP), RARG3
|
||||||
// void __tsan_write_range(ThreadState *thr, void *addr, uintptr size, void *pc);
|
// void __tsan_write_range(ThreadState *thr, void *addr, uintptr size, void *pc);
|
||||||
MOVQ $__tsan_write_range(SB), AX
|
MOVQ $__tsan_write_range(SB), AX
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue