| # 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]]) |
| |
| 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 |
| } |
| |
| 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[BASE, CONST] { |
| f1 BASE[int8, CONST] |
| f2 BASE[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 |
| |
| 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]) |
| |
| # 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] |
| } |