From 3645389673af4c62a636cfe36f258ae770e8fb6b Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 22 Dec 2017 11:47:04 +0100 Subject: 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 --- prog/decodeexec.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'prog/decodeexec.go') 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{ -- cgit mrf-deployment