go/src/cmd/pprof
Cherry Mui 6c25cf1c5f cmd/internal/objfile: break out dissassemblers to another package
Currently, cmd/internal/objfile provides dissassembly routines for
various architectures, which depend on dissassemblers from x/arch.
cmd/internal/objfile is imported in tools that need dissassembly
(objdump, pprof) and tools that don't need dissassembly (nm,
addr2line). Adding/improving disassembly support for more
architectures can cause binary size increase, and for some tools
(nm, addr2line) it is not necessary.

This CL breaks out dissassembly routines to a different package,
which is only imported in tools that need dissassembly. Other
tools can depend on cmd/internal/objfile without the disassembly
code from x/arch.

This reduces binary sizes for those tools. On darwin/arm64,

                                 old         new
cmd/addr2line                  4554418     3648882   -20%
cmd/addr2line (-ldflags=-w)    3464626     2641650   -24%
cmd/nm                         4503874     3616722   -20%
cmd/nm (-ldflags=-w)           3430594     2609490   -24%

For #70699.

Change-Id: Ie45d5d5c5500c5f3882e8b3c4e6eb81f0d815292
Reviewed-on: https://go-review.googlesource.com/c/go/+/634916
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
2024-12-11 08:53:20 -08:00
..
testdata
README
doc.go all: gofmt main repo 2022-05-19 15:49:05 +00:00
pprof.go cmd/internal/objfile: break out dissassemblers to another package 2024-12-11 08:53:20 -08:00
pprof_test.go cmd: use testenv.Executable helper 2024-09-03 18:03:19 +00:00
readlineui.go all: fix problematic comments 2023-01-30 18:10:36 +00:00

README

This directory is the copy of Google's pprof shipped as part of the Go distribution.
The bulk of the code is vendored from github.com/google/pprof and is in
../vendor/github.com/google/pprof.

Two important notes:

1. Using github.com/google/pprof directly (for example, after installing
with "go get") should work with Go programs, but we cannot guarantee that.
What we test is that the "go tool pprof" shipped with each Go release works
with programs from that release.

2. Pprof is used inside Google for C++, Java, and Go programs.
Because it was developed for that broader context, it is overgeneralized
when used here for the specific use case of profiling standard Go programs.
However, we've left the abstractions intact in order to share updates
between our vendored copy and Google's internal one.
Please do not take the level of abstraction in this program as an example
to follow in your own.