Structs
            
            
               
                  Binutils
                  struct
                  #
               
               
               A Binutils implements plugin.ObjTool by invoking the GNU binutils.
               
               type Binutils struct {
mu sync.Mutex
rep *binrep
}
            
            
            
               
                  addr2Liner
                  struct
                  #
               
               
               addr2Liner is a connection to an addr2line command for obtaining
address and line number information from a binary.
               
               type addr2Liner struct {
mu sync.Mutex
rw lineReaderWriter
base uint64
nm *addr2LinerNM
}
            
            
            
               
                  addr2LinerJob
                  struct
                  #
               
               
               type addr2LinerJob struct {
cmd *exec.Cmd
in io.WriteCloser
out *bufio.Reader
}
            
            
            
               
                  addr2LinerNM
                  struct
                  #
               
               
               addr2LinerNM is a connection to an nm command for obtaining symbol
information from a binary.
               
               type addr2LinerNM struct {
m []symbolInfo
}
            
            
            
               
                  binrep
                  struct
                  #
               
               
               binrep is an immutable representation for Binutils.  It is atomically
replaced on every mutation to provide thread-safe access.
               
               type binrep struct {
llvmSymbolizer string
llvmSymbolizerFound bool
addr2line string
addr2lineFound bool
nm string
nmFound bool
objdump string
objdumpFound bool
isLLVMObjdump bool
fast bool
}
            
            
            
               
                  elfMapping
                  struct
                  #
               
               
               elfMapping stores the parameters of a runtime mapping that are needed to
identify the ELF segment associated with a mapping.
               
               type elfMapping struct {
start uint64
limit uint64
offset uint64
kernelOffset *uint64
}
            
            
            
               
                  file
                  struct
                  #
               
               
               file implements the binutils.ObjFile interface.
               
               type file struct {
b *binrep
name string
buildID string
baseOnce sync.Once
base uint64
baseErr error
isData bool
m *elfMapping
}
            
            
            
               
                  fileAddr2Line
                  struct
                  #
               
               
               fileAddr2Line implements the binutils.ObjFile interface, using
llvm-symbolizer, if that's available, or addr2line to map addresses to
symbols (with file/line number information). It can be slow for large
binaries with debug information.
               
               type fileAddr2Line struct {
once sync.Once
file
addr2liner *addr2Liner
llvmSymbolizer *llvmSymbolizer
isData bool
}
            
            
            
               
                  fileNM
                  struct
                  #
               
               
               fileNM implements the binutils.ObjFile interface, using 'nm' to map
addresses to symbols (without file/line number information). It is
faster than fileAddr2Line.
               
               type fileNM struct {
file
addr2linernm *addr2LinerNM
}
            
            
            
               
                  llvmSymbolizer
                  struct
                  #
               
               
               llvmSymbolizer is a connection to an llvm-symbolizer command for
obtaining address and line number information from a binary.
               
               type llvmSymbolizer struct {
sync.Mutex
filename string
rw lineReaderWriter
base uint64
isData bool
}
            
            
            
               
                  llvmSymbolizerJob
                  struct
                  #
               
               
               type llvmSymbolizerJob struct {
cmd *exec.Cmd
in io.WriteCloser
out *bufio.Reader
symType string
}
            
            
            
               
                  symbolInfo
                  struct
                  #
               
               
               type symbolInfo struct {
address uint64
size uint64
name string
symType string
}
            
            
         
          
         
            Functions
            
            
               
                  BuildID 
                  method
                  
                  #
               
               
               func (f *file) BuildID() string
            
            
            
               
                  Close 
                  method
                  
                  #
               
               
               func (f *fileAddr2Line) Close() error
            
            
            
               
                  Close 
                  method
                  
                  #
               
               
               func (f *file) Close() error
            
            
            
               
                  Disasm 
                  method
                  
                  #
               
               
               Disasm returns the assembly instructions for the specified address range
of a binary.
               
               func (bu *Binutils) Disasm(file string, start uint64, end uint64, intelSyntax bool) ([]plugin.Inst, error)
            
            
            
               
                  Name 
                  method
                  
                  #
               
               
               func (f *file) Name() string
            
            
            
               
                  ObjAddr 
                  method
                  
                  #
               
               
               func (f *file) ObjAddr(addr uint64) (uint64, error)
            
            
            
               
                  Open 
                  method
                  
                  #
               
               
               Open satisfies the plugin.ObjTool interface.
               
               func (bu *Binutils) Open(name string, start uint64, limit uint64, offset uint64, relocationSymbol string) (plugin.ObjFile, error)
            
            
            
               
                  SetFastSymbolization 
                  method
                  
                  #
               
               
               SetFastSymbolization sets a toggle that makes binutils use fast
symbolization (using nm), which is much faster than addr2line but
provides only symbol name information (no file/line).
               
               func (bu *Binutils) SetFastSymbolization(fast bool)
            
            
            
               
                  SetTools 
                  method
                  
                  #
               
               
               SetTools processes the contents of the tools option. It
expects a set of entries separated by commas; each entry is a pair
of the form t:path, where cmd will be used to look only for the
tool named t. If t is not specified, the path is searched for all
tools.
               
               func (bu *Binutils) SetTools(config string)
            
            
            
               
                  SourceLine 
                  method
                  
                  #
               
               
               func (f *fileAddr2Line) SourceLine(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  SourceLine 
                  method
                  
                  #
               
               
               func (f *fileNM) SourceLine(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  SourceLine 
                  method
                  
                  #
               
               
               func (f *file) SourceLine(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               String returns string representation of the binutils state for debug logging.
               
               func (bu *Binutils) String() string
            
            
            
               
                  Symbols 
                  method
                  
                  #
               
               
               func (f *file) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error)
            
            
            
               
                  addrInfo 
                  method
                  
                  #
               
               
               addrInfo returns the stack frame information for a specific program
address. It returns nil if the address could not be identified.
               
               func (a *addr2LinerNM) addrInfo(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  addrInfo 
                  method
                  
                  #
               
               
               addrInfo returns the stack frame information for a specific program
address. It returns nil if the address could not be identified.
               
               func (d *llvmSymbolizer) addrInfo(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  addrInfo 
                  method
                  
                  #
               
               
               addrInfo returns the stack frame information for a specific program
address. It returns nil if the address could not be identified.
               
               func (d *addr2Liner) addrInfo(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  chooseExe 
                  function
                  
                  #
               
               
               chooseExe finds and returns path to preferred binary. names is a list of
names to search on both Linux and OSX. osxNames is a list of names specific
to OSX. names always has a higher priority than osxNames. The order of
the name within each list decides its priority (e.g. the first name has a
higher priority than the second name in the list).
It returns a string with path to the binary and a boolean indicating if any
acceptable binary was found.
               
               func chooseExe(names []string, osxNames []string, paths []string) (string, bool)
            
            
            
               
                  close 
                  method
                  
                  #
               
               
               close releases any resources used by the llvmSymbolizer object.
               
               func (a *llvmSymbolizerJob) close()
            
            
            
               
                  close 
                  method
                  
                  #
               
               
               close releases any resources used by the addr2liner object.
               
               func (a *addr2LinerJob) close()
            
            
            
               
                  computeBase 
                  method
                  
                  #
               
               
               computeBase computes the relocation base for the given binary file only if
the elfMapping field is set. It populates the base and isData fields and
returns an error.
               
               func (f *file) computeBase(addr uint64) error
            
            
            
               
                  disassemble 
                  function
                  
                  #
               
               
               disassemble parses the output of the objdump command and returns
the assembly instructions in a slice.
               
               func disassemble(asm []byte) ([]plugin.Inst, error)
            
            
            
               
                  findExe 
                  function
                  
                  #
               
               
               findExe looks for an executable command on a set of paths.
If it cannot find it, returns cmd.
               
               func findExe(cmd string, paths []string) (string, bool)
            
            
            
               
                  findObjdump 
                  function
                  
                  #
               
               
               findObjdump finds and returns path to preferred objdump binary.
Order of preference is: llvm-objdump, objdump.
On MacOS only, also looks for gobjdump with least preference.
Accepts a list of paths and returns:
a string with path to the preferred objdump binary if found,
or an empty string if not found;
a boolean if any acceptable objdump was found;
a boolean indicating if it is an LLVM objdump.
               
               func findObjdump(paths []string) (string, bool, bool)
            
            
            
            
            
               
                  findSymbols 
                  function
                  
                  #
               
               
               func findSymbols(syms []byte, file string, r *regexp.Regexp, address uint64) ([]*plugin.Sym, error)
            
            
            
               
                  get 
                  method
                  
                  #
               
               
               get returns the current representation for bu, initializing it if necessary.
               
               func (bu *Binutils) get() *binrep
            
            
            
               
                  init 
                  method
                  
                  #
               
               
               func (f *fileAddr2Line) init()
            
            
            
               
                  initTools 
                  function
                  
                  #
               
               
               func initTools(b *binrep, config string)
            
            
            
               
                  isBuObjdump 
                  function
                  
                  #
               
               
               isBuObjdump accepts a string with path to an objdump binary,
and returns a boolean indicating if the given binary is a GNU
binutils objdump binary. No version check is performed.
               
               func isBuObjdump(output string) bool
            
            
            
               
                  isData 
                  method
                  
                  #
               
               
               isData returns if the symbol has a known data object symbol type.
               
               func (s *symbolInfo) isData() bool
            
            
            
               
                  isLLVMObjdump 
                  function
                  
                  #
               
               
               isLLVMObjdump accepts a string with path to an objdump binary,
and returns a boolean indicating if the given binary is an LLVM
objdump binary of an acceptable version.
               
               func isLLVMObjdump(output string) bool
            
            
            
               
                  matchSymbol 
                  function
                  
                  #
               
               
               matchSymbol checks if a symbol is to be selected by checking its
name to the regexp and optionally its address. It returns the name(s)
to be used for the matched symbol, or nil if no match
               
               func matchSymbol(names []string, start uint64, end uint64, r *regexp.Regexp, address uint64) []string
            
            
            
               
                  newAddr2Liner 
                  function
                  
                  #
               
               
               newAddr2Liner starts the given addr2liner command reporting
information about the given executable file. If file is a shared
library, base should be the address at which it was mapped in the
program under consideration.
               
               func newAddr2Liner(cmd string, file string, base uint64) (*addr2Liner, error)
            
            
            
               
                  newAddr2LinerNM 
                  function
                  
                  #
               
               
               newAddr2LinerNM starts the given nm command reporting information about the
given executable file. If file is a shared library, base should be the
address at which it was mapped in the program under consideration.
               
               func newAddr2LinerNM(cmd string, file string, base uint64) (*addr2LinerNM, error)
            
            
            
               
                  newLLVMSymbolizer 
                  function
                  
                  #
               
               
               newLLVMSymbolizer starts the given llvmSymbolizer command reporting
information about the given executable file. If file is a shared
library, base should be the address at which it was mapped in the
program under consideration.
               
               func newLLVMSymbolizer(cmd string, file string, base uint64, isData bool) (*llvmSymbolizer, error)
            
            
            
               
                  nextSymbol 
                  function
                  
                  #
               
               
               nextSymbol parses the nm output to find the next symbol listed.
Skips over any output it cannot recognize.
               
               func nextSymbol(buf *bytes.Buffer) (uint64, string, error)
            
            
            
               
                  openELF 
                  method
                  
                  #
               
               
               func (b *binrep) openELF(name string, start uint64, limit uint64, offset uint64, relocationSymbol string) (plugin.ObjFile, error)
            
            
            
               
                  openFatMachO 
                  method
                  
                  #
               
               
               func (b *binrep) openFatMachO(name string, start uint64, limit uint64, offset uint64) (plugin.ObjFile, error)
            
            
            
               
                  openMachO 
                  method
                  
                  #
               
               
               func (b *binrep) openMachO(name string, start uint64, limit uint64, offset uint64) (plugin.ObjFile, error)
            
            
            
               
                  openMachOCommon 
                  method
                  
                  #
               
               
               func (b *binrep) openMachOCommon(name string, of *macho.File, start uint64, limit uint64, offset uint64) (plugin.ObjFile, error)
            
            
            
               
                  openPE 
                  method
                  
                  #
               
               
               func (b *binrep) openPE(name string, start uint64, limit uint64, offset uint64) (plugin.ObjFile, error)
            
            
            
               
                  parseAddr2LinerNM 
                  function
                  
                  #
               
               
               func parseAddr2LinerNM(base uint64, nm io.Reader) (*addr2LinerNM, error)
            
            
            
               
                  rawAddrInfo 
                  method
                  
                  #
               
               
               func (d *addr2Liner) rawAddrInfo(addr uint64) ([]plugin.Frame, error)
            
            
            
               
                  readCodeFrames 
                  method
                  
                  #
               
               
               readCodeFrames parses the llvm-symbolizer CODE output for a single address. It
returns a populated plugin.Frame array.
               
               func (d *llvmSymbolizer) readCodeFrames() ([]plugin.Frame, error)
            
            
            
               
                  readDataFrames 
                  method
                  
                  #
               
               
               readDataFrames parses the llvm-symbolizer DATA output for a single address. It
returns a populated plugin.Frame array with a single entry.
               
               func (d *llvmSymbolizer) readDataFrames() ([]plugin.Frame, error)
            
            
            
               
                  readFrame 
                  method
                  
                  #
               
               
               readFrame parses the addr2line output for a single address. It
returns a populated plugin.Frame and whether it has reached the end of the
data.
               
               func (d *addr2Liner) readFrame() (plugin.Frame, bool)
            
            
            
               
                  readLine 
                  method
                  
                  #
               
               
               func (a *llvmSymbolizerJob) readLine() (string, error)
            
            
            
               
                  readLine 
                  method
                  
                  #
               
               
               func (a *addr2LinerJob) readLine() (string, error)
            
            
            
               
                  update 
                  method
                  
                  #
               
               
               update modifies the rep for bu via the supplied function.
               
               func (bu *Binutils) update(fn func(r *binrep))
            
            
            
               
                  write 
                  method
                  
                  #
               
               
               func (a *llvmSymbolizerJob) write(s string) error
            
            
            
               
                  write 
                  method
                  
                  #
               
               
               func (a *addr2LinerJob) write(s string) error