+struct rtos_type {
+ const char *name;
+ bool (*detect_rtos)(struct target *target);
+ int (*create)(struct target *target);
+ int (*smp_init)(struct target *target);
+ int (*update_threads)(struct rtos *rtos);
+ /** Return a list of general registers, with their values filled out. */
+ int (*get_thread_reg_list)(struct rtos *rtos, int64_t thread_id,
+ struct rtos_reg **reg_list, int *num_regs);
+ int (*get_thread_reg)(struct rtos *rtos, int64_t thread_id,
+ uint32_t reg_num, struct rtos_reg *reg);
+ int (*get_symbol_list_to_lookup)(struct symbol_table_elem *symbol_list[]);
+ int (*clean)(struct target *target);
+ char * (*ps_command)(struct target *target);
+ int (*set_reg)(struct rtos *rtos, uint32_t reg_num, uint8_t *reg_value);
+ /* Implement these if different threads in the RTOS can see memory
+ * differently (for instance because address translation might be different
+ * for each thread). */
+ int (*read_buffer)(struct rtos *rtos, target_addr_t address, uint32_t size,
+ uint8_t *buffer);
+ int (*write_buffer)(struct rtos *rtos, target_addr_t address, uint32_t size,
+ const uint8_t *buffer);
+};