@ -979,6 +979,99 @@ QEMU_PLUGIN_API
bool qemu_plugin_write_memory_vaddr ( uint64_t addr ,
GByteArray * data ) ;
/**
* enum qemu_plugin_hwaddr_operation_result - result of a memory operation
*
* @ QEMU_PLUGIN_HWADDR_OPERATION_OK : hwaddr operation succeeded
* @ QEMU_PLUGIN_HWADDR_OPERATION_ERROR : unexpected error occurred
* @ QEMU_PLUGIN_HWADDR_OPERATION_DEVICE_ERROR : error in memory device
* @ QEMU_PLUGIN_HWADDR_OPERATION_ACCESS_DENIED : permission error
* @ QEMU_PLUGIN_HWADDR_OPERATION_INVALID_ADDRESS : address was invalid
* @ QEMU_PLUGIN_HWADDR_OPERATION_INVALID_ADDRESS_SPACE : invalid address space
*/
enum qemu_plugin_hwaddr_operation_result {
QEMU_PLUGIN_HWADDR_OPERATION_OK ,
QEMU_PLUGIN_HWADDR_OPERATION_ERROR ,
QEMU_PLUGIN_HWADDR_OPERATION_DEVICE_ERROR ,
QEMU_PLUGIN_HWADDR_OPERATION_ACCESS_DENIED ,
QEMU_PLUGIN_HWADDR_OPERATION_INVALID_ADDRESS ,
QEMU_PLUGIN_HWADDR_OPERATION_INVALID_ADDRESS_SPACE ,
} ;
/**
* qemu_plugin_read_memory_hwaddr ( ) - read from memory using a hardware address
*
* @ addr : The physical address to read from
* @ data : A byte array to store data into
* @ len : The number of bytes to read , starting from @ addr
*
* @ len bytes of data is read from the current memory space for the current
* vCPU starting at @ addr and stored into @ data . If @ data is not large enough to
* hold @ len bytes , it will be expanded to the necessary size , reallocating if
* necessary . @ len must be greater than 0.
*
* This function does not ensure writes are flushed prior to reading , so
* callers should take care when calling this function in plugin callbacks to
* avoid attempting to read data which may not yet be written and should use
* the memory callback API instead .
*
* This function is only valid for softmmu targets .
*
* Returns a qemu_plugin_hwaddr_operation_result indicating the result of the
* operation .
*/
QEMU_PLUGIN_API
enum qemu_plugin_hwaddr_operation_result
qemu_plugin_read_memory_hwaddr ( uint64_t addr , GByteArray * data , size_t len ) ;
/**
* qemu_plugin_write_memory_hwaddr ( ) - write to memory using a hardware address
*
* @ addr : A physical address to write to
* @ data : A byte array containing the data to write
*
* The contents of @ data will be written to memory starting at the hardware
* address @ addr in the current address space for the current vCPU .
*
* This function does not guarantee consistency of writes , nor does it ensure
* that pending writes are flushed either before or after the write takes place ,
* so callers should take care when calling this function in plugin callbacks to
* avoid depending on the existence of data written using this function which
* may be overwritten afterward . In addition , this function requires that the
* pages containing the address are not locked . Practically , this means that you
* should not write instruction memory in a current translation block inside a
* callback registered with qemu_plugin_register_vcpu_tb_trans_cb .
*
* You can , for example , write instruction memory in a current translation block
* in a callback registered with qemu_plugin_register_vcpu_tb_exec_cb , although
* be aware that the write will not be flushed until after the translation block
* has finished executing . In general , this function should be used to write
* data memory or to patch code at a known address , not in a current translation
* block .
*
* This function is only valid for softmmu targets .
*
* Returns a qemu_plugin_hwaddr_operation_result indicating the result of the
* operation .
*/
QEMU_PLUGIN_API
enum qemu_plugin_hwaddr_operation_result
qemu_plugin_write_memory_hwaddr ( uint64_t addr , GByteArray * data ) ;
/**
* qemu_plugin_translate_vaddr ( ) - translate virtual address for current vCPU
*
* @ vaddr : virtual address to translate
* @ hwaddr : pointer to store the physical address
*
* This function is only valid in vCPU context ( i . e . in callbacks ) and is only
* valid for softmmu targets .
*
* Returns true on success and false on failure .
*/
QEMU_PLUGIN_API
bool qemu_plugin_translate_vaddr ( uint64_t vaddr , uint64_t * hwaddr ) ;
/**
* qemu_plugin_scoreboard_new ( ) - alloc a new scoreboard
*