RTEMS  5.1
rtems-debugger-threads.h
1 /*
2  * Copyright (c) 2016-2017 Chris Johns <chrisj@rtems.org>.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26 
27 /*
28  * Debugger for RTEMS.
29  */
30 
31 #ifndef _RTEMS_DEBUGGER_THREADS_h
32 #define _RTEMS_DEBUGGER_THREADS_h
33 
34 #include <rtems/debugger/rtems-debugger-server.h>
35 
36 #include <rtems/score/thread.h>
37 
38 #include "rtems-debugger-block.h"
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif /* __cplusplus */
43 
47 #define RTEMS_DEBUGGER_THREAD_NAME_SIZE (5)
48 
52 #define RTEMS_DEBUGGER_THREAD_BLOCK_SIZE (32)
53 
57 #define RTEMS_DEBUGGER_THREAD_FLAG_EXCEPTION (1 << 0)
58 #define RTEMS_DEBUGGER_THREAD_FLAG_REG_VALID (1 << 1)
59 #define RTEMS_DEBUGGER_THREAD_FLAG_REG_DIRTY (1 << 2)
60 #define RTEMS_DEBUGGER_THREAD_FLAG_CONTINUE (1 << 3)
61 #define RTEMS_DEBUGGER_THREAD_FLAG_STEP (1 << 4)
62 #define RTEMS_DEBUGGER_THREAD_FLAG_STEPPING (1 << 5)
63 #define RTEMS_DEBUGGER_THREAD_FLAG_INTS_DISABLED (1 << 6)
64 /* Target specific flags for use by the target backend. */
65 #define RTEMS_DEBUGGER_THREAD_FLAG_TARGET_BASE (24)
66 #define RTEMS_DEBUGGER_THREAD_FLAG_TARGET_MASK (0xff << RTEMS_DEBUGGER_THREAD_FLAG_TARGET_BASE)
67 
71 #define RTEMS_DEBUGGER_THREAD_FLAG_RESUME \
72  (RTEMS_DEBUGGER_THREAD_FLAG_CONTINUE | \
73  RTEMS_DEBUGGER_THREAD_FLAG_STEP | \
74  RTEMS_DEBUGGER_THREAD_FLAG_STEPPING)
75 
79 #define RTEMS_DEBUGGER_THREAD_FLAG_STEP_INSTR \
80  (RTEMS_DEBUGGER_THREAD_FLAG_STEP | \
81  RTEMS_DEBUGGER_THREAD_FLAG_STEPPING)
82 
86 typedef struct rtems_debugger_thread
87 {
88  uint32_t flags;
89  const char name[RTEMS_DEBUGGER_THREAD_NAME_SIZE];
90  Thread_Control* tcb;
91  rtems_id id;
92  int cpu;
93  uint8_t* registers;
94  int signal;
95  void* frame;
97 
103 {
104  rtems_debugger_thread* thread;
105  DB_UINT start;
106  DB_UINT end;
108 
113 {
119  size_t next;
122 };
123 
127 extern int rtems_debugger_thread_create(void);
128 
132 extern int rtems_debugger_thread_destroy(void);
133 
137 extern int rtems_debugger_thread_find_index(rtems_id id);
138 
142 extern int rtems_debugger_thread_system_suspend(void);
143 
147 extern int rtems_debugger_thread_system_resume(bool detaching);
148 
152 extern int rtems_debugger_thread_continue_all(void);
153 
157 extern int rtems_debugger_thread_continue(rtems_debugger_thread* thread);
158 
162 extern int rtems_debugger_thread_step(rtems_debugger_thread* thread);
163 
167 extern int rtems_debugger_thread_stepping(rtems_debugger_thread* thread,
168  DB_UINT start,
169  DB_UINT end);
170 
175 extern const rtems_debugger_thread_stepper*
176 rtems_debugger_thread_is_stepping(rtems_id id, DB_UINT pc);
177 
181 extern int rtems_debugger_thread_current_priority(rtems_debugger_thread* thread);
182 
186 extern int rtems_debugger_thread_real_priority(rtems_debugger_thread* thread);
187 
191 extern int rtems_debugger_thread_state(rtems_debugger_thread* thread);
192 
196 //extern bool rtems_debugger_thread_state_debugger(rtems_debugger_thread* thread);
197 
201 extern int rtems_debugger_thread_state_str(rtems_debugger_thread* thread,
202  char* buffer,
203  size_t size);
204 
208 extern unsigned long rtems_debugger_thread_stack_size(rtems_debugger_thread* thread);
209 
213 extern void* rtems_debugger_thread_stack_area(rtems_debugger_thread* thread);
214 
219 static inline bool
220 rtems_debugger_thread_flag(rtems_debugger_thread* thread, uint32_t mask)
221 {
222  return (thread->flags & mask) != 0;
223 }
224 
228 static inline rtems_debugger_thread*
229 rtems_debugger_thread_current(rtems_debugger_threads* threads)
230 {
231  return threads->current.block;
232 }
233 
237 static inline uint8_t*
238 rtems_debugger_thread_registers(rtems_debugger_threads* threads)
239 {
240  return threads->registers.block;
241 }
242 
246 static inline rtems_id*
247 rtems_debugger_thread_excludes(rtems_debugger_threads* threads)
248 {
249  return threads->excludes.block;
250 }
251 
255 static inline rtems_id*
256 rtems_debugger_thread_stopped(rtems_debugger_threads* threads)
257 {
258  return threads->stopped.block;
259 }
260 
264 static inline rtems_debugger_thread_stepper*
265 rtems_debugger_thread_steppers(rtems_debugger_threads* threads)
266 {
267  return threads->steppers.block;
268 }
269 
270 #ifdef __cplusplus
271 }
272 #endif /* __cplusplus */
273 
274 #endif
rtems_debugger_block registers
Definition: rtems-debugger-threads.h:115
rtems_debugger_block current
Definition: rtems-debugger-threads.h:114
Definition: rtems-debugger-threads.h:86
rtems_debugger_block excludes
Definition: rtems-debugger-threads.h:116
int selector_cont
Definition: rtems-debugger-threads.h:121
Definition: thread.h:732
rtems_debugger_block stopped
Definition: rtems-debugger-threads.h:117
#define pc
pc, used on mips16 */
Definition: regs.h:67
int selector_gen
Definition: rtems-debugger-threads.h:120
void * block
Definition: rtems-debugger-block.h:47
rtems_debugger_block steppers
Definition: rtems-debugger-threads.h:118
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83
Definition: rtems-debugger-block.h:45
unsigned size
Definition: tte.h:74
Definition: rtems-debugger-threads.h:102
size_t next
Definition: rtems-debugger-threads.h:119
Constants and Structures Related with the Thread Control Block.
Definition: rtems-debugger-threads.h:112