diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2015-11-16 19:14:05 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2015-11-16 19:14:05 +0100 |
| commit | 6892001bbc38e19c6f06cf9e78390962b007bc4f (patch) | |
| tree | 835227d2296bbbbcce282251567d4cd993db06b7 /sysgen | |
| parent | 3716eb38300268c5400907f4e2178a5d96440d59 (diff) | |
add tty-related ioctl's
Diffstat (limited to 'sysgen')
| -rw-r--r-- | sysgen/parser.go | 36 | ||||
| -rw-r--r-- | sysgen/sysgen.go | 9 |
2 files changed, 31 insertions, 14 deletions
diff --git a/sysgen/parser.go b/sysgen/parser.go index 92c27c58a..7d322eec4 100644 --- a/sysgen/parser.go +++ b/sysgen/parser.go @@ -67,21 +67,29 @@ func (p *Parser) SkipWs() { } func (p *Parser) Ident() string { - i := p.i - for p.i < len(p.s) && - (p.s[p.i] >= 'a' && p.s[p.i] <= 'z' || - p.s[p.i] >= 'A' && p.s[p.i] <= 'Z' || - p.s[p.i] >= '0' && p.s[p.i] <= '9' || - p.s[p.i] == '_' || p.s[p.i] == '$') { // $ is for n-way syscalls (like ptrace$peek) - p.i++ - } - if i == p.i { - p.failf("failed to parse identifier at pos %v", i) - } - if ch := p.s[i]; ch >= '0' && ch <= '9' { - // p.failf("identifier starts with a digit at pos %v", i) + start, end := p.i, 0 + if p.Char() == '"' { + p.Parse('"') + start++ + for p.Char() != '"' { + p.i++ + } + end = p.i + p.Parse('"') + } else { + for p.i < len(p.s) && + (p.s[p.i] >= 'a' && p.s[p.i] <= 'z' || + p.s[p.i] >= 'A' && p.s[p.i] <= 'Z' || + p.s[p.i] >= '0' && p.s[p.i] <= '9' || + p.s[p.i] == '_' || p.s[p.i] == '$') { // $ is for n-way syscalls (like ptrace$peek) + p.i++ + } + if start == p.i { + p.failf("failed to parse identifier at pos %v", start) + } + end = p.i } - s := p.s[i:p.i] + s := p.s[start:end] p.SkipWs() return s } diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go index ba75afcb7..8a9cb6335 100644 --- a/sysgen/sysgen.go +++ b/sysgen/sysgen.go @@ -232,6 +232,11 @@ func generateArg(name, typ string, a []string, structs map[string]Struct, unname val = a[0] } fmt.Fprintf(out, "ConstType{%v, TypeSize: %v, Val: uintptr(%v)}", common(), size, val) + case "strconst": + if want := 1; len(a) != want { + failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) + } + fmt.Fprintf(out, "PtrType{%v, Dir: %v, Type: StrConstType{%v, Val: \"%v\"}}", common(), fmtDir("in"), common(), a[0]) case "int8", "int16", "int32", "int64", "intptr": if want := 0; len(a) != want { failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) @@ -319,6 +324,8 @@ func fmtFdKind(s string) string { return "FdInotify" case "fanotify": return "FdFanotify" + case "tty": + return "FdTty" default: failf("bad fd type %v", s) return "" @@ -406,6 +413,8 @@ struct call_t { #define __NR_memfd_create 319 #endif +#define __NR_syz_openpts 1000001 + call_t syscalls[] = { `) for _, s := range syscalls { |
