From 6aad7497a8cacce2ec47dbb5e51fc422206e7bca Mon Sep 17 00:00:00 2001 From: Marco Vanotti Date: Tue, 9 Jul 2019 15:26:10 -0700 Subject: sys/syz-extract: Add "DefineGlibcUse" flag. Instead of defining the __GLIBC_USE macro on every OS, we are just defining it based on a parameter. That parameter is set to false for all OSs except for fuchsia. --- sys/syz-extract/akaros.go | 2 +- sys/syz-extract/fetch.go | 26 +++++++++++++++----------- sys/syz-extract/freebsd.go | 2 +- sys/syz-extract/fuchsia.go | 2 +- sys/syz-extract/linux.go | 2 +- sys/syz-extract/netbsd.go | 2 +- sys/syz-extract/openbsd.go | 2 +- sys/syz-extract/trusty.go | 2 +- sys/syz-extract/windows.go | 2 +- 9 files changed, 23 insertions(+), 19 deletions(-) diff --git a/sys/syz-extract/akaros.go b/sys/syz-extract/akaros.go index ecd609458..294152e4f 100644 --- a/sys/syz-extract/akaros.go +++ b/sys/syz-extract/akaros.go @@ -41,5 +41,5 @@ func (*akaros) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uin args = append(args, "-I"+dir) } } - return extract(info, "gcc", args, "", true) + return extract(info, "gcc", args, "", true, false) } diff --git a/sys/syz-extract/fetch.go b/sys/syz-extract/fetch.go index ecd529970..f2cf178cd 100644 --- a/sys/syz-extract/fetch.go +++ b/sys/syz-extract/fetch.go @@ -16,14 +16,15 @@ import ( "github.com/google/syzkaller/pkg/osutil" ) -func extract(info *compiler.ConstInfo, cc string, args []string, addSource string, declarePrintf bool) ( +func extract(info *compiler.ConstInfo, cc string, args []string, addSource string, declarePrintf bool, defineGlibcUse bool) ( map[string]uint64, map[string]bool, error) { data := &CompileData{ - AddSource: addSource, - Defines: info.Defines, - Includes: info.Includes, - Values: info.Consts, - DeclarePrintf: declarePrintf, + AddSource: addSource, + Defines: info.Defines, + Includes: info.Includes, + Values: info.Consts, + DeclarePrintf: declarePrintf, + DefineGlibcUse: defineGlibcUse, } undeclared := make(map[string]bool) bin, out, err := compile(cc, args, data) @@ -89,11 +90,12 @@ func extract(info *compiler.ConstInfo, cc string, args []string, addSource strin } type CompileData struct { - AddSource string - Defines map[string]string - Includes []string - Values []string - DeclarePrintf bool + AddSource string + Defines map[string]string + Includes []string + Values []string + DeclarePrintf bool + DefineGlibcUse bool // workaround for incorrect flags to clang for fuchsia. } func compile(cc string, args []string, data *CompileData) (bin string, out []byte, err error) { @@ -122,9 +124,11 @@ func compile(cc string, args []string, data *CompileData) (bin string, out []byt var srcTemplate = template.Must(template.New("").Parse(` #define __asm__(...) +{{if .DefineGlibcUse}} #ifndef __GLIBC_USE # define __GLIBC_USE(X) 0 #endif +{{end}} {{range $incl := $.Includes}} #include <{{$incl}}> diff --git a/sys/syz-extract/freebsd.go b/sys/syz-extract/freebsd.go index 19ca0e11c..e5256521b 100644 --- a/sys/syz-extract/freebsd.go +++ b/sys/syz-extract/freebsd.go @@ -56,5 +56,5 @@ func (*freebsd) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]ui args = append(args, "-I"+dir) } } - return extract(info, "gcc", args, "#include ", true) + return extract(info, "gcc", args, "#include ", true, false) } diff --git a/sys/syz-extract/fuchsia.go b/sys/syz-extract/fuchsia.go index 9ec5e117d..c544fe3e7 100644 --- a/sys/syz-extract/fuchsia.go +++ b/sys/syz-extract/fuchsia.go @@ -37,5 +37,5 @@ func (*fuchsia) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]ui for _, incdir := range info.Incdirs { args = append(args, "-I"+filepath.Join(dir, incdir)) } - return extract(info, cc, args, "", true) + return extract(info, cc, args, "", true, true) } diff --git a/sys/syz-extract/linux.go b/sys/syz-extract/linux.go index 3ca100b73..c5932e30b 100644 --- a/sys/syz-extract/linux.go +++ b/sys/syz-extract/linux.go @@ -147,7 +147,7 @@ unsigned long phys_base; unsigned long __phys_addr(unsigned long addr) { return 0; } #endif ` - res, undeclared, err := extract(info, "gcc", args, addSource, true) + res, undeclared, err := extract(info, "gcc", args, addSource, true, false) if err != nil { return nil, nil, err } diff --git a/sys/syz-extract/netbsd.go b/sys/syz-extract/netbsd.go index 878a63584..0ff12680d 100644 --- a/sys/syz-extract/netbsd.go +++ b/sys/syz-extract/netbsd.go @@ -91,7 +91,7 @@ func (*netbsd) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uin info.Consts = append(info.Consts, compat) } } - res, undeclared, err := extract(info, "gcc", args, "#include ", false) + res, undeclared, err := extract(info, "gcc", args, "#include ", false, false) for orig, compats := range compatNames { for _, compat := range compats { if undeclared[orig] && !undeclared[compat] { diff --git a/sys/syz-extract/openbsd.go b/sys/syz-extract/openbsd.go index c01012a23..1a56c18db 100644 --- a/sys/syz-extract/openbsd.go +++ b/sys/syz-extract/openbsd.go @@ -76,7 +76,7 @@ func (*openbsd) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]ui info.Consts = append(info.Consts, compat) } } - res, undeclared, err := extract(info, "gcc", args, "#include ", false) + res, undeclared, err := extract(info, "gcc", args, "#include ", false, false) for orig, compats := range compatNames { for _, compat := range compats { if undeclared[orig] && !undeclared[compat] { diff --git a/sys/syz-extract/trusty.go b/sys/syz-extract/trusty.go index 71a38a968..6bd5d6bfa 100644 --- a/sys/syz-extract/trusty.go +++ b/sys/syz-extract/trusty.go @@ -39,5 +39,5 @@ func (*trusty) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uin args = append(args, "-I"+dir) } } - return extract(info, "gcc", args, "", true) + return extract(info, "gcc", args, "", true, false) } diff --git a/sys/syz-extract/windows.go b/sys/syz-extract/windows.go index c1fd0ad01..d74ef505d 100644 --- a/sys/syz-extract/windows.go +++ b/sys/syz-extract/windows.go @@ -18,5 +18,5 @@ func (*windows) prepareArch(arch *Arch) error { } func (*windows) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uint64, map[string]bool, error) { - return extract(info, "cl", nil, "", true) + return extract(info, "cl", nil, "", true, false) } -- cgit mrf-deployment