Package ghidra.pcode.emu
Class ThreadPcodeExecutorState<T>
java.lang.Object
ghidra.pcode.emu.ThreadPcodeExecutorState<T>
- Type Parameters:
T
- the type of values stored in the states
- All Implemented Interfaces:
PcodeExecutorState<T>
,PcodeExecutorStatePiece<T,
T>
A p-code executor state that multiplexes shared and thread-local states for use in a machine that
models multi-threading
-
Nested Class Summary
Nested classes/interfaces inherited from interface ghidra.pcode.exec.PcodeExecutorStatePiece
PcodeExecutorStatePiece.Reason
-
Field Summary
Modifier and TypeFieldDescriptionprotected final PcodeArithmetic
<T> protected final PcodeExecutorState
<T> protected final PcodeExecutorState
<T> -
Constructor Summary
ConstructorDescriptionThreadPcodeExecutorState
(PcodeExecutorState<T> sharedState, PcodeExecutorState<T> localState) Create a multiplexed state -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Erase the entire state or piecefork()
Create a deep copy of this stateGet the arithmetic used to manipulate values of the type stored by this stategetConcreteBuffer
(Address address, PcodeArithmetic.Purpose purpose) Bind a buffer of concrete bytes at the given start addressGet the language defining the address spaces of this state pieceGet the thread-local stateGet all register values known to this stateGet the shared stategetVar
(AddressSpace space, long offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Get the value of a variablegetVar
(AddressSpace space, T offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Get the value of a variableprotected boolean
isThreadLocalSpace
(AddressSpace space) Decide whether or not access to the given space is directed to thread-local statevoid
setVar
(AddressSpace space, long offset, int size, boolean quantize, T val) Set the value of a variablevoid
setVar
(AddressSpace space, T offset, int size, boolean quantize, T val) Set the value of a variableMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface ghidra.pcode.exec.PcodeExecutorState
getAddressArithmetic, paired
Methods inherited from interface ghidra.pcode.exec.PcodeExecutorStatePiece
checkRange, getVar, getVar, getVar, quantizeOffset, setVar, setVar, setVar
-
Field Details
-
localState
-
arithmetic
-
Constructor Details
-
ThreadPcodeExecutorState
public ThreadPcodeExecutorState(PcodeExecutorState<T> sharedState, PcodeExecutorState<T> localState) Create a multiplexed state- Parameters:
sharedState
- the shared part of the statelocalState
- the thread-local part of the state- See Also:
-
-
Method Details
-
getLanguage
Description copied from interface:PcodeExecutorStatePiece
Get the language defining the address spaces of this state piece- Specified by:
getLanguage
in interfacePcodeExecutorStatePiece<T,
T> - Returns:
- the language
-
getArithmetic
Description copied from interface:PcodeExecutorStatePiece
Get the arithmetic used to manipulate values of the type stored by this state- Specified by:
getArithmetic
in interfacePcodeExecutorStatePiece<T,
T> - Returns:
- the arithmetic
-
fork
Description copied from interface:PcodeExecutorStatePiece
Create a deep copy of this state- Specified by:
fork
in interfacePcodeExecutorState<T>
- Specified by:
fork
in interfacePcodeExecutorStatePiece<T,
T> - Returns:
- the copy
-
isThreadLocalSpace
Decide whether or not access to the given space is directed to thread-local state- Parameters:
space
- the space- Returns:
- true for thread-local state, false for shared state
-
setVar
Description copied from interface:PcodeExecutorStatePiece
Set the value of a variable- Specified by:
setVar
in interfacePcodeExecutorStatePiece<T,
T> - Parameters:
space
- the address spaceoffset
- the offset within the spacesize
- the size of the variablequantize
- true to quantize to the language's "addressable unit"val
- the value
-
setVar
Description copied from interface:PcodeExecutorStatePiece
Set the value of a variable- Specified by:
setVar
in interfacePcodeExecutorStatePiece<T,
T> - Parameters:
space
- the address spaceoffset
- the offset within the spacesize
- the size of the variablequantize
- true to quantize to the language's "addressable unit"val
- the value
-
getVar
public T getVar(AddressSpace space, T offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Description copied from interface:PcodeExecutorStatePiece
Get the value of a variable- Specified by:
getVar
in interfacePcodeExecutorStatePiece<T,
T> - Parameters:
space
- the address spaceoffset
- the offset within the spacesize
- the size of the variablequantize
- true to quantize to the language's "addressable unit"reason
- the reason for reading the variable- Returns:
- the value
-
getVar
public T getVar(AddressSpace space, long offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Description copied from interface:PcodeExecutorStatePiece
Get the value of a variableThis method is typically used for reading memory variables.
- Specified by:
getVar
in interfacePcodeExecutorStatePiece<T,
T> - Parameters:
space
- the address spaceoffset
- the offset within the spacesize
- the size of the variablequantize
- true to quantize to the language's "addressable unit"reason
- the reason for reading the variable- Returns:
- the value
-
getRegisterValues
Description copied from interface:PcodeExecutorStatePiece
Get all register values known to this stateWhen the state acts as a cache, it should only return those cached.
- Specified by:
getRegisterValues
in interfacePcodeExecutorStatePiece<T,
T> - Returns:
- a map of registers and their values
-
getConcreteBuffer
Description copied from interface:PcodeExecutorStatePiece
Bind a buffer of concrete bytes at the given start address- Specified by:
getConcreteBuffer
in interfacePcodeExecutorStatePiece<T,
T> - Parameters:
address
- the start addresspurpose
- the reason why the emulator needs a concrete value- Returns:
- a buffer
-
getLocalState
Get the thread-local state- Returns:
- the thread-local state
-
clear
public void clear()Erase the entire state or pieceThis is generally only useful when the state is itself a cache to another object. This will ensure the state is reading from that object rather than a stale cache. If this is not a cache, this could in fact clear the whole state, and the machine using it will be left in the dark.
This will only clear the thread's local state, lest we invoke clear on the shared state for every thread. Instead, if necessary, the machine should clear its local state then clear each thread's local state.
- Specified by:
clear
in interfacePcodeExecutorStatePiece<T,
T>
-