File indexing completed on 2025-05-11 08:24:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef _RTEMS_DEBUGGER_TARGET_h
0032 #define _RTEMS_DEBUGGER_TARGET_h
0033
0034 #include <setjmp.h>
0035
0036 #include <rtems/rtems-debugger.h>
0037
0038 #include "rtems-debugger-threads.h"
0039
0040 #ifdef __cplusplus
0041 extern "C" {
0042 #endif
0043
0044
0045
0046
0047 #define RTEMS_DEBUGGER_TARGET_SWBREAK_NUM 64
0048
0049
0050
0051
0052 #define RTEMS_DEBUGGER_TARGET_CAP_SWBREAK (1 << 0)
0053 #define RTEMS_DEBUGGER_TARGET_CAP_HWBREAK (1 << 1)
0054 #define RTEMS_DEBUGGER_TARGET_CAP_HWWATCH (1 << 2)
0055
0056
0057
0058
0059
0060
0061
0062 #define RTEMS_DEBUGGER_TARGET_CAP_PURE_SWBREAK (1 << 3)
0063
0064
0065
0066
0067 typedef enum rtems_debugger_target_watchpoint
0068 {
0069 rtems_debugger_target_hw_read,
0070 rtems_debugger_target_hw_write,
0071 rtems_debugger_target_hw_read_write,
0072 rtems_debugger_target_hw_execute
0073 } rtems_debugger_target_watchpoint;
0074
0075
0076
0077
0078 typedef enum rtems_debugger_target_exc_action
0079 {
0080 rtems_debugger_target_exc_consumed,
0081 rtems_debugger_target_exc_cascade,
0082 rtems_debugger_target_exc_step,
0083 } rtems_debugger_target_exc_action;
0084
0085
0086
0087
0088 #define RTEMS_DEBUGGER_TARGET_SWBREAK_MAX_SIZE (4)
0089 typedef struct rtems_debugger_target_swbreak {
0090 void* address;
0091 uint8_t contents[RTEMS_DEBUGGER_TARGET_SWBREAK_MAX_SIZE];
0092 } rtems_debugger_target_swbreak;
0093
0094
0095
0096
0097
0098
0099
0100
0101 typedef int (*rtems_debugger_target_code_writer)(void* address,
0102 const void* data,
0103 size_t size);
0104
0105
0106
0107
0108
0109
0110
0111
0112 typedef struct rtems_debugger_target {
0113 int capabilities;
0114 size_t reg_num;
0115 const size_t* reg_offset;
0116 const uint8_t* breakpoint;
0117 size_t breakpoint_size;
0118 rtems_debugger_block swbreaks;
0119 rtems_debugger_target_code_writer code_writer;
0120 bool memory_access;
0121 jmp_buf access_return;
0122 uintptr_t step_bp_address;
0123 rtems_id step_tid;
0124
0125 } rtems_debugger_target;
0126
0127
0128
0129
0130 extern int rtems_debugger_target_create(void);
0131
0132
0133
0134
0135 extern int rtems_debugger_target_destroy(void);
0136
0137
0138
0139
0140 extern int rtems_debugger_target_configure(rtems_debugger_target* target);
0141
0142
0143
0144
0145 extern int rtems_debugger_target_enable(void);
0146
0147
0148
0149
0150 extern int rtems_debugger_target_disable(void);
0151
0152
0153
0154
0155 extern uint32_t rtems_debugger_target_capabilities(void);
0156
0157
0158
0159
0160 extern size_t rtems_debugger_target_reg_num(void);
0161
0162
0163
0164
0165 extern size_t rtems_debugger_target_reg_size(size_t reg);
0166
0167
0168
0169
0170 extern size_t rtems_debugger_target_reg_offset(size_t reg);
0171
0172
0173
0174
0175 extern size_t rtems_debugger_target_reg_table_size(void);
0176
0177
0178
0179
0180 extern int rtems_debugger_target_read_regs(rtems_debugger_thread* thread);
0181
0182
0183
0184
0185 extern int rtems_debugger_target_write_regs(rtems_debugger_thread* thread);
0186
0187
0188
0189
0190 extern uintptr_t rtems_debugger_target_reg_pc(rtems_debugger_thread* thread);
0191
0192
0193
0194
0195 extern uintptr_t rtems_debugger_target_frame_pc(CPU_Exception_frame* frame);
0196
0197
0198
0199
0200 extern uintptr_t rtems_debugger_target_reg_sp(rtems_debugger_thread* thread);
0201
0202
0203
0204
0205 extern uintptr_t rtems_debugger_target_tcb_sp(rtems_debugger_thread* thread);
0206
0207
0208
0209
0210 extern int rtems_debugger_target_thread_stepping(rtems_debugger_thread* thread);
0211
0212
0213
0214
0215 extern int rtems_debugger_target_exception_to_signal(CPU_Exception_frame* frame);
0216
0217
0218
0219
0220 extern void rtems_debugger_target_exception_print(CPU_Exception_frame* frame);
0221
0222
0223
0224
0225 extern int rtems_debugger_target_swbreak_control(bool insert,
0226 uintptr_t addr,
0227 DB_UINT kind);
0228
0229
0230
0231
0232 extern int rtems_debugger_target_swbreak_insert(void);
0233
0234
0235
0236
0237 extern int rtems_debugger_target_swbreak_remove(void);
0238
0239
0240
0241
0242 extern bool rtems_debugger_target_swbreak_is_configured( uintptr_t addr );
0243
0244
0245
0246
0247 extern int rtems_debugger_target_hwbreak_insert(void);
0248
0249
0250
0251
0252 extern int rtems_debugger_target_hwbreak_remove(void);
0253
0254
0255
0256
0257 extern int rtems_debugger_target_hwbreak_control(rtems_debugger_target_watchpoint type,
0258 bool insert,
0259 uintptr_t addr,
0260 DB_UINT kind);
0261
0262
0263
0264
0265 extern rtems_debugger_target_exc_action
0266 rtems_debugger_target_exception(CPU_Exception_frame* frame);
0267
0268
0269
0270
0271 extern void rtems_debugger_target_exception_thread(rtems_debugger_thread* thread);
0272
0273
0274
0275
0276 extern void rtems_debugger_target_exception_thread_resume(rtems_debugger_thread* thread);
0277
0278
0279
0280
0281
0282 extern int rtems_debugger_target_cache_sync(rtems_debugger_target_swbreak* swbreak);
0283
0284
0285
0286
0287
0288 extern int rtems_debugger_target_start_memory_access(void);
0289
0290
0291
0292
0293 extern void rtems_debugger_target_end_memory_access(void);
0294
0295
0296
0297
0298 extern bool rtems_debugger_target_is_memory_access(void);
0299
0300 #ifdef __cplusplus
0301 }
0302 #endif
0303
0304
0305 #endif