aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2021-06-21 14:37:41 -0700
committerAntonio Borneo <borneo.antonio@gmail.com>2021-07-02 17:13:52 +0100
commit6ad89d61af681e11960082a906357d8e8c3396a1 (patch)
treea1416e9908ab54f5c510000846d06bd2340f4adc /src/server
parentc8e643fd9f09849b341942d11866ab45bc7c99a3 (diff)
downloadriscv-openocd-6ad89d61af681e11960082a906357d8e8c3396a1.zip
riscv-openocd-6ad89d61af681e11960082a906357d8e8c3396a1.tar.gz
riscv-openocd-6ad89d61af681e11960082a906357d8e8c3396a1.tar.bz2
Add RTOS memory read/write functions.
If not implemented, these specify to regular target read/write. However, if individual threads in an RTOS can have different address translation configured then the RTOS support can use this to do the right thing. Use this in hwthread, where of course address translation can be set up differently for different real cores. Change-Id: I62c501cff1f863d855ee197dee7b73204ea8885a Signed-off-by: Tim Newsome <tim@sifive.com> Reviewed-on: http://openocd.zylin.com/6327 Tested-by: jenkins Reviewed-by: Marc Schink <dev@zapb.de> Reviewed-by: Jan Matyas <matyas@codasip.com> Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/gdb_server.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index d0586d1..9ac982f 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -1494,7 +1494,11 @@ static int gdb_read_memory_packet(struct connection *connection,
LOG_DEBUG("addr: 0x%16.16" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
- retval = target_read_buffer(target, addr, len, buffer);
+ retval = ERROR_NOT_IMPLEMENTED;
+ if (target->rtos)
+ retval = rtos_read_buffer(target, addr, len, buffer);
+ if (retval == ERROR_NOT_IMPLEMENTED)
+ retval = target_read_buffer(target, addr, len, buffer);
if ((retval != ERROR_OK) && !gdb_report_data_abort) {
/* TODO : Here we have to lie and send back all zero's lest stack traces won't work.
@@ -1565,7 +1569,11 @@ static int gdb_write_memory_packet(struct connection *connection,
if (unhexify(buffer, separator, len) != len)
LOG_ERROR("unable to decode memory packet");
- retval = target_write_buffer(target, addr, len, buffer);
+ retval = ERROR_NOT_IMPLEMENTED;
+ if (target->rtos)
+ retval = rtos_write_buffer(target, addr, len, buffer);
+ if (retval == ERROR_NOT_IMPLEMENTED)
+ retval = target_write_buffer(target, addr, len, buffer);
if (retval == ERROR_OK)
gdb_put_packet(connection, "OK", 2);
@@ -1634,7 +1642,12 @@ static int gdb_write_memory_binary_packet(struct connection *connection,
if (len) {
LOG_DEBUG("addr: 0x%" PRIx64 ", len: 0x%8.8" PRIx32 "", addr, len);
- retval = target_write_buffer(target, addr, len, (uint8_t *)separator);
+ retval = ERROR_NOT_IMPLEMENTED;
+ if (target->rtos)
+ retval = rtos_write_buffer(target, addr, len, (uint8_t *)separator);
+ if (retval == ERROR_NOT_IMPLEMENTED)
+ retval = target_write_buffer(target, addr, len, (uint8_t *)separator);
+
if (retval != ERROR_OK)
gdb_connection->mem_write_error = true;
}