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

Reply via email to