diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2015-12-27 12:20:00 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2015-12-27 12:20:00 +0100 |
| commit | 4d3db6d4c86f0b3162a39dbef1d1fc8031062b10 (patch) | |
| tree | 1e6527d63d83bb600cc6a2f6aa009fc28cf679e5 /prog/prio.go | |
| parent | 524a2ae38f5506c2948faa035d99debaa2d63b52 (diff) | |
host: detect unsupported syscalls
Also detect transitively unsupported syscalls,
that is, syscalls for which all syscalls that can create
input arguments are disabled.
Diffstat (limited to 'prog/prio.go')
| -rw-r--r-- | prog/prio.go | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/prog/prio.go b/prog/prio.go index 234937037..2e6e46da2 100644 --- a/prog/prio.go +++ b/prog/prio.go @@ -227,26 +227,29 @@ func foreachArgType(meta *sys.Call, f func(sys.Type, ArgDir)) { type ChoiceTable struct { run [][]int enabledCalls []*sys.Call - enabled map[int]bool + enabled map[*sys.Call]bool } -func BuildChoiceTable(prios [][]float32, enabledCalls []*sys.Call) *ChoiceTable { - if len(enabledCalls) == 0 { - enabledCalls = sys.Calls +func BuildChoiceTable(prios [][]float32, enabled map[*sys.Call]bool) *ChoiceTable { + if enabled == nil { + enabled = make(map[*sys.Call]bool) + for _, c := range sys.Calls { + enabled[c] = true + } } - enabled := make(map[int]bool) - for _, c := range enabledCalls { - enabled[c.ID] = true + var enabledCalls []*sys.Call + for c := range enabled { + enabledCalls = append(enabledCalls, c) } run := make([][]int, len(sys.Calls)) for i := range run { - if !enabled[i] { + if !enabled[sys.Calls[i]] { continue } run[i] = make([]int, len(sys.Calls)) sum := 0 for j := range run[i] { - if enabled[j] { + if enabled[sys.Calls[j]] { sum += int(prios[i][j] * 1000) } run[i][j] = sum @@ -269,7 +272,7 @@ func (ct *ChoiceTable) Choose(r *rand.Rand, call int) int { for { x := r.Intn(run[len(run)-1]) i := sort.SearchInts(run, x) - if !ct.enabled[i] { + if !ct.enabled[sys.Calls[i]] { continue } return i |
