rtos: Add support for Zephyr RTOS
[fw/openocd] / src / rtos / rtos.c
index 62b65aae12e66271b48f6c5827babf22b282b1a1..fdb3862d8ba74c241ce87ee38be5226466e0650d 100644 (file)
@@ -39,6 +39,7 @@ extern struct rtos_type uCOS_III_rtos;
 extern struct rtos_type nuttx_rtos;
 extern struct rtos_type hwthread_rtos;
 extern struct rtos_type riot_rtos;
+extern struct rtos_type zephyr_rtos;
 
 static struct rtos_type *rtos_types[] = {
        &ThreadX_rtos,
@@ -52,11 +53,14 @@ static struct rtos_type *rtos_types[] = {
        &uCOS_III_rtos,
        &nuttx_rtos,
        &riot_rtos,
+       &zephyr_rtos,
        /* keep this as last, as it always matches with rtos auto */
        &hwthread_rtos,
        NULL
 };
 
+static int rtos_try_next(struct target *target);
+
 int rtos_thread_packet(struct connection *connection, const char *packet, int packet_size);
 
 int rtos_smp_init(struct target *target)
@@ -174,9 +178,9 @@ int gdb_thread_packet(struct connection *connection, char const *packet, int pac
        return target->rtos->gdb_thread_packet(connection, packet, packet_size);
 }
 
-static symbol_table_elem_t *next_symbol(struct rtos *os, char *cur_symbol, uint64_t cur_addr)
+static struct symbol_table_elem *next_symbol(struct rtos *os, char *cur_symbol, uint64_t cur_addr)
 {
-       symbol_table_elem_t *s;
+       struct symbol_table_elem *s;
 
        if (!os->symbols)
                os->type->get_symbol_list_to_lookup(&os->symbols);
@@ -198,7 +202,7 @@ static symbol_table_elem_t *next_symbol(struct rtos *os, char *cur_symbol, uint6
  * if 'symbol' is not declared optional */
 static bool is_symbol_mandatory(const struct rtos *os, const char *symbol)
 {
-       for (symbol_table_elem_t *s = os->symbols; s->symbol_name; ++s) {
+       for (struct symbol_table_elem *s = os->symbols; s->symbol_name; ++s) {
                if (!strcmp(s->symbol_name, symbol))
                        return !s->optional;
        }
@@ -230,7 +234,7 @@ int rtos_qsymbol(struct connection *connection, char const *packet, int packet_s
        uint64_t addr = 0;
        size_t reply_len;
        char reply[GDB_BUFFER_SIZE + 1], cur_sym[GDB_BUFFER_SIZE / 2 + 1] = ""; /* Extra byte for null-termination */
-       symbol_table_elem_t *next_sym = NULL;
+       struct symbol_table_elem *next_sym = NULL;
        struct target *target = get_target_from_connection(connection);
        struct rtos *os = target->rtos;
 
@@ -629,7 +633,7 @@ int rtos_generic_stack_read(struct target *target,
        return ERROR_OK;
 }
 
-int rtos_try_next(struct target *target)
+static int rtos_try_next(struct target *target)
 {
        struct rtos *os = target->rtos;
        struct rtos_type **type = rtos_types;