#include "exec/helper-proto.h"
#include "qemu/host-utils.h"
#include "qemu/atomic.h"
+#include "qemu/plugin.h"
void HELPER(exception)(CPUXtensaState *env, uint32_t excp)
{
CPUXtensaState *env = cpu_env(cs);
if (cs->exception_index == EXC_IRQ) {
+ uint64_t last_pc = env->pc;
+
qemu_log_mask(CPU_LOG_INT,
"%s(EXC_IRQ) level = %d, cintlevel = %d, "
"pc = %08x, a0 = %08x, ps = %08x, "
env->sregs[INTSET], env->sregs[INTENABLE],
env->sregs[CCOUNT]);
handle_interrupt(env);
+ qemu_plugin_vcpu_interrupt_cb(cs, last_pc);
}
switch (cs->exception_index) {
env->sregs[CCOUNT]);
if (env->config->exception_vector[cs->exception_index]) {
uint32_t vector;
+ uint64_t last_pc = env->pc;
vector = env->config->exception_vector[cs->exception_index];
env->pc = relocated_vector(env, vector);
+ qemu_plugin_vcpu_exception_cb(cs, last_pc);
} else {
qemu_log_mask(CPU_LOG_INT,
"%s(pc = %08x) bad exception_index: %d\n",
#include "system/memory.h"
#include "qapi/error.h"
#include "qemu/log.h"
+#include "qemu/plugin.h"
enum {
TARGET_SYS_exit = 1,
CPUState *cs = env_cpu(env);
AddressSpace *as = cs->as;
uint32_t *regs = env->regs;
+ uint64_t last_pc = env->pc;
switch (regs[2]) {
case TARGET_SYS_exit:
regs[3] = TARGET_ENOSYS;
break;
}
+ qemu_plugin_vcpu_hostcall_cb(cs, last_pc);
}