This is an automated email from Gerrit. Peter Mamonov ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/5306
-- gerrit commit a0c6f5d1d440fbd157a0eae6447e577d6baffa3f Author: Peter Mamonov <[email protected]> Date: Thu Aug 22 20:30:35 2019 +0300 rtos/hwthread: get_thread_reg_list: fix endianness of registers values It was dicovered that registers values of secondary cores have wrong endianness when passed to GDB in case of big endian target. Yet registers values of the primary core have correct endianness when passed to GDB. The difference is due to the fact that the registers values of the primary core are dumped by `gdb_str_to_target()` using target byte order, while `rtos_put_gdb_reg_list()` dumps secondary cores registers using host byte order. The patch fixes this behaviour by adding relevant endianness conversion to the `hwthread_get_thread_reg_list()` function. Change-Id: I3241450e485d61be28dac81f320fa96df7c53e62 Signed-off-by: Peter Mamonov <[email protected]> diff --git a/src/rtos/hwthread.c b/src/rtos/hwthread.c index 2d9e42f..80fef47 100644 --- a/src/rtos/hwthread.c +++ b/src/rtos/hwthread.c @@ -249,10 +249,34 @@ static int hwthread_get_thread_reg_list(struct rtos *rtos, int64_t thread_id, } for (int i = 0; i < *num_regs; i++) { + void *rtos_reg_val_p = (*rtos_reg_list)[i].value; + (*rtos_reg_list)[i].number = (*reg_list)[i].number; (*rtos_reg_list)[i].size = (*reg_list)[i].size; - memcpy((*rtos_reg_list)[i].value, (*reg_list)[i].value, - ((*reg_list)[i].size + 7) / 8); + switch ((*reg_list)[i].size) { + case 64: + target_buffer_get_u64_array(target, + (*reg_list)[i].value, 1, + rtos_reg_val_p); + break; + case 32: + target_buffer_get_u32_array(target, + (*reg_list)[i].value, 1, + rtos_reg_val_p); + break; + case 16: + target_buffer_get_u16_array(target, + (*reg_list)[i].value, 1, + rtos_reg_val_p); + break; + case 8: + memcpy((*rtos_reg_list)[i].value, + (*reg_list)[i].value, 1); + break; + default: + free(reg_list); + return ERROR_FAIL; + } } free(reg_list); -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
