Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/pprof: disassembly support for PIE binaries / shared libraries #46639

Open
prattmic opened this issue Jun 7, 2021 · 1 comment
Open

cmd/pprof: disassembly support for PIE binaries / shared libraries #46639

prattmic opened this issue Jun 7, 2021 · 1 comment
Labels
Milestone

Comments

@prattmic
Copy link
Member

@prattmic prattmic commented Jun 7, 2021

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.

cc @cherrymui @mknyszek

@prattmic prattmic added this to the Backlog milestone Jun 7, 2021
@ianlancetaylor
Copy link
Contributor

@ianlancetaylor ianlancetaylor commented Jun 7, 2021

See also #17883.

Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants