const defaultLLVMSymbolizer … type llvmSymbolizer … type llvmSymbolizerJob … func (a *llvmSymbolizerJob) write(s string) error { … } func (a *llvmSymbolizerJob) readLine() (string, error) { … } // close releases any resources used by the llvmSymbolizer object. func (a *llvmSymbolizerJob) close() { … } // 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, file string, base uint64, isData bool) (*llvmSymbolizer, error) { … } // readFrame parses the llvm-symbolizer output for a single address. It // returns a populated plugin.Frame and whether it has reached the end of the // data. func (d *llvmSymbolizer) readFrame() (plugin.Frame, bool) { … } // 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) { … }