Documentation ¶
Overview ¶
Package builder contains the Builder type to build replay payloads.
Index ¶
- Constants
- Variables
- type Builder
- func (b *Builder) AllocateMemory(size uint64) value.Pointer
- func (b *Builder) AllocateTemporaryMemory(size uint64) value.Pointer
- func (b *Builder) BeginCommand(cmdID, threadID uint64)
- func (b *Builder) Buffer(count int) value.Pointer
- func (b *Builder) Build(ctx context.Context) (gapir.Payload, PostDataHandler, NotificationHandler, error)
- func (b *Builder) Call(f FunctionInfo)
- func (b *Builder) Clone(index int)
- func (b *Builder) CommitCommand()
- func (b *Builder) Copy(size uint64)
- func (b *Builder) Export(ctx context.Context) (gapir.Payload, error)
- func (b *Builder) JumpLabel(label uint32)
- func (b *Builder) JumpNZ(label uint32)
- func (b *Builder) Load(ty protocol.Type, addr value.Pointer)
- func (b *Builder) MapMemory(rng memory.Range)
- func (b *Builder) MemoryLayout() *device.MemoryLayout
- func (b *Builder) MemoryRanges() MappedMemoryRangeList
- func (b *Builder) Notification(addr value.Pointer, size uint64)
- func (b *Builder) Pop(count uint32)
- func (b *Builder) Post(addr value.Pointer, size uint64, p Postback)
- func (b *Builder) Push(val value.Value)
- func (b *Builder) RegisterNotificationReader(reader NotificationReader)
- func (b *Builder) ReserveMemory(rng memory.Range)
- func (b *Builder) RevertCommand(err error)
- func (b *Builder) Store(addr value.Pointer)
- func (b *Builder) StorePointer(idx value.PointerIndex, ptr value.Pointer)
- func (b *Builder) Strcpy(maxCount uint64)
- func (b *Builder) String(s string) value.Pointer
- func (b *Builder) Sub(num int32)
- func (b *Builder) UnmapMemory(rng memory.Range)
- func (b *Builder) Write(rng memory.Range, resourceID id.ID)
- type FunctionInfo
- type MappedMemoryRangeList
- func (l *MappedMemoryRangeList) Copy(to, from, count int)
- func (l *MappedMemoryRangeList) GetSpan(index int) interval.U64Span
- func (l *MappedMemoryRangeList) Length() int
- func (l *MappedMemoryRangeList) New(index int, span interval.U64Span)
- func (l *MappedMemoryRangeList) Resize(length int)
- func (l *MappedMemoryRangeList) SetSpan(index int, span interval.U64Span)
- type NotificationHandler
- type NotificationReader
- type PostDataHandler
- type Postback
Constants ¶
const ErrInvalidResource = fault.Const("Invaid resource")
Variables ¶
var ErrReplayNotExecuted = errors.New("replay was canceled")
ErrReplayNotExecuted indicate the replay request was canceled.
Functions ¶
This section is empty.
Types ¶
type Builder ¶
type Builder struct { // Remappings is a map of a arbitrary keys to pointers. Typically, this is // used as a map of observed values to values that are only known at replay // execution time, such as driver generated handles. // The Remappings field is not accessed by the Builder and can be used in any // way the developer requires. Remappings map[interface{}]value.Pointer // contains filtered or unexported fields }
Builder is used to build the Payload to send to the replay virtual machine. The builder has a number of methods for mutating the virtual machine stack, invoking functions and posting back data.
func New ¶
func New(memoryLayout *device.MemoryLayout, dependent *Builder) *Builder
New returns a newly constructed Builder configured to replay on a target with the specified MemoryLayout.
func (*Builder) AllocateMemory ¶
AllocateMemory allocates and returns a pointer to a block of memory in the volatile address-space big enough to hold size bytes. The memory will be allocated for the entire replay duration and cannot be freed.
func (*Builder) AllocateTemporaryMemory ¶
AllocateTemporaryMemory allocates and returns a pointer to a block of memory in the temporary volatile address-space big enough to hold size bytes. The memory block will be freed on the next call to CommitCommand/AbortCommand, upon which reading or writing to this memory will result in undefined behavior. TODO: REMOVE
func (*Builder) BeginCommand ¶ added in v0.5.0
BeginCommand should be called before building any replay instructions.
func (*Builder) Buffer ¶
Buffer returns a pointer to a block of memory in holding the count number of previously pushed values. If all the values are constant, then the buffer will be held in the constant address-space, otherwise the buffer will be built in the temporary address-space.
func (*Builder) Build ¶
func (b *Builder) Build(ctx context.Context) (gapir.Payload, PostDataHandler, NotificationHandler, error)
Build compiles the replay instructions, returning a Payload that can be sent to the replay virtual-machine and a PostDataHandler for interpreting the responses.
func (*Builder) Call ¶
func (b *Builder) Call(f FunctionInfo)
Call will invoke the function f, popping all parameter values previously pushed to the stack with Push, starting with the first parameter. If f has a non-void return type, after invoking the function the return value of the function will be pushed on to the stack.
func (*Builder) Clone ¶
Clone makes a copy of the n-th element from the top of the stack and pushes the copy to the top of the stack.
func (*Builder) CommitCommand ¶ added in v0.5.0
func (b *Builder) CommitCommand()
CommitCommand should be called after emitting the commands to replay a single command. CommitCommand frees all temporary allocated memory and clears the stack.
func (*Builder) Copy ¶
Copy pops the target address and then the source address from the top of the stack, and then copies Count bytes from source to target.
func (*Builder) Export ¶ added in v1.2.0
Export compiles the replay instructions, returning a Payload that can be sent to the replay virtual-machine.
func (*Builder) JumpLabel ¶ added in v1.6.0
JumpLabel adds a jump label to the instructions so that later can jump to that label and start execution from this label.
func (*Builder) JumpNZ ¶ added in v1.6.0
JumpNZ jumps to the instruction specified label if the value on top of the stack is not zero. Otherwise it will be be a Nop.
func (*Builder) Load ¶
Load loads the value of type ty from addr and then pushes the loaded value to the top of the stack.
func (*Builder) MapMemory ¶
MapMemory maps the memory range rng relative to the absolute pointer that is on the top of the stack. Any ObservedPointers that are used while the pointer is mapped will be automatically adjusted to the remapped address. The mapped memory range can be unmapped with a call to UnmapMemory.
func (*Builder) MemoryLayout ¶
func (b *Builder) MemoryLayout() *device.MemoryLayout
MemoryLayout returns the memory layout for the target replay device.
func (*Builder) MemoryRanges ¶ added in v1.3.1
func (b *Builder) MemoryRanges() MappedMemoryRangeList
func (*Builder) Notification ¶ added in v1.6.0
Notification asks the GAPIR to stream back the size bytes from addr. A Notification reader must be registered to read the data the from the stream.
func (*Builder) Post ¶
Post posts size bytes from addr to the decoder d. The decoder d must consume all size bytes before returning; failure to do this will corrupt all subsequent postbacks.
func (*Builder) RegisterNotificationReader ¶ added in v1.2.0
func (b *Builder) RegisterNotificationReader(reader NotificationReader)
func (*Builder) ReserveMemory ¶
ReserveMemory adds rng as a memory range that needs allocating for replay.
func (*Builder) RevertCommand ¶ added in v0.5.0
RevertCommand reverts all the instructions since the last call to BeginCommand. Any postbacks issued since the last call to BeginCommand will be called with the error err and a nil decoder.
func (*Builder) Store ¶
Store pops the value from the top of the stack and writes the value to addr.
func (*Builder) StorePointer ¶
func (b *Builder) StorePointer(idx value.PointerIndex, ptr value.Pointer)
StorePointer writes ptr to the target pointer index. Pointers are stored in a separate address space and can only be loaded using PointerIndex values.
func (*Builder) Strcpy ¶
Strcpy pops the source address then the target address from the top of the stack, and then copies at most maxCount-1 bytes from source to target. If maxCount is greater than the source string length, then the target will be padded with 0s. The destination buffer will always be 0-terminated.
func (*Builder) String ¶
String returns a pointer to a block of memory in the constant address-space holding the string s. The string will be stored with a null-terminating byte.
func (*Builder) Sub ¶ added in v1.6.0
Sub pops the value from top of stack, substracts by num and pushes back the result to the top of the stack.
func (*Builder) UnmapMemory ¶
UnmapMemory unmaps the memory range rng that was previously mapped with a call to MapMemory. If the memory range is not exactly a range previously mapped with a call to MapMemory then this function panics.
type FunctionInfo ¶
type FunctionInfo struct { ApiIndex uint8 // The index of the API this function belongs to. ID uint16 // The unique identifier for the function. ReturnType protocol.Type // The returns type of the function. Parameters int // The number of parameters for the function. }
FunctionInfo holds the information about a function that can be called by the replay virtual-machine.
type MappedMemoryRangeList ¶ added in v1.3.1
type MappedMemoryRangeList []mappedMemoryRange
MappedMemoryRangeList represents a bunch of mapped memory ranges, and the location that they are stored in the heap.
func (*MappedMemoryRangeList) Copy ¶ added in v1.3.1
func (l *MappedMemoryRangeList) Copy(to, from, count int)
Copy performs a copy of ranges within the MappedMemoryRangeList.
func (*MappedMemoryRangeList) GetSpan ¶ added in v1.3.1
func (l *MappedMemoryRangeList) GetSpan(index int) interval.U64Span
GetSpan returns the span of the range with the specified index in the MappedMemoryRangeList.
func (*MappedMemoryRangeList) Length ¶ added in v1.3.1
func (l *MappedMemoryRangeList) Length() int
Length returns the number of ranges in the MappedMemoryRangeList.
func (*MappedMemoryRangeList) New ¶ added in v1.3.1
func (l *MappedMemoryRangeList) New(index int, span interval.U64Span)
New replaces specified index in the MappedMemoryRangeList.
func (*MappedMemoryRangeList) Resize ¶ added in v1.3.1
func (l *MappedMemoryRangeList) Resize(length int)
Resize resizes the MappedMemoryRangeList to the specified length.
type NotificationHandler ¶ added in v1.2.0
type NotificationHandler func(p *gapir.Notification)
NotificationHandler handles the original Notification messages from the replay virtual machine.
type NotificationReader ¶ added in v1.2.0
type NotificationReader func(p gapir.Notification)
NotificationReader reads a given copy of notification message received from the replay virtual machine.
type PostDataHandler ¶ added in v1.2.0
PostDataHandler handles the original PostData messages, which may contains multiple pieces of post back data issued by multiple POST instructions, from the replay virual machine.