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>riscv-compliance-dev
parent
a4cdce0129
commit
cbf7889873
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue