This is an automated email from Gerrit. Daniel Goehring ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/5207
-- gerrit commit 8e4f3ecbab2fd9ca038c01b3c355b2e6c216afc8 Author: Daniel Goehring <[email protected]> Date: Thu Apr 25 11:38:04 2019 -0400 GDB Server: Remove 'fake_thread' workaround for OS threads The 'fake_thread' workaround resolves an issue with respect to GDB debugging multiple OS threads which is outside the scope of OpenOCD. The workaround breaks HW CPU thread support. Since OpenOCD only supports debugging from a CPU core perspective and not OS Threads, it is unnecessary to include this workaround. Tested on eMAG 8180 Development Platform with CentOS. Change-Id: I8ece8b0ef3398de66e78e8d1d3475f4e76fa9206 Signed-off-by: Daniel Goehring <[email protected]> diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 95e6c04..6040cfb 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -2754,7 +2754,6 @@ static bool gdb_handle_vcont_packet(struct connection *connection, const char *p /* single-step or step-over-breakpoint */ if (parse[0] == 's') { gdb_running_type = 's'; - bool fake_step = false; if (strncmp(parse, "s:", 2) == 0) { struct target *ct = target; @@ -2776,13 +2775,6 @@ static bool gdb_handle_vcont_packet(struct connection *connection, const char *p rtos_update_threads(target); target->rtos->gdb_target_for_threadid(connection, thread_id, &ct); - - /* - * check if the thread to be stepped is the current rtos thread - * if not, we must fake the step - */ - if (target->rtos->current_thread != thread_id) - fake_step = true; } if (parse[0] == ';') { @@ -2822,29 +2814,6 @@ static bool gdb_handle_vcont_packet(struct connection *connection, const char *p log_add_callback(gdb_log_callback, connection); target_call_event_callbacks(ct, TARGET_EVENT_GDB_START); - /* - * work around an annoying gdb behaviour: when the current thread - * is changed in gdb, it assumes that the target can follow and also - * make the thread current. This is an assumption that cannot hold - * for a real target running a multi-threading OS. We just fake - * the step to not trigger an internal error in gdb. See - * https://sourceware.org/bugzilla/show_bug.cgi?id=22925 for details - */ - if (fake_step) { - int sig_reply_len; - char sig_reply[128]; - - LOG_DEBUG("fake step thread %"PRIx64, thread_id); - - sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), - "T05thread:%016"PRIx64";", thread_id); - - gdb_put_packet(connection, sig_reply, sig_reply_len); - log_remove_callback(gdb_log_callback, connection); - - return true; - } - /* support for gdb_sync command */ if (gdb_connection->sync) { gdb_connection->sync = false; -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
