[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [RFC PATCH v3 2/7] target/ppc: Add ppc_get_trace_int_handler_
From: |
Fabiano Rosas |
Subject: |
[Qemu-ppc] [RFC PATCH v3 2/7] target/ppc: Add ppc_get_trace_int_handler_addr |
Date: |
Fri, 18 Jan 2019 12:07:53 -0200 |
The upcoming single step functionality (KVM HV) needs to write to the
Trace Interrupt handler's address for its mechanism to work. The
address is calculated by applying an offset according to the value of
the Alternate Interrupt Location (AIL) bits in the LPCR register.
Signed-off-by: Fabiano Rosas <address@hidden>
---
target/ppc/cpu.h | 1 +
target/ppc/excp_helper.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 486abaf99b..2185ef5e67 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -1256,6 +1256,7 @@ struct PPCVirtualHypervisorClass {
OBJECT_GET_CLASS(PPCVirtualHypervisorClass, (obj), \
TYPE_PPC_VIRTUAL_HYPERVISOR)
+target_ulong ppc_get_trace_int_handler_addr(CPUState *cs);
void ppc_cpu_do_interrupt(CPUState *cpu);
bool ppc_cpu_exec_interrupt(CPUState *cpu, int int_req);
void ppc_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 337a3ef8bb..5d13d05c3b 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -746,6 +746,18 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int
excp_model, int excp)
check_tlb_flush(env, false);
}
+target_ulong ppc_get_trace_int_handler_addr(CPUState *cs)
+{
+ PowerPCCPU *cpu = POWERPC_CPU(cs);
+ CPUPPCState *env = &cpu->env;
+ int ail;
+
+ ail = (env->spr[SPR_LPCR] & LPCR_AIL) >> LPCR_AIL_SHIFT;
+ return env->excp_vectors[POWERPC_EXCP_TRACE] |
+ ppc_excp_vector_offset(cs, ail);
+}
+
+
void ppc_cpu_do_interrupt(CPUState *cs)
{
PowerPCCPU *cpu = POWERPC_CPU(cs);
--
2.17.1
- [Qemu-ppc] [RFC PATCH v3 0/7] target/ppc: single step for KVM HV, Fabiano Rosas, 2019/01/18
- [Qemu-ppc] [RFC PATCH v3 2/7] target/ppc: Add ppc_get_trace_int_handler_addr,
Fabiano Rosas <=
- [Qemu-ppc] [RFC PATCH v3 1/7] target/ppc: Move exception vector offset computation into a function, Fabiano Rosas, 2019/01/18
- [Qemu-ppc] [RFC PATCH v3 3/7] kvm: support checking for single step capability, Fabiano Rosas, 2019/01/18
- [Qemu-ppc] [RFC PATCH v3 5/7] target/ppc: Move handling of hardware breakpoints to a separate function, Fabiano Rosas, 2019/01/18
- [Qemu-ppc] [RFC PATCH v3 4/7] kvm-all: Introduce kvm_set_singlestep, Fabiano Rosas, 2019/01/18
- [Qemu-ppc] [RFC PATCH v3 6/7] target/ppc: Refactor kvm_handle_debug, Fabiano Rosas, 2019/01/18