Add RTOS memory read/write functions.
[openocd.git] / src / rtos / rtos.h
index b437be0ddf61a9e37a9f7aaa7f405dd0b186363f..81751fe0a80ea2200478a4da7f085c82b522f237 100644 (file)
@@ -31,11 +31,11 @@ struct reg;
 /**
  * Table should be terminated by an element with NULL in symbol_name
  */
-typedef struct symbol_table_elem_struct {
+struct symbol_table_elem {
        const char *symbol_name;
        symbol_address_t address;
        bool optional;
-} symbol_table_elem_t;
+};
 
 struct thread_detail {
        threadid_t threadid;
@@ -47,7 +47,7 @@ struct thread_detail {
 struct rtos {
        const struct rtos_type *type;
 
-       symbol_table_elem_t *symbols;
+       struct symbol_table_elem *symbols;
        struct target *target;
        /*  add a context variable instead of global variable */
        /* The thread currently selected by gdb. */
@@ -78,10 +78,17 @@ struct rtos_type {
                        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)(symbol_table_elem_t *symbol_list[]);
+       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);
 };
 
 struct stack_register_offset {
@@ -110,7 +117,7 @@ struct rtos_register_stacking {
 
 #define GDB_THREAD_PACKET_NOT_CONSUMED (-40)
 
-int rtos_create(Jim_GetOptInfo *goi, struct target *target);
+int rtos_create(struct jim_getopt_info *goi, struct target *target);
 void rtos_destroy(struct target *target);
 int rtos_set_reg(struct connection *connection, int reg_num,
                uint8_t *reg_value);
@@ -127,5 +134,9 @@ 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 const *packet, int packet_size);
+int rtos_read_buffer(struct target *target, target_addr_t address,
+               uint32_t size, uint8_t *buffer);
+int rtos_write_buffer(struct target *target, target_addr_t address,
+               uint32_t size, const uint8_t *buffer);
 
 #endif /* OPENOCD_RTOS_RTOS_H */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)