-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Open
Labels
NeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.
Milestone
Description
go tool pprof does not support disassembly of position independent code (PIE binaries or shared libraries). Notably, on Windows PIE is default, so disassembly doesn't work by default:
gopher@SERVER-2016-V7- c:\workdir>go\bin\go build cpu.go
gopher@SERVER-2016-V7- c:\workdir>cpu.exe -output cpu.pprof
gopher@SERVER-2016-V7- c:\workdir>pprof.exe -top cpu.exe cpu.pprof
File: cpu.exe
Type: cpu
Time: Jun 7, 2021 at 9:19pm (GMT)
Duration: 1.11s, Total samples = 990ms (89.48%)
Showing nodes accounting for 990ms, 100% of 990ms total
flat flat% sum% cum cum%
330ms 33.33% 33.33% 840ms 84.85% time.Since
280ms 28.28% 61.62% 280ms 28.28% time.Time.Sub
150ms 15.15% 76.77% 990ms 100% main.main
130ms 13.13% 89.90% 130ms 13.13% runtime.nanotime1
100ms 10.10% 100% 230ms 23.23% runtime.nanotime
0 0% 100% 990ms 100% runtime.main
gopher@SERVER-2016-V7- c:\workdir>pprof.exe -disasm . cpu.exe cpu.pprof
Total: 990ms
Without PIE:
gopher@SERVER-2016-V7- c:\workdir>go\bin\go build -buildmode=exe cpu.go
gopher@SERVER-2016-V7- c:\workdir>cpu.exe -output cpu.pprof
gopher@SERVER-2016-V7- c:\workdir>pprof.exe -disasm . cpu.exe cpu.pprof
Total: 990ms
ROUTINE ======================== time.Time.Sub
310ms 310ms (flat, cum) 31.31% of Total
...
Upstream pprof's binutils backend supports base address computation to handle position independent code, but our implementation skips that entirely.
The "binutils" implementation doesn't actually seem particularly specific to binutils, so it would likely not be too difficult to support in our implementation.
Metadata
Metadata
Assignees
Labels
NeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.
Type
Projects
Status
Todo