diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-02-16 22:30:30 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-02-21 14:46:08 +0000 |
| commit | f5e6708487700c7a4591240f7def9b356d206122 (patch) | |
| tree | 874b5e335c2e1e8c61c1e26b6b8c7aa884c48c33 /prog/prio.go | |
| parent | ecc726d47d5bbd5847ed472fb01ca9e87079c6a9 (diff) | |
prog: remove side effects of BuildChoiceTable
The function modifies its arguments, which makes it problematic to call
it multiple times. Refactor it.
Diffstat (limited to 'prog/prio.go')
| -rw-r--r-- | prog/prio.go | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/prog/prio.go b/prog/prio.go index 681708893..9a74155b0 100644 --- a/prog/prio.go +++ b/prog/prio.go @@ -196,16 +196,16 @@ func (target *Target) BuildChoiceTable(corpus []*Prog, enabled map[*Syscall]bool } } noGenerateCalls := make(map[int]bool) + enabledCalls := make(map[*Syscall]bool) for call := range enabled { - if call.Attrs.Disabled { - delete(enabled, call) - } else if call.Attrs.NoGenerate { + if call.Attrs.NoGenerate { noGenerateCalls[call.ID] = true - delete(enabled, call) + } else if !call.Attrs.Disabled { + enabledCalls[call] = true } } var generatableCalls []*Syscall - for c := range enabled { + for c := range enabledCalls { generatableCalls = append(generatableCalls, c) } if len(generatableCalls) == 0 { @@ -216,8 +216,11 @@ func (target *Target) BuildChoiceTable(corpus []*Prog, enabled map[*Syscall]bool }) for _, p := range corpus { for _, call := range p.Calls { - if !enabled[call.Meta] && !noGenerateCalls[call.Meta.ID] { + if !enabledCalls[call.Meta] && !noGenerateCalls[call.Meta.ID] { fmt.Printf("corpus contains disabled syscall %v\n", call.Meta.Name) + for call := range enabled { + fmt.Printf("%s: enabled\n", call.Name) + } panic("disabled syscall") } } @@ -228,13 +231,13 @@ func (target *Target) BuildChoiceTable(corpus []*Prog, enabled map[*Syscall]bool // This helps in quick binary search with biases when generating programs. // This only applies for system calls that are enabled for the target. for i := range run { - if !enabled[target.Syscalls[i]] { + if !enabledCalls[target.Syscalls[i]] { continue } run[i] = make([]int32, len(target.Syscalls)) var sum int32 for j := range run[i] { - if enabled[target.Syscalls[j]] { + if enabledCalls[target.Syscalls[j]] { sum += prios[i][j] } run[i][j] = sum |
