[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 1/4] arm/monitor: Introduce monitoring of single-step events
In this commit, we extend the capabilities of the monitor to allow tracing of single-step events on ARM. Signed-off-by: Sergej Proskurin <proskurin@xxxxxxxxxxxxx> --- Cc: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx> Cc: Tamas K Lengyel <tamas@xxxxxxxxxxxxx> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> Cc: Julien Grall <julien.grall@xxxxxxx> --- xen/arch/arm/monitor.c | 23 +++++++++++++++++++++++ xen/include/asm-arm/domain.h | 1 + xen/include/asm-arm/monitor.h | 5 ++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/monitor.c b/xen/arch/arm/monitor.c index 59ce8f635f..a4466c9574 100644 --- a/xen/arch/arm/monitor.c +++ b/xen/arch/arm/monitor.c @@ -32,6 +32,20 @@ int arch_monitor_domctl_event(struct domain *d, switch ( mop->event ) { + case XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP: + { + bool old_status = ad->monitor.single_step_enabled; + + if ( unlikely(old_status == requested_status) ) + return -EEXIST; + + domain_pause(d); + ad->monitor.single_step_enabled = requested_status; + domain_unpause(d); + + break; + } + case XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL: { bool_t old_status = ad->monitor.privileged_call_enabled; @@ -66,6 +80,15 @@ int monitor_smc(void) return monitor_traps(current, 1, &req); } +int monitor_ss(void) +{ + vm_event_request_t req = { + .reason = VM_EVENT_REASON_SINGLESTEP, + }; + + return monitor_traps(current, 1, &req); +} + /* * Local variables: * mode: C diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h index 8dfc1d1ec2..0e4ee2956e 100644 --- a/xen/include/asm-arm/domain.h +++ b/xen/include/asm-arm/domain.h @@ -143,6 +143,7 @@ struct arch_domain /* Monitor options */ struct { + uint8_t single_step_enabled : 1; uint8_t privileged_call_enabled : 1; } monitor; } __cacheline_aligned; diff --git a/xen/include/asm-arm/monitor.h b/xen/include/asm-arm/monitor.h index 7567be66bd..66c7fe14fe 100644 --- a/xen/include/asm-arm/monitor.h +++ b/xen/include/asm-arm/monitor.h @@ -57,12 +57,15 @@ static inline uint32_t arch_monitor_get_capabilities(struct domain *d) { uint32_t capabilities = 0; - capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST | + capabilities = (1U << XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP | + 1U << XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST | 1U << XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL); return capabilities; } +int monitor_ss(void); + int monitor_smc(void); #endif /* __ASM_ARM_MONITOR_H__ */ -- 2.13.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |