aboutsummaryrefslogtreecommitdiffstats
path: root/prog/prio.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-10-19 14:41:46 +0200
committerDmitry Vyukov <dvyukov@google.com>2016-11-11 14:27:54 -0800
commitd3a93e8370682fa5231bc94faf11ed3681b2ac99 (patch)
treea3f5827fe456cb7cc5f47e870c6069c0497ca3e5 /prog/prio.go
parent959ec07095ff4ec4423a1365e0f0f94844a77507 (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.go43
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 {