builder

package
v1.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2019 License: Apache-2.0 Imports: 20 Imported by: 26

Documentation

Overview

Package builder contains the Builder type to build replay payloads.

Index

Constants

View Source
const ErrInvalidResource = fault.Const("Invaid resource")

Variables

View Source
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

func (b *Builder) AllocateMemory(size uint64) value.Pointer

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

func (b *Builder) AllocateTemporaryMemory(size uint64) value.Pointer

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

func (b *Builder) BeginCommand(cmdID, threadID uint64)

BeginCommand should be called before building any replay instructions.

func (*Builder) Buffer

func (b *Builder) Buffer(count int) value.Pointer

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

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

func (b *Builder) Clone(index int)

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

func (b *Builder) Copy(size uint64)

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

func (b *Builder) Export(ctx context.Context) (gapir.Payload, error)

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

func (b *Builder) JumpLabel(label uint32)

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

func (b *Builder) JumpNZ(label uint32)

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

func (b *Builder) Load(ty protocol.Type, addr value.Pointer)

Load loads the value of type ty from addr and then pushes the loaded value to the top of the stack.

func (*Builder) MapMemory

func (b *Builder) MapMemory(rng memory.Range)

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

func (b *Builder) Notification(addr value.Pointer, size uint64)

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) Pop

func (b *Builder) Pop(count uint32)

Pop removes the top count values from the top of the stack.

func (*Builder) Post

func (b *Builder) Post(addr value.Pointer, size uint64, p Postback)

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) Push

func (b *Builder) Push(val value.Value)

Push pushes val to the top of the stack.

func (*Builder) RegisterNotificationReader added in v1.2.0

func (b *Builder) RegisterNotificationReader(reader NotificationReader)

func (*Builder) ReserveMemory

func (b *Builder) ReserveMemory(rng memory.Range)

ReserveMemory adds rng as a memory range that needs allocating for replay.

func (*Builder) RevertCommand added in v0.5.0

func (b *Builder) RevertCommand(err error)

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

func (b *Builder) Store(addr value.Pointer)

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

func (b *Builder) Strcpy(maxCount uint64)

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

func (b *Builder) String(s string) value.Pointer

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

func (b *Builder) Sub(num int32)

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

func (b *Builder) UnmapMemory(rng memory.Range)

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.

func (*Builder) Write

func (b *Builder) Write(rng memory.Range, resourceID id.ID)

Write fills the memory range in capture address-space rng with the data of resourceID.

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.

func (*MappedMemoryRangeList) SetSpan added in v1.3.1

func (l *MappedMemoryRangeList) SetSpan(index int, span interval.U64Span)

SetSpan adjusts the range of the span with the specified index in the MappedMemoryRangeList.

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

type PostDataHandler func(p *gapir.PostData)

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.

type Postback

type Postback func(d binary.Reader, err error)

Postback decodes a single command's post. If err is nil, it means there is no error in prior check of the post data, otherwise err will hold the error from the prior check (like a length mismatch error).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL