diff options
| author | Alexander Egorenkov <Alexander.Egorenkov@ibm.com> | 2020-06-02 08:17:38 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-06-18 19:31:40 +0200 |
| commit | bc258b506da8ceda014bf1d40d695d1890e9f785 (patch) | |
| tree | 8ad9a8a035b9a14ac9d35840050e589428a440b8 /pkg/symbolizer/symbolizer.go | |
| parent | b1b22865fc4567c79793620400109f2220335f84 (diff) | |
pkg: support compiler triple for 'nm' and 'addr2line'
In preparation to support big-endian architectures.
Diffstat (limited to 'pkg/symbolizer/symbolizer.go')
| -rw-r--r-- | pkg/symbolizer/symbolizer.go | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/pkg/symbolizer/symbolizer.go b/pkg/symbolizer/symbolizer.go index f1f8478e9..96b62fb95 100644 --- a/pkg/symbolizer/symbolizer.go +++ b/pkg/symbolizer/symbolizer.go @@ -14,9 +14,11 @@ import ( "strings" "github.com/google/syzkaller/pkg/osutil" + "github.com/google/syzkaller/sys/targets" ) type Symbolizer struct { + target *targets.Target subprocs map[string]*subprocess } @@ -36,8 +38,8 @@ type subprocess struct { scanner *bufio.Scanner } -func NewSymbolizer() *Symbolizer { - return &Symbolizer{} +func NewSymbolizer(target *targets.Target) *Symbolizer { + return &Symbolizer{target: target} } func (s *Symbolizer) Symbolize(bin string, pc uint64) ([]Frame, error) { @@ -65,7 +67,11 @@ func (s *Symbolizer) getSubprocess(bin string) (*subprocess, error) { if sub := s.subprocs[bin]; sub != nil { return sub, nil } - cmd := osutil.Command("addr2line", "-afi", "-e", bin) + addr2line := "addr2line" + if s.target.Triple != "" { + addr2line = s.target.Triple + "-" + addr2line + } + cmd := osutil.Command(addr2line, "-afi", "-e", bin) stdin, err := cmd.StdinPipe() if err != nil { return nil, err |
