mirror of
https://github.com/reactos/syzkaller.git
synced 2024-11-24 03:49:45 +00:00
01d1494471
Using a build tag to exclude files for golangci-lint reduces memory consumption (it does not parse them). The naive attempt with skip-dirs did not work. So add codeanalysis build tag and use it in auto-generated files. Update #977
166 lines
5.9 KiB
Plaintext
166 lines
5.9 KiB
Plaintext
%{
|
|
// Copyright 2018 syzkaller project authors. All rights reserved.
|
|
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
|
|
|
|
// +build !codeanalysis
|
|
|
|
package parser
|
|
|
|
%}
|
|
|
|
%start syscall
|
|
|
|
%union {
|
|
data string
|
|
val_int int64
|
|
val_double float64
|
|
val_ret_type int64
|
|
val_uint uint64
|
|
val_constant Constant
|
|
val_identifiers []*BufferType
|
|
val_buf_type *BufferType
|
|
val_group_type *GroupType
|
|
val_type IrType
|
|
val_types []IrType
|
|
val_syscall *Syscall
|
|
}
|
|
|
|
%token <data> STRING_LITERAL IPV6 IDENTIFIER FLAG DATETIME SIGNAL_PLUS SIGNAL_MINUS MAC
|
|
%token <val_int> INT
|
|
%token <val_uint> UINT
|
|
%token <val_double> DOUBLE
|
|
%type <val_ret_type> ret_type
|
|
%type <val_buf_type> buf_type
|
|
%type <val_group_type> group_type
|
|
%type <val_constant> constant
|
|
%type <val_type> parenthetical, parentheticals, type, field_type
|
|
%type <val_types> types
|
|
%type <val_syscall> syscall
|
|
|
|
%token STRING_LITERAL MAC IDENTIFIER FLAG INT UINT QUESTION DOUBLE ARROW
|
|
%token OR AND LOR TIMES LAND LEQUAL ONESCOMP LSHIFT RSHIFT TIMES NOT MINUS PLUS
|
|
%token COMMA LBRACKET RBRACKET LBRACKET_SQUARE RBRACKET_SQUARE LPAREN RPAREN EQUALS
|
|
%token UNFINISHED RESUMED
|
|
%token SIGNAL_PLUS SIGNAL_MINUS NULL EQUALAT COLON FORWARDSLASH
|
|
|
|
%nonassoc LOWEST
|
|
%nonassoc NOFLAG
|
|
%nonassoc LBRACKET_SQUARE
|
|
|
|
%left OR
|
|
%left AND
|
|
%left LSHIFT RSHIFT
|
|
%left PLUS
|
|
%left MINUS
|
|
%left TIMES
|
|
%right NEG ONESCOMP
|
|
%left COLON
|
|
%left ARROW
|
|
%left EQUALS
|
|
%left EQUALAT
|
|
%%
|
|
syscall:
|
|
IDENTIFIER LPAREN types UNFINISHED %prec NOFLAG { $$ = NewSyscall(-1, $1, $3, int64(-1), true, false);
|
|
Stracelex.(*Stracelexer).result = $$ }
|
|
| RESUMED UNFINISHED RPAREN EQUALS QUESTION %prec NOFLAG
|
|
{
|
|
$$ = NewSyscall(-1, "tmp", nil, -1, true, true);
|
|
Stracelex.(*Stracelexer).result = $$
|
|
}
|
|
| IDENTIFIER LPAREN RESUMED RPAREN EQUALS INT %prec NOFLAG
|
|
{
|
|
$$ = NewSyscall(-1, $1, nil, int64($6), false, false);
|
|
Stracelex.(*Stracelexer).result = $$
|
|
}
|
|
|
|
| RESUMED types RPAREN EQUALS ret_type %prec NOFLAG { $$ = NewSyscall(-1, "tmp", $2, $5, false, true);
|
|
Stracelex.(*Stracelexer).result = $$ }
|
|
| RESUMED types RPAREN EQUALS QUESTION %prec NOFLAG { $$ = NewSyscall(-1, "tmp", $2, -1, false, true);
|
|
Stracelex.(*Stracelexer).result = $$ }
|
|
| RESUMED types RPAREN EQUALS ret_type LPAREN parentheticals RPAREN { $$ = NewSyscall(-1, "tmp", $2, $5, false, true);
|
|
Stracelex.(*Stracelexer).result = $$ }
|
|
|
|
| RESUMED types RPAREN EQUALS ret_type FLAG LPAREN parentheticals RPAREN { $$ = NewSyscall(-1, "tmp", $2, $5, false, true);
|
|
Stracelex.(*Stracelexer).result = $$ }
|
|
| IDENTIFIER LPAREN types RPAREN EQUALS ret_type %prec NOFLAG{
|
|
$$ = NewSyscall(-1, $1, $3, $6, false, false);
|
|
Stracelex.(*Stracelexer).result = $$}
|
|
| IDENTIFIER LPAREN types RPAREN EQUALS QUESTION %prec NOFLAG {
|
|
$$ = NewSyscall(-1, $1, $3, -1, false, false);
|
|
Stracelex.(*Stracelexer).result = $$}
|
|
| IDENTIFIER LPAREN types RPAREN EQUALS ret_type FLAG LPAREN parentheticals RPAREN {
|
|
$$ = NewSyscall(-1, $1, $3, $6, false, false);
|
|
Stracelex.(*Stracelexer).result = $$}
|
|
| IDENTIFIER LPAREN types RPAREN EQUALS ret_type LPAREN parentheticals RPAREN {
|
|
$$ = NewSyscall(-1, $1, $3, $6, false, false);
|
|
Stracelex.(*Stracelexer).result = $$}
|
|
| INT syscall {call := $2; call.Pid = $1; Stracelex.(*Stracelexer).result = call}
|
|
|
|
parentheticals:
|
|
parenthetical {$$ = nil}
|
|
| parentheticals parenthetical {$$ = nil}
|
|
|
|
parenthetical:
|
|
COMMA {$$=nil}
|
|
| OR {$$ = nil}
|
|
| AND {$$ = nil}
|
|
| LSHIFT {$$ = nil}
|
|
| RSHIFT {$$ = nil}
|
|
| IDENTIFIER {$$ = nil}
|
|
| FORWARDSLASH {$$ = nil}
|
|
| group_type {$$ = nil}
|
|
| FLAG {$$ = nil}
|
|
| INT {$$ = nil}
|
|
| UINT {$$ = nil}
|
|
|
|
ret_type:
|
|
INT {$$ = $1}
|
|
| UINT {$$ = int64($1)}
|
|
| MINUS INT {$$ = -1 * $2}
|
|
|
|
types:
|
|
{$$ = []IrType{}}
|
|
| types COMMA type {$1 = append($1, $3); $$ = $1}
|
|
| types type {$1 = append($1, $2); $$ = $1}
|
|
|
|
type:
|
|
buf_type {$$ = $1}
|
|
| field_type {$$ = $1}
|
|
| group_type {$$ = $1}
|
|
| constant %prec LOWEST {$$ = $1}
|
|
| ONESCOMP group_type {$$ = $2}
|
|
|
|
constant:
|
|
INT {$$ = Constant($1)}
|
|
| UINT {$$ = Constant($1)}
|
|
| NULL {$$ = Constant(uint64(0))}
|
|
| constant OR constant {$$ = $1 | $3}
|
|
| constant AND constant {$$ = $1 & $3}
|
|
| constant LSHIFT constant {$$ = $1 << $3}
|
|
| constant RSHIFT constant {$$ = $1 >> $3}
|
|
| LPAREN constant RPAREN {$$ = $2}
|
|
| constant TIMES constant {$$ = $1 * $3}
|
|
| constant MINUS constant {$$ = $1 - $3}
|
|
| constant PLUS constant {$$ = $1 + $3}
|
|
| ONESCOMP constant {$$ = ^$2}
|
|
| MINUS constant %prec NEG {$$ = Constant(-int64($2))}
|
|
|
|
group_type:
|
|
LBRACKET_SQUARE types RBRACKET_SQUARE {$$ = newGroupType($2)}
|
|
| LBRACKET types RBRACKET {$$ = newGroupType($2)}
|
|
| LBRACKET types COMMA RBRACKET {$$ = newGroupType($2)}
|
|
|
|
field_type:
|
|
type COLON type {$$ = $3}
|
|
| type EQUALAT type {$$ = $3}
|
|
| type EQUALS type {$$ = $3}
|
|
| type ARROW type {$$ = $1}
|
|
| IDENTIFIER LBRACKET_SQUARE FLAG RBRACKET_SQUARE EQUALS type {$$ = $6}
|
|
|
|
buf_type:
|
|
STRING_LITERAL {$$ = newBufferType($1)}
|
|
| IDENTIFIER %prec LOWEST {$$ = newBufferType($1)}
|
|
| DATETIME {$$ = newBufferType($1)}
|
|
| MAC {$$ = newBufferType($1)}
|
|
|