diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-09-22 11:09:53 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-22 13:10:55 +0200 |
| commit | 913d592f973a0155647473eaa032711fe956f8a5 (patch) | |
| tree | 29b1b2083c00d199cf4d9a30917411d923b49ef4 /sys/syz-sysgen | |
| parent | c26ea367cfa790e86800ac025638ad50f95b8287 (diff) | |
all: more assorted fuchsia support
Diffstat (limited to 'sys/syz-sysgen')
| -rw-r--r-- | sys/syz-sysgen/sysgen.go | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/sys/syz-sysgen/sysgen.go b/sys/syz-sysgen/sysgen.go index 3aa98a16a..273bb7d04 100644 --- a/sys/syz-sysgen/sysgen.go +++ b/sys/syz-sysgen/sysgen.go @@ -71,7 +71,7 @@ func main() { if consts == nil { return } - prog := compiler.Compile(top, consts, job.Target.PtrSize, eh) + prog := compiler.Compile(top, consts, job.Target, eh) if prog == nil { return } @@ -168,8 +168,10 @@ func generate(target *targets.Target, prg *compiler.Prog, consts map[string]uint func generateExecutorSyscalls(target *targets.Target, syscalls []*prog.Syscall, rev string) []byte { type SyscallData struct { - Name string - NR int32 + Name string + CallName string + NR int32 + NeedCall bool } type ArchData struct { Revision string @@ -184,14 +186,24 @@ 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 { - data.Calls = append(data.Calls, SyscallData{c.Name, int32(c.NR)}) - if strings.HasPrefix(c.CallName, "syz_") { + syz := strings.HasPrefix(c.CallName, "syz_") + if syz { fake[c.CallName] = c.NR } + data.Calls = append(data.Calls, SyscallData{ + Name: c.Name, + CallName: c.CallName, + NR: int32(c.NR), + NeedCall: syz || !syscallNumbers, + }) } for name, nr := range fake { - data.Fake = append(data.Fake, SyscallData{name, int32(nr)}) + data.Fake = append(data.Fake, SyscallData{ + Name: name, + NR: int32(nr), + }) } sort.Slice(data.Calls, func(i, j int) bool { return data.Calls[i].Name < data.Calls[j].Name @@ -208,7 +220,7 @@ func generateExecutorSyscalls(target *targets.Target, syscalls []*prog.Syscall, func writeExecutorSyscalls(OS string, archs [][]byte) { buf := new(bytes.Buffer) - buf.WriteString(syscallsTempl) + buf.WriteString("// AUTOGENERATED FILE\n\n") for _, arch := range archs { buf.Write(arch) } @@ -247,22 +259,15 @@ func logf(v int, msg string, args ...interface{}) { } } -var syscallsTempl = `// AUTOGENERATED FILE - -struct call_t { - const char* name; - int sys_nr; -}; -` - var archTempl = template.Must(template.New("").Parse(` #if {{range $cdef := $.CARCH}}defined({{$cdef}}) || {{end}}0 #define GOARCH "{{.GOARCH}}" #define SYZ_REVISION "{{.Revision}}" {{range $c := $.Fake}}#define __NR_{{$c.Name}} {{$c.NR}} {{end}} -static call_t syscalls[] = { -{{range $c := $.Calls}} {"{{$c.Name}}", {{$c.NR}}}, +unsigned syscall_count = {{len $.Calls}}; +call_t syscalls[] = { +{{range $c := $.Calls}} {"{{$c.Name}}", {{$c.NR}}{{if $c.NeedCall}}, (syscall_t){{$c.CallName}}{{end}}}, {{end}} }; #endif |
