From f5e6708487700c7a4591240f7def9b356d206122 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Fri, 16 Feb 2024 22:30:30 +0100 Subject: prog: remove side effects of BuildChoiceTable The function modifies its arguments, which makes it problematic to call it multiple times. Refactor it. --- prog/prio.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'prog/prio.go') 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 -- cgit mrf-deployment