aboutsummaryrefslogtreecommitdiffstats
path: root/prog/decodeexec.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-12-22 11:47:04 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-12-22 11:59:46 +0100
commit3645389673af4c62a636cfe36f258ae770e8fb6b (patch)
tree356f9337e5ca323babef0e43fc345b0017dda798 /prog/decodeexec.go
parent6f298a18e582be006780954d6b0c30cbe2f568f4 (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.go11
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{