#include "helper/log.h"
#include "rtos_standard_stackings.h"
+#define FREERTOS_MAX_PRIORITIES 63
+
#define FreeRTOS_STRUCT(int_type, ptr_type, list_prev_offset)
struct FreeRTOS_params {
(uint8_t *)&max_used_priority);
if (retval != ERROR_OK)
return retval;
+ if (max_used_priority > FREERTOS_MAX_PRIORITIES) {
+ LOG_ERROR("FreeRTOS maximum used priority is unreasonably big, not proceeding: %" PRId64 "",
+ max_used_priority);
+ return ERROR_FAIL;
+ }
symbol_address_t *list_of_lists =
(symbol_address_t *)malloc(sizeof(symbol_address_t) *
(uint8_t *)&list_thread_count);
if (retval != ERROR_OK) {
LOG_OUTPUT("Error reading number of threads in FreeRTOS thread list\r\n");
+ free(list_of_lists);
return retval;
}
param->pointer_width,
(uint8_t *)&list_elem_ptr);
if (retval != ERROR_OK) {
- LOG_OUTPUT(
- "Error reading first thread item location in FreeRTOS thread list\r\n");
+ LOG_OUTPUT("Error reading first thread item location in FreeRTOS thread list\r\n");
+ free(list_of_lists);
return retval;
}
param->pointer_width,
(uint8_t *)&(rtos->thread_details[tasks_found].threadid));
if (retval != ERROR_OK) {
- LOG_OUTPUT(
- "Error reading thread list item object in FreeRTOS thread list\r\n");
+ LOG_OUTPUT("Error reading thread list item object in FreeRTOS thread list\r\n");
+ free(list_of_lists);
return retval;
}
FREERTOS_THREAD_NAME_STR_SIZE,
(uint8_t *)&tmp_str);
if (retval != ERROR_OK) {
- LOG_OUTPUT(
- "Error reading first thread item location in FreeRTOS thread list\r\n");
+ LOG_OUTPUT("Error reading first thread item location in FreeRTOS thread list\r\n");
+ free(list_of_lists);
return retval;
}
tmp_str[FREERTOS_THREAD_NAME_STR_SIZE-1] = '\x00';
param->pointer_width,
(uint8_t *)&list_elem_ptr);
if (retval != ERROR_OK) {
- LOG_OUTPUT(
- "Error reading next thread item location in FreeRTOS thread list\r\n");
+ LOG_OUTPUT("Error reading next thread item location in FreeRTOS thread list\r\n");
+ free(list_of_lists);
return retval;
}
}
}
+
free(list_of_lists);
rtos->thread_count = tasks_found;
return 0;