diff mbox series

[RFC,RESEND,08/42] accel/split: Implement gdbstub_supported_sstep_flags()

Message ID 20250620172751.94231-9-philmd@linaro.org
State New
Headers show
Series accel/split/arm: Run EL2 using TCG and EL1/EL0 in hardware with HVF | expand

Commit Message

Philippe Mathieu-Daudé June 20, 2025, 5:27 p.m. UTC
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 accel/split/split-all.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

Comments

Richard Henderson June 22, 2025, 2:30 a.m. UTC | #1
On 6/20/25 10:27, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   accel/split/split-all.c | 14 +++++++++++++-
>   1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/accel/split/split-all.c b/accel/split/split-all.c
> index cb910300931..413954af96c 100644
> --- a/accel/split/split-all.c
> +++ b/accel/split/split-all.c
> @@ -77,7 +77,19 @@ static bool split_supports_guest_debug(AccelState *as)
>   
>   static int split_gdbstub_supported_sstep_flags(AccelState *as)
>   {
> -    g_assert_not_reached();
> +    SplitAccelState *sas = SPLIT_ACCEL(as);
> +    AccelClass *hwc = ACCEL_GET_CLASS(sas->hw);
> +    AccelClass *swc = ACCEL_GET_CLASS(sas->sw);
> +    int flags = -1;

This only works if one of hw/sw implements the hook.


r~

> +
> +    if (hwc->gdbstub_supported_sstep_flags) {
> +        flags &= hwc->gdbstub_supported_sstep_flags(sas->hw);
> +    }
> +    if (swc->gdbstub_supported_sstep_flags) {
> +        flags &= swc->gdbstub_supported_sstep_flags(sas->sw);
> +    }
> +
> +    return flags;
>   }
>   
>   static void split_get_stats(AccelState *as, GString *buf)
diff mbox series

Patch

diff --git a/accel/split/split-all.c b/accel/split/split-all.c
index cb910300931..413954af96c 100644
--- a/accel/split/split-all.c
+++ b/accel/split/split-all.c
@@ -77,7 +77,19 @@  static bool split_supports_guest_debug(AccelState *as)
 
 static int split_gdbstub_supported_sstep_flags(AccelState *as)
 {
-    g_assert_not_reached();
+    SplitAccelState *sas = SPLIT_ACCEL(as);
+    AccelClass *hwc = ACCEL_GET_CLASS(sas->hw);
+    AccelClass *swc = ACCEL_GET_CLASS(sas->sw);
+    int flags = -1;
+
+    if (hwc->gdbstub_supported_sstep_flags) {
+        flags &= hwc->gdbstub_supported_sstep_flags(sas->hw);
+    }
+    if (swc->gdbstub_supported_sstep_flags) {
+        flags &= swc->gdbstub_supported_sstep_flags(sas->sw);
+    }
+
+    return flags;
 }
 
 static void split_get_stats(AccelState *as, GString *buf)