{
// If the caller PC is lessstack, use slower runtime·callers
// to walk across the stack split to find the real caller.
- // Same thing if the PC is on the heap, which should be a
- // closure trampoline.
- if(pc == (uintptr)runtime·lessstack ||
- (pc >= (uintptr)runtime·mheap->arena_start && pc < (uintptr)runtime·mheap->arena_used))
+ if(pc == (uintptr)runtime·lessstack)
runtime·callers(2, &pc, 1);
m->racecall = true;
m->racecall = true;
racectx = g->racectx;
if(callpc) {
- if(callpc == (uintptr)runtime·lessstack ||
- (callpc >= (uintptr)runtime·mheap->arena_start && callpc < (uintptr)runtime·mheap->arena_used))
+ if(callpc == (uintptr)runtime·lessstack)
runtime·callers(3, &callpc, 1);
runtime∕race·FuncEnter(racectx, (void*)callpc);
}
m->racecall = true;
racectx = g->racectx;
if(callpc) {
- if(callpc == (uintptr)runtime·lessstack ||
- (callpc >= (uintptr)runtime·mheap->arena_start && callpc < (uintptr)runtime·mheap->arena_used))
+ if(callpc == (uintptr)runtime·lessstack)
runtime·callers(3, &callpc, 1);
runtime∕race·FuncEnter(racectx, (void*)callpc);
}
// +build race
-TEXT runtime·racefuncenter(SB),7,$0
- PUSHQ DX // save function entry context (for closures)
+// func runtime·racefuncenter(pc uintptr)
+TEXT runtime·racefuncenter(SB), 7, $16
+ MOVQ DX, saved-8(SP) // save function entry context (for closures)
+ MOVQ pc+0(FP), DX
+ MOVQ DX, arg-16(SP)
CALL runtime·racefuncenter1(SB)
- POPQ DX
+ MOVQ saved-8(SP), DX
RET