From b69119668ed8d9633280f8b596fe9af60f51644b Mon Sep 17 00:00:00 2001 From: "Broadcom Corporation (Evan Hunter)" Date: Thu, 14 Apr 2011 10:25:01 +0200 Subject: RTOS Thread awareness support wip - works on Cortex-M3 with ThreadX and FreeRTOS Compared to original patch a few nits were fixed: - remove stricmp usage - unsigned compare fix - printf formatting fixes - fixed a bug with overrunning a memory buffer allocated with malloc. --- src/rtos/rtos.h | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/rtos/rtos.h (limited to 'src/rtos/rtos.h') diff --git a/src/rtos/rtos.h b/src/rtos/rtos.h new file mode 100644 index 00000000..cd4bbb27 --- /dev/null +++ b/src/rtos/rtos.h @@ -0,0 +1,106 @@ +/*************************************************************************** + * Copyright (C) 2011 by Broadcom Corporation * + * Evan Hunter - ehunter@broadcom.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef RTOS_H +#define RTOS_H + + +#include "server/server.h" +#include +#include + +typedef long long threadid_t; +typedef long long symbol_address_t; + +struct reg; + +/** + * Table should be terminated by an element with NULL in symbol_name + */ +typedef struct symbol_table_elem_struct +{ + char * symbol_name; + symbol_address_t address; + +} symbol_table_elem_t; + +struct thread_detail +{ + threadid_t threadid; + bool exists; + char * display_str; + char * thread_name_str; + char * extra_info_str; +}; + +struct rtos +{ + const struct rtos_type *type; + + + symbol_table_elem_t * symbols; + struct target *target; + + threadid_t current_thread; + struct thread_detail* thread_details; + int thread_count; + + void * rtos_specific_params; + +}; + + + +struct rtos_type +{ + char * name; + int (*detect_rtos) ( struct target* target ); + int (*create) ( struct target* target ); + int (*update_threads) ( struct rtos* rtos ); + int (*get_thread_reg_list) ( struct rtos *rtos, long long thread_id, char ** hex_reg_list ); + int (*get_symbol_list_to_lookup) (symbol_table_elem_t * symbol_list[] ); +}; + + +struct stack_register_offset +{ + signed short offset; // offset in bytes from stack head, or -1 to indicate register is not stacked, or -2 to indicate this is the stack pointer register + unsigned short width_bits; + +}; + +struct rtos_register_stacking +{ + unsigned char stack_registers_size; + signed char stack_growth_direction; + unsigned char num_output_registers; + const struct stack_register_offset* register_offsets; +}; + +#define GDB_THREAD_PACKET_NOT_CONSUMED (-40) + +int rtos_create(Jim_GetOptInfo *goi, struct target * target); +int rtos_generic_stack_read( struct target * target, const struct rtos_register_stacking* stacking, long long stack_ptr, char ** hex_reg_list ); +int rtos_try_next( struct target * target ); +int gdb_thread_packet(struct connection *connection, struct target *target, char *packet, int packet_size); +int rtos_get_gdb_reg_list(struct connection *connection, struct target *target, struct reg **reg_list[], int *reg_list_size); +int rtos_update_threads( struct target *target ); + +#endif // RTOS_H -- cgit v1.2.3