arm_adi_v5: Remove all cases of "restoring" previous dap_ap_select()
[fw/openocd] / src / rtos / rtos.h
index 12a96d2ab0e1b439b4975d822569eeec7503ea44..d082fb7a72eedfac16b8b1bf9c405cd7d4b3e2d2 100644 (file)
@@ -33,9 +33,9 @@ struct reg;
  * Table should be terminated by an element with NULL in symbol_name
  */
 typedef struct symbol_table_elem_struct {
-       char *symbol_name;
+       const char *symbol_name;
        symbol_address_t address;
-
+       bool optional;
 } symbol_table_elem_t;
 
 struct thread_detail {
@@ -56,12 +56,12 @@ 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);
+       int (*gdb_thread_packet)(struct connection *connection, char const *packet, int packet_size);
        void *rtos_specific_params;
 };
 
 struct rtos_type {
-       char *name;
+       const char *name;
        int (*detect_rtos)(struct target *target);
        int (*create)(struct target *target);
        int (*smp_init)(struct target *target);
@@ -83,7 +83,15 @@ struct rtos_register_stacking {
        unsigned char stack_registers_size;
        signed char stack_growth_direction;
        unsigned char num_output_registers;
-       unsigned char stack_alignment;
+       /* Some targets require evaluating the stack to determine the
+        * actual stack pointer for a process.  If this field is NULL,
+        * just use stacking->stack_registers_size * stack_growth_direction
+        * to calculate adjustment.
+        */
+       int64_t (*calculate_process_stack)(struct target *target,
+               const uint8_t *stack_data,
+               const struct rtos_register_stacking *stacking,
+               int64_t stack_ptr);
        const struct stack_register_offset *register_offsets;
 };
 
@@ -95,11 +103,12 @@ int rtos_generic_stack_read(struct target *target,
                int64_t stack_ptr,
                char **hex_reg_list);
 int rtos_try_next(struct target *target);
-int gdb_thread_packet(struct connection *connection, char *packet, int packet_size);
+int gdb_thread_packet(struct connection *connection, char const *packet, int packet_size);
 int rtos_get_gdb_reg_list(struct connection *connection);
 int rtos_update_threads(struct target *target);
+void rtos_free_threadlist(struct rtos *rtos);
 int rtos_smp_init(struct target *target);
 /*  function for handling symbol access */
-int rtos_qsymbol(struct connection *connection, char *packet, int packet_size);
+int rtos_qsymbol(struct connection *connection, char const *packet, int packet_size);
 
 #endif /* RTOS_H */