aboutsummaryrefslogtreecommitdiffstats
path: root/sysgen
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-11-16 19:14:05 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-11-16 19:14:05 +0100
commit6892001bbc38e19c6f06cf9e78390962b007bc4f (patch)
tree835227d2296bbbbcce282251567d4cd993db06b7 /sysgen
parent3716eb38300268c5400907f4e2178a5d96440d59 (diff)
add tty-related ioctl's
Diffstat (limited to 'sysgen')
-rw-r--r--sysgen/parser.go36
-rw-r--r--sysgen/sysgen.go9
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 {