blob: 7df52dd2f829f42131ee7b862e8fb54224303e4c [file] [log] [blame]
# 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.
foo$0(a int8)
foo$1(a int8[C1:C2])
foo$2(a ptr[out, array[int32]])
foo$3(a union_arg)
foo$4() r0
foo$5(a int8['a':'z'])
foo$6(a int8[-20:-10])
foo$7(a int8[-20:20])
foo$8(a ptr[in, strings])
foo$9(a ptr[out, ptr[in, string]])
foo$10(a ptr[out, buffer[in]])
foo$11(a int64[1:100, 2])
foo$12(a int64[0:-1, 0x1000])
resource r0[intptr]
union_arg [
f1 int8
f2 int64
f3 ptr[in, int32]
f4 r0
f5 const[1, intptr]
f6 flags[int_flags, int32]
f7 proc[0, 1, int16]
]
strings {
f1 string
f2 string["foo"]
f3 string["foo", 10]
f4 string[string_flags1, 10]
f5 stringnoz
f6 stringnoz["foo"]
f7 string[""]
f8 string["", 10]
f9 stringnoz[""]
f11 stringnoz[string_flags1]
f12 string[string_flags2]
f13 stringnoz[string_flags2]
} [packed]
string_flags1 = "foo", "barbaz"
string_flags2 = ""
int_flags = 0, 1, 0xabc, 'x', -11
_ = 1, 2
_ = C1, C2
# Proc type.
proc_struct1 {
f1 proc[C0, 8, int8]
}
foo$proc1(a ptr[in, proc_struct1])
# Len/bytesize types.
type len_templ1[DATA1, DATA2] {
data DATA1
inner len_temp2[DATA2]
}
type len_temp2[DATA] {
data DATA
len len[len_templ1, int8]
}
foo$len_templ(a ptr[in, len_templ1[int8, int16]])
foo$len_var0(a ptr[in, array[string]], b len[a])
foo$len_var1(a ptr[in, array[string]], b ptr[in, len[a, int32]])
len_expr1 {
f11 len_expr2
f12 bytesize[syscall:b, int32]
}
len_expr2 {
f21 len_expr3
f22 len_expr4
f23 ptr[in, len_expr4]
f24 ptr[in, ptr[in, len_expr4]]
f25 len[f21:f31, int32]
}
len_expr3 {
f31 int32
f32 bytesize[len_expr2:f21, int32]
f33 bytesize[len_expr2:f22:f41, int32]
f34 bytesize[len_expr1:f11:f22:f41, int32]
f35 bytesize[len_expr2:f23:f41, int32]
f36 bytesize[len_expr2:f24:f41, int32]
f37 offsetof[f32, int32]
f38 offsetof[len_expr2:f21, int32]
}
len_expr4 {
f41 int32
}
foo$len_expr(a ptr[in, len_expr1], b ptr[in, array[int8, 3]])
# Pointer type.
foo$ptr(a ptr[in, int64])
foo$ptr64(a ptr64[in, int64])
foo$vma(a vma)
foo$vma64(a vma64)
# Void type.
void0 {
f void
}
void1 {
f1 void
f2 int8
}
void2 {
f1 void
f2 int8
}
void3 [
f1 void
f2 int8
]
void4 [
f1 void
f2 int8
] [varlen]
void5 {
f1 void
f2 void
}
struct_with_void0 {
f1 int8
f2 array[array[void]]
f3 int64
}
struct_with_void1 {
f1 int8
f2 array[void5]
f3 int64
f4 optional[int8]
}
foo$void0(a ptr[in, void0])
foo$void1(a ptr[in, void1])
foo$void2(a ptr[in, void2])
foo$void3(a ptr[in, void3])
foo$void4(a ptr[in, void4])
foo$void5(a ptr[in, void5])
foo$void6(a ptr[in, struct_with_void0])
foo$void7(a ptr[in, struct_with_void1])
foo$void8(a ptr[in, void])
# Bitfields.
bitfield0 {
f1 int8:1
f2 int8:2
f3 int16:8[-127:0]
f4 int16:8[0:255]
f5 int64:64[-1:1]
}
foo$bitfield0(a ptr[in, bitfield0])
# Type templates.
type type0 int8
type templ0[A, B] const[A, B]
type templ2[STR] string[STR]
type type3 templ2["a"]
type templ_struct0[A, B] {
len len[parent, int16]
typ const[A, int16]
data B
} [align_4]
type templ_struct1[C] {
f1 const[C, int8]
f2 int8[0:C]
}
union_with_templ_struct [
f1 templ_struct0[C1, type0]
f2 templ_struct0[C2, struct0]
] [varlen]
struct0 {
f1 int8
f2 int16
}
type templ_base0[TYPE, CONST] {
f1 TYPE
f2 const[CONST, int32]
}
type templ_base1[TYPE, CONST] {
f2 const[CONST, int8]
f1 TYPE
}
type templ_templ[TMPL, CONST] {
f1 TMPL[int8, CONST]
f2 TMPL[int32, 0]
}
templ_templ_use {
f1 templ_templ[templ_base0, 0]
f2 templ_templ[templ_base1, 1]
}
type templ_struct2[A] templ_struct0[A, int8]
type templ_struct3 templ_struct2[C1]
type templ_struct4 templ_struct3
type templ_struct5 templ_struct0[C1, templ_struct0[C2, int8]]
type templ_struct6 templ_struct0[C1, templ_struct2[C2]]
type templ_union union_with_templ_struct
type templ_base3[BASE] BASE
type templ_base4[BASE] const[0, BASE]
type templ_base5[VAL, BASE] const[VAL, BASE]
foo$templ0(a templ0[42, int8])
foo$templ1(a ptr[in, templ_struct0[C2, int8]])
foo$templ2(a ptr[in, union_with_templ_struct])
foo$templ3(a ptr[in, templ_struct1[1]], b ptr[in, templ_struct1[2]])
foo$templ4(a ptr[in, templ_struct1[3]])
foo$templ5(a ptr[in, templ_struct1[3]])
foo$templ6(a ptr[in, templ_struct4])
foo$templ7(a ptr[in, templ_struct5], b ptr[in, templ_struct6], c ptr[in, templ_union], d ptr[in, type3])
foo$templ8(a ptr[in, templ_templ_use])
foo$templ9(a ptr[in, templ_base3[int64]])
foo$templ10(a ptr[in, templ_base4[int8]])
foo$templ11(a ptr[in, templ_base5[42, int8]])
# Structs.
s0 {
f1 int8
} [size[64]]
s1 {
f1 int8
} [size[C2]]
foo$s0(a ptr[in, s0], b ptr[in, s1])
# Unions.
u0 [
f1 int32
]
foo$u0(a ptr[in, u0])
# fmt
foo$fmt0(a ptr[in, fmt[dec, int32[1:10]]])
foo$fmt1(a ptr[in, fmt[hex, flags[int_flags]]])
foo$fmt2(a ptr[in, fmt[oct, len[b]]], b ptr[in, array[int8]])
foo$fmt3(a ptr[in, fmt[dec, proc[10, 20]]])
foo$fmt4(a ptr[in, fmt[dec, r0]])
foo$fmt5(a ptr[in, struct$fmt0])
struct$fmt0 {
f0 fmt[dec, int8]
}