diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-10-28 21:32:41 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-10-29 18:02:20 +0100 |
| commit | a0c7169a00e97fc53358f90c9d9c6f8fffddf904 (patch) | |
| tree | a980a4ebb36d73565486e3fb9af7868153f5ac51 /pkg/kconfig | |
| parent | 36e8b020cd7e97bc2ca3a306f48d4c62ece8fc34 (diff) | |
pkg/kconfig: accept target when parsing Kconfig
Kconfig depends on the target arch.
Add target argument for Kconfig parsing.
Resolve $(SRCARCH) properly (previously we always assumed x86_64).
Diffstat (limited to 'pkg/kconfig')
| -rw-r--r-- | pkg/kconfig/fuzz.go | 6 | ||||
| -rw-r--r-- | pkg/kconfig/kconfig.go | 12 | ||||
| -rw-r--r-- | pkg/kconfig/kconfig_test.go | 5 | ||||
| -rw-r--r-- | pkg/kconfig/minimize_test.go | 4 |
4 files changed, 20 insertions, 7 deletions
diff --git a/pkg/kconfig/fuzz.go b/pkg/kconfig/fuzz.go index 953e750a5..554ad8afd 100644 --- a/pkg/kconfig/fuzz.go +++ b/pkg/kconfig/fuzz.go @@ -3,8 +3,12 @@ package kconfig +import ( + "github.com/google/syzkaller/sys/targets" +) + func FuzzParseKConfig(data []byte) int { - ParseData(data, "kconfig") + ParseData(targets.Get("linux", "amd64"), data, "kconfig") return 0 } diff --git a/pkg/kconfig/kconfig.go b/pkg/kconfig/kconfig.go index a4786711e..40e19b9af 100644 --- a/pkg/kconfig/kconfig.go +++ b/pkg/kconfig/kconfig.go @@ -12,6 +12,8 @@ import ( "path/filepath" "strings" "sync" + + "github.com/google/syzkaller/sys/targets" ) // KConfig represents a parsed Kconfig file (including includes). @@ -107,6 +109,7 @@ func (m *Menu) Prompt() string { type kconfigParser struct { *parser + target *targets.Target includes []*parser stack []*Menu cur *Menu @@ -114,17 +117,18 @@ type kconfigParser struct { helpIdent int } -func Parse(file string) (*KConfig, error) { +func Parse(target *targets.Target, file string) (*KConfig, error) { data, err := ioutil.ReadFile(file) if err != nil { return nil, fmt.Errorf("failed to open Kconfig file %v: %v", file, err) } - return ParseData(data, file) + return ParseData(target, data, file) } -func ParseData(data []byte, file string) (*KConfig, error) { +func ParseData(target *targets.Target, data []byte, file string) (*KConfig, error) { kp := &kconfigParser{ parser: newParser(data, file), + target: target, baseDir: filepath.Dir(file), } kp.parseFile() @@ -403,5 +407,5 @@ func (kp *kconfigParser) parseDefaultValue() { } func (kp *kconfigParser) expandString(str string) string { - return strings.Replace(str, "$(SRCARCH)", "x86", -1) + return strings.Replace(str, "$(SRCARCH)", kp.target.KernelHeaderArch, -1) } diff --git a/pkg/kconfig/kconfig_test.go b/pkg/kconfig/kconfig_test.go index e3bdd8668..994f1856f 100644 --- a/pkg/kconfig/kconfig_test.go +++ b/pkg/kconfig/kconfig_test.go @@ -6,6 +6,8 @@ package kconfig import ( "fmt" "testing" + + "github.com/google/syzkaller/sys/targets" ) func TestParseKConfig(t *testing.T) { @@ -21,9 +23,10 @@ config FOO `, }, } + target := targets.Get("linux", "amd64") for i, test := range tests { t.Run(fmt.Sprint(i), func(t *testing.T) { - kconf, err := ParseData([]byte(test.in), "Kconfig") + kconf, err := ParseData(target, []byte(test.in), "Kconfig") if err != nil { t.Fatal(err) } diff --git a/pkg/kconfig/minimize_test.go b/pkg/kconfig/minimize_test.go index 877df89b5..24738ebeb 100644 --- a/pkg/kconfig/minimize_test.go +++ b/pkg/kconfig/minimize_test.go @@ -7,6 +7,8 @@ import ( "bytes" "fmt" "testing" + + "github.com/google/syzkaller/sys/targets" ) func TestMinimize(t *testing.T) { @@ -62,7 +64,7 @@ CONFIG_C=y `, }, } - kconf, err := ParseData([]byte(kconfig), "kconf") + kconf, err := ParseData(targets.Get("linux", "amd64"), []byte(kconfig), "kconf") if err != nil { t.Fatal(err) } |
