aboutsummaryrefslogtreecommitdiffstats
path: root/prog/prio.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-02-16 22:30:30 +0100
committerAleksandr Nogikh <nogikh@google.com>2024-02-21 14:46:08 +0000
commitf5e6708487700c7a4591240f7def9b356d206122 (patch)
tree874b5e335c2e1e8c61c1e26b6b8c7aa884c48c33 /prog/prio.go
parentecc726d47d5bbd5847ed472fb01ca9e87079c6a9 (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.go19
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