diff options
author | Michel JAOUEN <michel.jaouen@stericsson.com> | 2012-01-03 15:41:53 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvindharboe@gmail.com> | 2012-01-15 22:08:42 +0000 |
commit | 1db60b9c434fc281bd25730e7398e92023cfe65d (patch) | |
tree | f9d39730c28c7c033d558a030e5bdaccb8f2f4ac /src/rtos | |
parent | ca173ff4d4b92ab5a3df89c3a0cd4d47edd4042c (diff) | |
download | riscv-openocd-1db60b9c434fc281bd25730e7398e92023cfe65d.zip riscv-openocd-1db60b9c434fc281bd25730e7398e92023cfe65d.tar.gz riscv-openocd-1db60b9c434fc281bd25730e7398e92023cfe65d.tar.bz2 |
rtos :introduce possible overload by rtos of gdb_thread_packet
Change-Id: I17381b581556fa75098a84699dbbf69423fe20eb
Signed-off-by: Michel JAOUEN <michel.jaouen@stericsson.com>
Reviewed-on: http://openocd.zylin.com/342
Tested-by: jenkins
Reviewed-by: Evan Hunter <evan@ozhiker.com>
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
Diffstat (limited to 'src/rtos')
-rw-r--r-- | src/rtos/rtos.c | 18 | ||||
-rw-r--r-- | src/rtos/rtos.h | 3 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c index 8a5db11..f7d9486 100644 --- a/src/rtos/rtos.c +++ b/src/rtos/rtos.c @@ -48,6 +48,8 @@ static struct rtos_type *rtos_types[] = NULL }; +int rtos_thread_packet(struct connection *connection, char *packet, int packet_size); + int rtos_create(Jim_GetOptInfo *goi, struct target * target) { @@ -116,6 +118,8 @@ int rtos_create(Jim_GetOptInfo *goi, struct target * target) target->rtos->current_thread = 0; target->rtos->symbols = NULL; target->rtos->target = target; + /* put default thread handler in linux usecase it is overloaded*/ + target->rtos->gdb_thread_packet = rtos_thread_packet; if ( 0 != strcmp( cp, "auto") ) { @@ -125,10 +129,18 @@ int rtos_create(Jim_GetOptInfo *goi, struct target * target) return JIM_OK; } +int gdb_thread_packet(struct connection *connection, char *packet, int packet_size) +{ + struct target *target = get_target_from_connection(connection); + if (target->rtos == NULL) + return rtos_thread_packet(connection, packet, packet_size); /* thread not found*/ + return target->rtos->gdb_thread_packet(connection, packet, packet_size); +} -int gdb_thread_packet(struct connection *connection, char *packet, int packet_size) + +int rtos_thread_packet(struct connection *connection, char *packet, int packet_size) { struct target *target = get_target_from_connection(connection); @@ -413,10 +425,8 @@ int gdb_thread_packet(struct connection *connection, char *packet, int packet_si } else if ( packet[0] == 'H') // Set current thread ( 'c' for step and continue, 'g' for all other operations ) { - if (packet[1] == 'g') - { + if ((packet[1] == 'g') && (target->rtos != NULL)) sscanf(packet, "Hg%16" SCNx64, ¤t_threadid); - } gdb_put_packet(connection, "OK", 2); return ERROR_OK; } diff --git a/src/rtos/rtos.h b/src/rtos/rtos.h index 4f190e9..93a980e 100644 --- a/src/rtos/rtos.h +++ b/src/rtos/rtos.h @@ -61,9 +61,10 @@ struct rtos threadid_t current_thread; struct thread_detail* thread_details; int thread_count; - + int (*gdb_thread_packet)(struct connection *connection, char *packet, int packet_size); void * rtos_specific_params; + }; |