diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-10-19 14:41:46 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-11-11 14:27:54 -0800 |
| commit | d3a93e8370682fa5231bc94faf11ed3681b2ac99 (patch) | |
| tree | a3f5827fe456cb7cc5f47e870c6069c0497ca3e5 /prog/prio.go | |
| parent | 959ec07095ff4ec4423a1365e0f0f94844a77507 (diff) | |
sys: attach Dir to all types
Dir is a static info, so we don't need to compute, propagate and
attach it in prog whenever we generate/change programs.
Attach Dir to all types.
Diffstat (limited to 'prog/prio.go')
| -rw-r--r-- | prog/prio.go | 43 |
1 files changed, 1 insertions, 42 deletions
diff --git a/prog/prio.go b/prog/prio.go index 3ac1eafe5..a21218dd1 100644 --- a/prog/prio.go +++ b/prog/prio.go @@ -50,7 +50,7 @@ func calcStaticPriorities() [][]float32 { uses[id][c.ID] = weight } } - foreachArgType(c, func(t sys.Type, d ArgDir) { + sys.ForeachType(c, func(t sys.Type) { switch a := t.(type) { case *sys.ResourceType: if a.Desc.Name == "pid" || a.Desc.Name == "uid" || a.Desc.Name == "gid" { @@ -196,47 +196,6 @@ func normalizePrio(prios [][]float32) { } } -func foreachArgType(meta *sys.Call, f func(sys.Type, ArgDir)) { - seen := make(map[sys.Type]bool) - var rec func(t sys.Type, dir ArgDir) - rec = func(t sys.Type, d ArgDir) { - f(t, d) - switch a := t.(type) { - case *sys.ArrayType: - rec(a.Type, d) - case *sys.PtrType: - rec(a.Type, ArgDir(a.Dir)) - case *sys.StructType: - if seen[a] { - return // prune recursion via pointers to structs/unions - } - seen[a] = true - for _, f := range a.Fields { - rec(f, d) - } - case *sys.UnionType: - if seen[a] { - return // prune recursion via pointers to structs/unions - } - seen[a] = true - for _, opt := range a.Options { - rec(opt, d) - } - case *sys.ResourceType, *sys.FileoffType, *sys.BufferType, - *sys.VmaType, *sys.LenType, *sys.FlagsType, *sys.ConstType, - *sys.StrConstType, *sys.IntType, *sys.FilenameType: - default: - panic("unknown type") - } - } - for _, t := range meta.Args { - rec(t, DirIn) - } - if meta.Ret != nil { - rec(meta.Ret, DirOut) - } -} - // ChooseTable allows to do a weighted choice of a syscall for a given syscall // based on call-to-call priorities and a set of enabled syscalls. type ChoiceTable struct { |
