The intent is that if you asked for UTRACE_SINGLESTEP (or anything else but
plain UTRACE_RESUME), you should be guaranteed another callback after a
stop and resumption, i.e. after any time that the resume action you asked
for was implicitly lost.

Perhaps the following patch fixes it?


Thanks,
Roland


diff --git a/kernel/utrace.c b/kernel/utrace.c
index 954f9fe..0000000 100644  
--- a/kernel/utrace.c
+++ b/kernel/utrace.c
@@ -1348,7 +1348,13 @@ static bool finish_callback(struct utrac
                                spin_unlock(&utrace->lock);
                        }
                } else {
-                       if (action == UTRACE_REPORT)
+                       /*
+                        * If this engine asked for any particular resume
+                        * action other than UTRACE_STOP, make sure it gets
+                        * another callback on resumption in case another
+                        * engine has us stop in this round.
+                        */
+                       if (action < UTRACE_RESUME)
                                report->reports = true;
 
                        if (engine_wants_stop(engine)) {

Reply via email to