TCF Agent: GDB Remote Serial Protocol: fixed handling of "vCont;r..." commands
diff --git a/agent/tcf/main/gdb-rsp.c b/agent/tcf/main/gdb-rsp.c
index 59e4912..8f73d89 100644
--- a/agent/tcf/main/gdb-rsp.c
+++ b/agent/tcf/main/gdb-rsp.c
@@ -675,7 +675,7 @@
GdbThread * t = find_thread(c, c->cur_g_pid, c->cur_g_tid);
if (t != NULL) {
unsigned i;
- add_res_str(c, t->bp_cnt > 0 ? "T05" : "T00");
+ add_res_str(c, "T05");
add_res_str(c, "thread:");
add_res_ptid(c, c->cur_g_pid, c->cur_g_tid);
add_res_ch(c, ';');
diff --git a/agent/tcf/services/runctrl.c b/agent/tcf/services/runctrl.c
index 85fa9d0..573c479 100644
--- a/agent/tcf/services/runctrl.c
+++ b/agent/tcf/services/runctrl.c
@@ -882,23 +882,6 @@
Context * grp = context_get_group(ctx, CONTEXT_GROUP_INTERCEPT);
int err = 0;
- EXT(grp)->reverse_run = 0;
- switch (mode) {
- case RM_REVERSE_RESUME:
- case RM_REVERSE_STEP_OVER:
- case RM_REVERSE_STEP_INTO:
- case RM_REVERSE_STEP_OVER_LINE:
- case RM_REVERSE_STEP_INTO_LINE:
- case RM_REVERSE_STEP_OUT:
- case RM_REVERSE_STEP_OVER_RANGE:
- case RM_REVERSE_STEP_INTO_RANGE:
- case RM_REVERSE_UNTIL_ACTIVE:
- EXT(grp)->reverse_run = 1;
- break;
- }
-
- if (context_has_state(ctx)) start_step_mode(ctx, c, mode, count, range_start, range_end);
-
if (ctx->exited) {
err = ERR_ALREADY_EXITED;
}
@@ -908,13 +891,33 @@
else if (count < 1) {
err = EINVAL;
}
- else if (resume_context_tree(ctx) < 0) {
- err = errno;
+
+ if (!err) {
+ EXT(grp)->reverse_run = 0;
+ switch (mode) {
+ case RM_REVERSE_RESUME:
+ case RM_REVERSE_STEP_OVER:
+ case RM_REVERSE_STEP_INTO:
+ case RM_REVERSE_STEP_OVER_LINE:
+ case RM_REVERSE_STEP_INTO_LINE:
+ case RM_REVERSE_STEP_OUT:
+ case RM_REVERSE_STEP_OVER_RANGE:
+ case RM_REVERSE_STEP_INTO_RANGE:
+ case RM_REVERSE_UNTIL_ACTIVE:
+ EXT(grp)->reverse_run = 1;
+ break;
+ }
+
+ if (context_has_state(ctx)) start_step_mode(ctx, c, mode, count, range_start, range_end);
+
+ if (resume_context_tree(ctx) < 0) {
+ err = errno;
+ cancel_step_mode(ctx);
+ }
}
assert(err || !ext->intercepted);
if (err) {
- cancel_step_mode(ctx);
errno = err;
return -1;
}