Skip to content

Commit

Permalink
runtime: rename getcallerfp to getfp
Browse files Browse the repository at this point in the history
The previous name was wrong due to the mistaken assumption that calling
f->g->getcallerpc and f->g->getcallersp would respectively return the
pc/sp at g. However, they are actually referring to their caller's
caller, i.e. f.

Rename getcallerfp to getfp in order to stay consistent with this
naming convention.

Also see discussion on CL 463835.

For #16638

This is a redo of CL 481617 that became necessary because CL 461738
added another call site for getcallerfp().

Change-Id: If0b536e85a6c26061b65e7b5c2859fc31385d025
Reviewed-on: https://go-review.googlesource.com/c/go/+/494857
Reviewed-by: Michael Pratt <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
Run-TryBot: Felix Geisendörfer <[email protected]>
  • Loading branch information
felixge authored and qmuntal committed May 22, 2023
1 parent d75cc4b commit 3afbca5
Show file tree
Hide file tree
Showing 16 changed files with 36 additions and 27 deletions.
2 changes: 1 addition & 1 deletion src/runtime/asm_amd64.s
Original file line number Diff line number Diff line change
Expand Up @@ -2088,6 +2088,6 @@ TEXT runtime·retpolineR13(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(13)
TEXT runtime·retpolineR14(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(14)
TEXT runtime·retpolineR15(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(15)

TEXT ·getcallerfp<ABIInternal>(SB),NOSPLIT|NOFRAME,$0
TEXT ·getfp<ABIInternal>(SB),NOSPLIT|NOFRAME,$0
MOVQ BP, AX
RET
2 changes: 1 addition & 1 deletion src/runtime/asm_arm64.s
Original file line number Diff line number Diff line change
Expand Up @@ -1568,6 +1568,6 @@ TEXT runtime·panicSliceConvert<ABIInternal>(SB),NOSPLIT,$0-16
MOVD R3, R1
JMP runtime·goPanicSliceConvert<ABIInternal>(SB)

TEXT ·getcallerfp<ABIInternal>(SB),NOSPLIT|NOFRAME,$0
TEXT ·getfp<ABIInternal>(SB),NOSPLIT|NOFRAME,$0
MOVD R29, R0
RET
2 changes: 1 addition & 1 deletion src/runtime/export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1826,7 +1826,7 @@ func PersistentAlloc(n uintptr) unsafe.Pointer {
// FPCallers works like Callers and uses frame pointer unwinding to populate
// pcBuf with the return addresses of the physical frames on the stack.
func FPCallers(pcBuf []uintptr) int {
return fpTracebackPCs(unsafe.Pointer(getcallerfp()), pcBuf)
return fpTracebackPCs(unsafe.Pointer(getfp()), pcBuf)
}

var (
Expand Down
2 changes: 1 addition & 1 deletion src/runtime/export_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ func NewContextStub() ContextStub {
var ctx context
ctx.set_ip(getcallerpc())
ctx.set_sp(getcallersp())
ctx.set_fp(getcallerfp())
ctx.set_fp(getfp())
return ContextStub{ctx}
}
5 changes: 3 additions & 2 deletions src/runtime/os_wasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,9 @@ func preemptM(mp *m) {
// No threads, so nothing to do.
}

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }

func setProcessCPUProfiler(hz int32) {}
func setThreadCPUProfiler(hz int32) {}
Expand Down
5 changes: 3 additions & 2 deletions src/runtime/stubs_386.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@ func emptyfunc()
//go:noescape
func asmcgocall_no_g(fn, arg unsafe.Pointer)

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
4 changes: 2 additions & 2 deletions src/runtime/stubs_amd64.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ func asmcgocall_no_g(fn, arg unsafe.Pointer)
func spillArgs()
func unspillArgs()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getcallerfp() uintptr
func getfp() uintptr
5 changes: 3 additions & 2 deletions src/runtime/stubs_arm.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ func read_tls_fallback()
//go:noescape
func asmcgocall_no_g(fn, arg unsafe.Pointer)

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
4 changes: 2 additions & 2 deletions src/runtime/stubs_arm64.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ func emptyfunc()
func spillArgs()
func unspillArgs()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getcallerfp() uintptr
func getfp() uintptr
5 changes: 3 additions & 2 deletions src/runtime/stubs_loong64.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ package runtime
func load_g()
func save_g()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
5 changes: 3 additions & 2 deletions src/runtime/stubs_mips64x.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ func save_g()
//go:noescape
func asmcgocall_no_g(fn, arg unsafe.Pointer)

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
5 changes: 3 additions & 2 deletions src/runtime/stubs_mipsx.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ package runtime
func load_g()
func save_g()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
5 changes: 3 additions & 2 deletions src/runtime/stubs_ppc64x.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ func reginit()
func spillArgs()
func unspillArgs()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
5 changes: 3 additions & 2 deletions src/runtime/stubs_riscv64.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ func save_g()
func spillArgs()
func unspillArgs()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
5 changes: 3 additions & 2 deletions src/runtime/stubs_s390x.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ package runtime
func load_g()
func save_g()

// getcallerfp returns the address of the frame pointer in the callers frame or 0 if not implemented.
func getcallerfp() uintptr { return 0 }
// getfp returns the frame pointer register of its caller or 0 if not implemented.
// TODO: Make this a compiler intrinsic
func getfp() uintptr { return 0 }
2 changes: 1 addition & 1 deletion src/runtime/trace.go
Original file line number Diff line number Diff line change
Expand Up @@ -970,7 +970,7 @@ func traceStackID(mp *m, pcBuf []uintptr, skip int) uint64 {
// Fast path: Unwind using frame pointers.
pcBuf[0] = uintptr(skip)
if curgp == gp {
nstk += fpTracebackPCs(unsafe.Pointer(getcallerfp()), pcBuf[1:])
nstk += fpTracebackPCs(unsafe.Pointer(getfp()), pcBuf[1:])
} else if curgp != nil {
// We're called on the g0 stack through mcall(fn) or systemstack(fn). To
// behave like gcallers above, we start unwinding from sched.bp, which
Expand Down

0 comments on commit 3afbca5

Please sign in to comment.