Don't fake step for hwthread rtos. (#393)
Fake step is a hack introduced to make things work with real RTOSs that have a concept of a current thread. The hwthread rtos always has access to all threads, so doesn't need it. This fixes a bug when running my MulticoreRegTest against HiFive Unleashed where OpenOCD would return the registers of the wrong thread after gdb stepped a hart. Change-Id: I64f538a133fb078c05a0c6b8121388b0b9d7f1b8
This commit is contained in:
+4
-10
@@ -2808,8 +2808,7 @@ static bool gdb_handle_vcont_packet(struct connection *connection, const char *p
|
||||
* 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;
|
||||
fake_step = rtos_needs_fake_step(target, thread_id);
|
||||
}
|
||||
|
||||
if (parse[0] == ';') {
|
||||
@@ -2849,15 +2848,10 @@ 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) {
|
||||
/* 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. */
|
||||
int sig_reply_len;
|
||||
char sig_reply[128];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user