aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2017-06-19 08:58:07 -0700
committerTim Newsome <tim@sifive.com>2017-06-20 11:32:42 -0700
commit927f9d887379a0af17cc5ab51a008c7ab89007df (patch)
tree9b1384c1538595237c0e3cef996b1f71d15aea6a
parent8d79a7c18b47354e4577cb5580d8945cc0d918cc (diff)
downloadriscv-openocd-927f9d887379a0af17cc5ab51a008c7ab89007df.zip
riscv-openocd-927f9d887379a0af17cc5ab51a008c7ab89007df.tar.gz
riscv-openocd-927f9d887379a0af17cc5ab51a008c7ab89007df.tar.bz2
Update list of "threads" when harts are discovered.
This ensures that "info threads" is accurate as soon as gdb connects. Also print out number of triggers that is discovered in examine().
-rw-r--r--src/rtos/riscv_debug.c4
-rw-r--r--src/rtos/riscv_debug.h4
-rw-r--r--src/target/riscv/riscv-013.c10
3 files changed, 13 insertions, 5 deletions
diff --git a/src/rtos/riscv_debug.c b/src/rtos/riscv_debug.c
index dbd7238..d6458e9 100644
--- a/src/rtos/riscv_debug.c
+++ b/src/rtos/riscv_debug.c
@@ -5,10 +5,8 @@
#include "riscv_debug.h"
#include "target/target.h"
#include "target/riscv/riscv.h"
-#include "rtos.h"
#include "server/gdb_server.h"
-static int riscv_update_threads(struct rtos *rtos);
static int riscv_gdb_thread_packet(struct connection *connection, const char *packet, int packet_size);
static int riscv_gdb_v_packet(struct connection *connection, const char *packet, int packet_size);
@@ -40,7 +38,7 @@ static int riscv_create_rtos(struct target *target)
return JIM_OK;
}
-static int riscv_update_threads(struct rtos *rtos)
+int riscv_update_threads(struct rtos *rtos)
{
LOG_DEBUG("Updating the RISC-V Hart List");
diff --git a/src/rtos/riscv_debug.h b/src/rtos/riscv_debug.h
index bcc7411..539edf2 100644
--- a/src/rtos/riscv_debug.h
+++ b/src/rtos/riscv_debug.h
@@ -1,9 +1,13 @@
#ifndef RTOS__RISCV_H
#define RTOS__RISCV_H
+#include "rtos.h"
+
struct riscv_rtos {
/* The index into the thread list used to handle */
int qs_thread_info_offset;
};
+int riscv_update_threads(struct rtos *rtos);
+
#endif
diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c
index f1d4cfb..9053feb 100644
--- a/src/target/riscv/riscv-013.c
+++ b/src/target/riscv/riscv-013.c
@@ -20,6 +20,7 @@
#include "target/breakpoints.h"
#include "helper/time_support.h"
#include "riscv.h"
+#include "rtos/riscv_debug.h"
#include "debug_defines.h"
#include "rtos/rtos.h"
#include "program.h"
@@ -1192,14 +1193,19 @@ static int examine(struct target *target)
riscv_resume_all_harts(target);
target_set_examined(target);
+ if (target->rtos) {
+ riscv_update_threads(target->rtos);
+ }
+
// Some regression suites rely on seeing 'Examined RISC-V core' to know
// when they can connect with gdb/telnet.
// We will need to update those suites if we want to change that text.
LOG_INFO("Examined RISC-V core; found %d harts",
riscv_count_harts(target));
for (int i = 0; i < riscv_count_harts(target); ++i) {
- LOG_INFO(" hart %d: XLEN=%d, program buffer at 0x%" PRIx64, i,
- r->xlen[i], r->debug_buffer_addr[i]);
+ LOG_INFO(" hart %d: XLEN=%d, program buffer at 0x%" PRIx64
+ ", %d triggers", i, r->xlen[i], r->debug_buffer_addr[i],
+ r->trigger_count[i]);
}
return ERROR_OK;
}