aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Vanotti <mvanotti@google.com>2019-07-09 15:26:10 -0700
committerDmitry Vyukov <dvyukov@google.com>2019-07-16 16:34:29 +0200
commit6aad7497a8cacce2ec47dbb5e51fc422206e7bca (patch)
treeb0853ef96e42d1b55caba1c921a20c70b079e62f
parent75b7c614dd5a954821fff6cdf08939a7f1cd936b (diff)
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.
-rw-r--r--sys/syz-extract/akaros.go2
-rw-r--r--sys/syz-extract/fetch.go26
-rw-r--r--sys/syz-extract/freebsd.go2
-rw-r--r--sys/syz-extract/fuchsia.go2
-rw-r--r--sys/syz-extract/linux.go2
-rw-r--r--sys/syz-extract/netbsd.go2
-rw-r--r--sys/syz-extract/openbsd.go2
-rw-r--r--sys/syz-extract/trusty.go2
-rw-r--r--sys/syz-extract/windows.go2
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 <sys/syscall.h>", true)
+ return extract(info, "gcc", args, "#include <sys/syscall.h>", 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 <sys/syscall.h>", false)
+ res, undeclared, err := extract(info, "gcc", args, "#include <sys/syscall.h>", 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 <sys/syscall.h>", false)
+ res, undeclared, err := extract(info, "gcc", args, "#include <sys/syscall.h>", 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)
}