diff options
Diffstat (limited to 'pkg/ipc')
| -rw-r--r-- | pkg/ipc/ipc.go | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/pkg/ipc/ipc.go b/pkg/ipc/ipc.go index 5bf4738ca..6b25d4af4 100644 --- a/pkg/ipc/ipc.go +++ b/pkg/ipc/ipc.go @@ -289,7 +289,7 @@ func (env *Env) Exec(opts *ExecOpts, p *prog.Prog) (output []byte, info *ProgInf return } - info, err0 = env.parseOutput(p) + info, err0 = env.parseOutput(p, opts) if info != nil && env.config.Flags&FlagSignal == 0 { addFallbackSignal(p, info) } @@ -323,7 +323,7 @@ func addFallbackSignal(p *prog.Prog, info *ProgInfo) { } } -func (env *Env) parseOutput(p *prog.Prog) (*ProgInfo, error) { +func (env *Env) parseOutput(p *prog.Prog, opts *ExecOpts) (*ProgInfo, error) { out := env.out ncmd, ok := readUint32(&out) if !ok { @@ -372,19 +372,27 @@ func (env *Env) parseOutput(p *prog.Prog) (*ProgInfo, error) { if len(extraParts) == 0 { return info, nil } - info.Extra = convertExtra(extraParts) + info.Extra = convertExtra(extraParts, opts.Flags&FlagDedupCover > 0) return info, nil } -func convertExtra(extraParts []CallInfo) CallInfo { +func convertExtra(extraParts []CallInfo, dedupCover bool) CallInfo { var extra CallInfo - extraCover := make(cover.Cover) + if dedupCover { + extraCover := make(cover.Cover) + for _, part := range extraParts { + extraCover.Merge(part.Cover) + } + extra.Cover = extraCover.Serialize() + } else { + for _, part := range extraParts { + extra.Cover = append(extra.Cover, part.Cover...) + } + } extraSignal := make(signal.Signal) for _, part := range extraParts { - extraCover.Merge(part.Cover) extraSignal.Merge(signal.FromRaw(part.Signal, 0)) } - extra.Cover = extraCover.Serialize() extra.Signal = make([]uint32, len(extraSignal)) i := 0 for s := range extraSignal { |
