aboutsummaryrefslogtreecommitdiff
path: root/src/server/gdb_server.c
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2023-09-14 13:04:39 -0700
committerTim Newsome <tim@sifive.com>2023-09-27 13:52:11 -0700
commit15f399691eff62da2039fb01abeb64f567d04bbd (patch)
treecf7b5556f9404b829a581bcd5b23dae352b3e08d /src/server/gdb_server.c
parentb5e57e1894727abbef075c0f15e8a15a0a7f3c25 (diff)
downloadriscv-openocd-15f399691eff62da2039fb01abeb64f567d04bbd.zip
riscv-openocd-15f399691eff62da2039fb01abeb64f567d04bbd.tar.gz
riscv-openocd-15f399691eff62da2039fb01abeb64f567d04bbd.tar.bz2
gdb_server,rtos: Differentiate rtos_get_gdb_reg failing and not implemented
If it fails, then pass that failure on. If it's simply not implemented, then we can fall through and try target_get_gdb_reg_list_noread(). This difference matters when the target representing the current hwthread is unavailable, but the target that is linked to the gdb connection is available. In that case we want the operation to return an error to gdb, instead of reading the register from the target that is available. Change-Id: I9c84ca556f818c5580e25ab349a34a226fcf0f43 Signed-off-by: Tim Newsome <tim@sifive.com>
Diffstat (limited to 'src/server/gdb_server.c')
-rw-r--r--src/server/gdb_server.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 41a47bf..3d7a47a 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -1397,8 +1397,13 @@ static int gdb_get_register_packet(struct connection *connection,
LOG_DEBUG("-");
#endif
- if ((target->rtos) && (rtos_get_gdb_reg(connection, reg_num) == ERROR_OK))
- return ERROR_OK;
+ if (target->rtos) {
+ retval = rtos_get_gdb_reg(connection, reg_num);
+ if (retval == ERROR_OK)
+ return ERROR_OK;
+ if (retval != ERROR_NOT_IMPLEMENTED)
+ return gdb_error(connection, retval);
+ }
retval = target_get_gdb_reg_list_noread(target, &reg_list, &reg_list_size,
REG_CLASS_ALL);