// Copyright 2015 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.
packageprog
import(
"github.com/google/syzkaller/sys"
)
typeProgstruct{
Calls[]*Call
}
typeCallstruct{
Meta*sys.Call
Args[]*Arg
Ret*Arg
}
typeArgstruct{
Call*Call
Typesys.Type
KindArgKind
DirArgDir
Valuintptr// value of ArgConst
AddrPageuintptr// page index for ArgPointer address, page count for ArgPageSize
AddrOffsetint// page offset for ArgPointer address
Data[]byte// data of ArgData
Inner[]*Arg// subargs of ArgGroup
Res*Arg// target of ArgResult, pointee for ArgPointer
Usesmap[*Arg]bool// this arg is used by those ArgResult args
OpDivuintptr// divide result for ArgResult (executed before OpAdd)
OpAdduintptr// add to result for ArgResult
}
typeArgKindint
const(
ArgConstArgKind=iota
ArgResult
ArgPointer// even if these are always constant (for reproducibility), we use a separate type because they are represented in an abstract (base+page+offset) form
ArgPageSize// same as ArgPointer but base is not added, so it represents "lengths" in pages
ArgData
ArgGroup// logical group of args (struct or array)
ArgReturn// fake value denoting syscall return value