Register access (dynamic and static) wired up.
This commit is contained in:
@@ -21,11 +21,13 @@ typedef uint64_t (*RegisterReadCallback)(void* context, uint64_t addr);
|
||||
typedef void (*RegisterWriteCallback)(void* context, uint64_t addr,
|
||||
uint64_t value);
|
||||
|
||||
typedef struct {
|
||||
typedef struct RegisterAccessCallbacks_s {
|
||||
void* context;
|
||||
RegisterHandlesCallback handles;
|
||||
RegisterReadCallback read;
|
||||
RegisterWriteCallback write;
|
||||
|
||||
RegisterAccessCallbacks_s* next;
|
||||
} RegisterAccessCallbacks;
|
||||
|
||||
|
||||
|
||||
@@ -25,7 +25,8 @@ DEFINE_string(runtime_backend, "any",
|
||||
|
||||
|
||||
Runtime::Runtime(Memory* memory) :
|
||||
memory_(memory), backend_(0), frontend_(0) {
|
||||
memory_(memory), backend_(0), frontend_(0),
|
||||
access_callbacks_(0) {
|
||||
tracing::Initialize();
|
||||
modules_lock_ = AllocMutex(10000);
|
||||
}
|
||||
@@ -40,6 +41,14 @@ Runtime::~Runtime() {
|
||||
UnlockMutex(modules_lock_);
|
||||
FreeMutex(modules_lock_);
|
||||
|
||||
RegisterAccessCallbacks* cbs = access_callbacks_;
|
||||
while (cbs) {
|
||||
RegisterAccessCallbacks* next = cbs->next;
|
||||
delete cbs;
|
||||
cbs = next;
|
||||
}
|
||||
access_callbacks_ = NULL;
|
||||
|
||||
delete frontend_;
|
||||
delete backend_;
|
||||
|
||||
@@ -213,6 +222,10 @@ int Runtime::DemandFunction(
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Runtime::AddRegisterAccessCallbacks(RegisterAccessCallbacks callbacks) {
|
||||
//
|
||||
void Runtime::AddRegisterAccessCallbacks(
|
||||
const RegisterAccessCallbacks& callbacks) {
|
||||
RegisterAccessCallbacks* cbs = new RegisterAccessCallbacks();
|
||||
xe_copy_struct(cbs, &callbacks, sizeof(callbacks));
|
||||
cbs->next = access_callbacks_;
|
||||
access_callbacks_ = cbs;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ public:
|
||||
Memory* memory() const { return memory_; }
|
||||
frontend::Frontend* frontend() const { return frontend_; }
|
||||
backend::Backend* backend() const { return backend_; }
|
||||
RegisterAccessCallbacks* access_callbacks() const {
|
||||
return access_callbacks_;
|
||||
}
|
||||
|
||||
int Initialize(frontend::Frontend* frontend, backend::Backend* backend = 0);
|
||||
|
||||
@@ -41,7 +44,8 @@ public:
|
||||
int LookupFunctionInfo(uint64_t address, FunctionInfo** out_symbol_info);
|
||||
int ResolveFunction(uint64_t address, Function** out_function);
|
||||
|
||||
void AddRegisterAccessCallbacks(RegisterAccessCallbacks callbacks);
|
||||
void AddRegisterAccessCallbacks(
|
||||
const RegisterAccessCallbacks& callbacks);
|
||||
|
||||
//uint32_t CreateCallback(void (*callback)(void* data), void* data);
|
||||
|
||||
@@ -58,6 +62,8 @@ protected:
|
||||
Mutex* modules_lock_;
|
||||
typedef std::vector<Module*> ModuleList;
|
||||
ModuleList modules_;
|
||||
|
||||
RegisterAccessCallbacks* access_callbacks_;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user