diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-12-22 11:47:04 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-12-22 11:59:46 +0100 |
| commit | 3645389673af4c62a636cfe36f258ae770e8fb6b (patch) | |
| tree | 356f9337e5ca323babef0e43fc345b0017dda798 /prog/decodeexec.go | |
| parent | 6f298a18e582be006780954d6b0c30cbe2f568f4 (diff) | |
pkg/csource: fix handling of proc types
Generated program always uses pid=0 even when there are multiple processes.
Make each process use own pid.
Unfortunately required to do quite significant changes to prog,
because the current format only supported fixed pid.
Fixes #490
Diffstat (limited to 'prog/decodeexec.go')
| -rw-r--r-- | prog/decodeexec.go | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/prog/decodeexec.go b/prog/decodeexec.go index e62569b42..a16461782 100644 --- a/prog/decodeexec.go +++ b/prog/decodeexec.go @@ -38,6 +38,8 @@ type ExecArgConst struct { Value uint64 BitfieldOffset uint64 BitfieldLength uint64 + PidStride uint64 + BigEndian bool } type ExecArgResult struct { @@ -127,11 +129,14 @@ func (dec *execDecoder) parse() { func (dec *execDecoder) readArg() ExecArg { switch typ := dec.read(); typ { case execArgConst: + meta := dec.read() return ExecArgConst{ - Size: dec.read(), Value: dec.read(), - BitfieldOffset: dec.read(), - BitfieldLength: dec.read(), + Size: meta & 0xff, + BitfieldOffset: (meta >> 16) & 0xff, + BitfieldLength: (meta >> 24) & 0xff, + PidStride: meta >> 32, + BigEndian: (meta & (1 << 8)) != 0, } case execArgResult: return ExecArgResult{ |
