diff options
author | Matthias Welwarsky <matthias.welwarsky@sysgo.com> | 2018-03-04 18:52:14 +0100 |
---|---|---|
committer | Matthias Welwarsky <matthias@welwarsky.de> | 2018-03-16 08:56:38 +0000 |
commit | cbf7889873c16e80109ee7d46995a0adf08af84c (patch) | |
tree | d984d96bbc6bc99b1e5299ae818b4ad060a79850 | |
parent | a4cdce0129a6b206a2081d77dd518ce2cae0b71f (diff) |
gdb_server: fix ignored interrupt request from gdb during stepping
Normally, when a ctrl-c is received from gdb, a SIGINT is reported back
unconditionally to tell gdb that the target has stopped in response.
However when a rtos support was configured, the rtos awareness overwrote
the signal with an actual thread state, which gdb then ignored and got
stuck without the user able to interrupt.
Change-Id: I40fd62333e020a8c4d9df0079270e84df9c77f88
Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com>
Reviewed-on: http://openocd.zylin.com/4445
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
-rw-r--r-- | src/server/gdb_server.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 2acebe83..712c3934 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -732,7 +732,6 @@ static void gdb_signal_reply(struct target *target, struct connection *connectio } else { if (gdb_connection->ctrl_c) { signal_var = 0x2; - gdb_connection->ctrl_c = 0; } else signal_var = gdb_last_signal(target); @@ -769,11 +768,14 @@ static void gdb_signal_reply(struct target *target, struct connection *connectio target->rtos->current_thread); target->rtos->current_threadid = target->rtos->current_thread; target->rtos->gdb_target_for_threadid(connection, target->rtos->current_threadid, &ct); - signal_var = gdb_last_signal(ct); + if (!gdb_connection->ctrl_c) + signal_var = gdb_last_signal(ct); } sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "T%2.2x%s%s", signal_var, stop_reason, current_thread); + + gdb_connection->ctrl_c = 0; } gdb_put_packet(connection, sig_reply, sig_reply_len); |