aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-10-15 11:15:27 +0200
committerDmitry Vyukov <dvyukov@google.com>2017-10-16 14:21:54 +0200
commitf78642861b4dbe396a67d5e2a750e22f83f3edd5 (patch)
treede2808e3e9d47aa1687b259e8ab48e34731532bc /sys
parentd158fb9d3b6e03882c60a51854f149a8d2a637a0 (diff)
pkg/csource: support akaros
Diffstat (limited to 'sys')
-rw-r--r--sys/syz-sysgen/sysgen.go3
-rw-r--r--sys/targets/targets.go39
2 files changed, 31 insertions, 11 deletions
diff --git a/sys/syz-sysgen/sysgen.go b/sys/syz-sysgen/sysgen.go
index e34055f1c..c0d0cd21b 100644
--- a/sys/syz-sysgen/sysgen.go
+++ b/sys/syz-sysgen/sysgen.go
@@ -186,7 +186,6 @@ func generateExecutorSyscalls(target *targets.Target, syscalls []*prog.Syscall,
CARCH: target.CArch,
}
fake := make(map[string]uint64)
- syscallNumbers := targets.OSList[target.OS].SyscallNumbers
for _, c := range syscalls {
syz := strings.HasPrefix(c.CallName, "syz_")
if syz {
@@ -196,7 +195,7 @@ func generateExecutorSyscalls(target *targets.Target, syscalls []*prog.Syscall,
Name: c.Name,
CallName: c.CallName,
NR: int32(c.NR),
- NeedCall: syz || !syscallNumbers,
+ NeedCall: syz || !target.SyscallNumbers,
})
}
for name, nr := range fake {
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index c0abdf86b..042637306 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -4,6 +4,7 @@
package targets
type Target struct {
+ os
OS string
Arch string
PtrSize uint64
@@ -14,6 +15,15 @@ type Target struct {
KernelArch string
KernelHeaderArch string
KernelCrossCompile string
+ // NeedSyscallDefine is used by csource package to decide when to emit __NR_* defines.
+ NeedSyscallDefine func(nr uint64) bool
+}
+
+type os struct {
+ // Does the OS use syscall numbers (e.g. Linux) or has interface based on functions (e.g. fuchsia).
+ SyscallNumbers bool
+ // E.g. "__NR_" or "SYS_".
+ SyscallPrefix string
}
var List = map[string]map[string]*Target{
@@ -26,6 +36,11 @@ var List = map[string]map[string]*Target{
CCompilerPrefix: "x86_64-linux-gnu-",
KernelArch: "x86_64",
KernelHeaderArch: "x86",
+ NeedSyscallDefine: func(nr uint64) bool {
+ // Only generate defines for new syscalls
+ // (added after commit 8a1ab3155c2ac on 2012-10-04).
+ return nr >= 313
+ },
},
"386": {
PtrSize: 4,
@@ -87,19 +102,14 @@ var List = map[string]map[string]*Target{
},
"akaros": map[string]*Target{
"amd64": {
- PtrSize: 8,
- CArch: []string{"__x86_64__"},
+ PtrSize: 8,
+ CArch: []string{"__x86_64__"},
+ NeedSyscallDefine: dontNeedSyscallDefine,
},
},
}
-type OS struct {
- // Does the OS use syscall numbers (e.g. Linux) or has interface based on functions (e.g. fuchsia).
- SyscallNumbers bool
- SyscallPrefix string
-}
-
-var OSList = map[string]*OS{
+var oses = map[string]os{
"linux": {
SyscallNumbers: true,
SyscallPrefix: "__NR_",
@@ -123,8 +133,19 @@ var OSList = map[string]*OS{
func init() {
for OS, archs := range List {
for arch, target := range archs {
+ target.os = oses[OS]
target.OS = OS
target.Arch = arch
+ if target.NeedSyscallDefine == nil {
+ target.NeedSyscallDefine = needSyscallDefine
+ }
}
}
}
+
+func needSyscallDefine(nr uint64) bool {
+ return true
+}
+func dontNeedSyscallDefine(nr uint64) bool {
+ return false
+}