rtos : smp support

Change-Id: I583cddf5e62ed77f108786a085569ab8699ad50d
Signed-off-by: Michel JAOUEN <michel.jaouen@stericsson.com>
Reviewed-on: http://openocd.zylin.com/344
Tested-by: jenkins
Reviewed-by: Evan Hunter <evan@ozhiker.com>
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
This commit is contained in:
Michel JAOUEN
2012-01-03 16:12:50 +01:00
committed by Øyvind Harboe
parent ff3028ce1b
commit ebac7c963a
4 changed files with 36 additions and 17 deletions

View File

@@ -49,6 +49,13 @@ static struct rtos_type *rtos_types[] =
int rtos_thread_packet(struct connection *connection, char *packet, int packet_size);
int rtos_smp_init(struct target *target)
{
if (target->rtos->type->smp_init)
return target->rtos->type->smp_init(target);
return ERROR_TARGET_INIT_FAILED;
}
int rtos_create(Jim_GetOptInfo *goi, struct target * target)
{
@@ -437,10 +444,11 @@ int rtos_get_gdb_reg_list(struct connection *connection)
{
struct target *target = get_target_from_connection(connection);
int64_t current_threadid = target->rtos->current_threadid;
if ( ( target->rtos != NULL ) &&
( current_threadid != -1 ) &&
( current_threadid != 0 ) &&
( current_threadid != target->rtos->current_thread ) )
if ((target->rtos != NULL) &&
(current_threadid != -1) &&
(current_threadid != 0) &&
((current_threadid != target->rtos->current_thread) ||
(target->smp))) /* in smp several current thread are possible */
{
char * hex_reg_list;
target->rtos->type->get_thread_reg_list( target->rtos, current_threadid, &hex_reg_list );

View File

@@ -75,9 +75,11 @@ struct rtos_type
char * name;
int (*detect_rtos) ( struct target* target );
int (*create) ( struct target* target );
int (*smp_init)(struct target *target);
int (*update_threads) ( struct rtos* rtos );
int (*get_thread_reg_list) ( struct rtos *rtos, int64_t thread_id, char ** hex_reg_list );
int (*get_symbol_list_to_lookup) (symbol_table_elem_t * symbol_list[] );
int (*clean)(struct target *target);
};
@@ -105,5 +107,6 @@ int rtos_try_next( struct target * target );
int gdb_thread_packet(struct connection *connection, char *packet, int packet_size);
int rtos_get_gdb_reg_list(struct connection *connection);
int rtos_update_threads( struct target *target );
int rtos_smp_init(struct target *target);
#endif // RTOS_H