Rtos riscv (#350)
* Implement riscv_get_thread_reg(). This is necessary because riscv_get_gdb_reg_list() now reads all registers, which ended up causing `-rtos riscv` to read all registers whenever one was requested (because the register cache is wiped every time we switch to a different hart). CustomRegisterTest went from 1329s to 106s. Change-Id: I8e9918b7a532d44bca927f67aae5ac34954a8d32 * Also implement riscv_set_reg(). Now all the `-rtos riscv` tests pass again, at regular speed. Change-Id: I55164224672d9dcc9eb4d1184b47258ff3c2cff1 * Better error messages. Change-Id: I4125f9a54750d9d0ee22c4fa84b9dd3f5af203f5 * Add target_get_gdb_reg_list_noread(). Being explicit about what's expected gets `-rtos riscv` back to `-rtos hwthread` time. Change-Id: I6e57390c2fe79b5e6799bfda980d89697e2e29f7 * Revert a change I made that has no effect. I don't understand exactly what all this test protects against, and I shouldn't change it unless I do. Change-Id: Ib329d4e34d65d2b38559b89b7afb3678f439ad2c
This commit is contained in:
@@ -96,7 +96,7 @@ struct gdb_connection {
|
||||
char *thread_list;
|
||||
};
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
#define _DEBUG_GDB_IO_
|
||||
#endif
|
||||
|
||||
@@ -1307,7 +1307,7 @@ static int gdb_get_register_packet(struct connection *connection,
|
||||
if ((target->rtos != NULL) && (ERROR_OK == rtos_get_gdb_reg(connection, reg_num)))
|
||||
return ERROR_OK;
|
||||
|
||||
retval = target_get_gdb_reg_list(target, ®_list, ®_list_size,
|
||||
retval = target_get_gdb_reg_list_noread(target, ®_list, ®_list_size,
|
||||
REG_CLASS_ALL);
|
||||
if (retval != ERROR_OK)
|
||||
return gdb_error(connection, retval);
|
||||
@@ -1367,7 +1367,7 @@ static int gdb_set_register_packet(struct connection *connection,
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
retval = target_get_gdb_reg_list(target, ®_list, ®_list_size,
|
||||
retval = target_get_gdb_reg_list_noread(target, ®_list, ®_list_size,
|
||||
REG_CLASS_ALL);
|
||||
if (retval != ERROR_OK) {
|
||||
free(bin_buf);
|
||||
@@ -2221,7 +2221,7 @@ static int gdb_generate_target_description(struct target *target, char **tdesc_o
|
||||
|
||||
arch_defined_types = calloc(1, sizeof(char *));
|
||||
|
||||
retval = target_get_gdb_reg_list(target, ®_list,
|
||||
retval = target_get_gdb_reg_list_noread(target, ®_list,
|
||||
®_list_size, REG_CLASS_ALL);
|
||||
|
||||
if (retval != ERROR_OK) {
|
||||
@@ -2409,7 +2409,7 @@ static int gdb_target_description_supported(struct target *target, int *supporte
|
||||
|
||||
char const *architecture = target_get_gdb_arch(target);
|
||||
|
||||
retval = target_get_gdb_reg_list(target, ®_list,
|
||||
retval = target_get_gdb_reg_list_noread(target, ®_list,
|
||||
®_list_size, REG_CLASS_ALL);
|
||||
if (retval != ERROR_OK) {
|
||||
LOG_ERROR("get register list failed");
|
||||
|
||||
Reference in New Issue
Block a user