RTEMS: cpukit/libdebugger/rtems-debugger-threads.h Source File

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
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
41extern "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;
96} rtems_debugger_thread;
97
102 typedef struct rtems_debugger_thread_stepper
103{
104 rtems_debugger_thread* thread;
105 DB_UINT start;
106 DB_UINT end;
107} rtems_debugger_thread_stepper;
108
112 struct rtems_debugger_threads
113{
114 rtems_debugger_block current;
115 rtems_debugger_block registers;
116 rtems_debugger_block excludes;
117 rtems_debugger_block stopped;
118 rtems_debugger_block steppers;
119 size_t next;
120 int selector_gen;
121 int selector_cont;
122};
123
127extern int rtems_debugger_thread_create(void);
128
132extern int rtems_debugger_thread_destroy(void);
133
137extern int rtems_debugger_thread_find_index(rtems_id id);
138
142extern int rtems_debugger_thread_system_suspend(void);
143
147extern int rtems_debugger_thread_system_resume(bool detaching);
148
152extern int rtems_debugger_thread_continue_all(void);
153
157extern int rtems_debugger_thread_continue(rtems_debugger_thread* thread);
158
162extern int rtems_debugger_thread_step(rtems_debugger_thread* thread);
163
167extern int rtems_debugger_thread_stepping(rtems_debugger_thread* thread,
168 DB_UINT start,
169 DB_UINT end);
170
175extern const rtems_debugger_thread_stepper*
176rtems_debugger_thread_is_stepping(rtems_id id, DB_UINT pc);
177
181extern int rtems_debugger_thread_current_priority(rtems_debugger_thread* thread);
182
186extern int rtems_debugger_thread_real_priority(rtems_debugger_thread* thread);
187
191extern int rtems_debugger_thread_state(rtems_debugger_thread* thread);
192
196//extern bool rtems_debugger_thread_state_debugger(rtems_debugger_thread* thread);
197
201extern int rtems_debugger_thread_state_str(rtems_debugger_thread* thread,
202 char* buffer,
203 size_t size);
204
208extern unsigned long rtems_debugger_thread_stack_size(rtems_debugger_thread* thread);
209
213extern void* rtems_debugger_thread_stack_area(rtems_debugger_thread* thread);
214
219static inline bool
220rtems_debugger_thread_flag(rtems_debugger_thread* thread, uint32_t mask)
221{
222 return (thread->flags & mask) != 0;
223}
224
228static inline rtems_debugger_thread*
229rtems_debugger_thread_current(rtems_debugger_threads* threads)
230{
231 return threads->current.block;
232}
233
237static inline uint8_t*
238rtems_debugger_thread_registers(rtems_debugger_threads* threads)
239{
240 return threads->registers.block;
241}
242
246static inline rtems_id*
247rtems_debugger_thread_excludes(rtems_debugger_threads* threads)
248{
249 return threads->excludes.block;
250}
251
255static inline rtems_id*
256rtems_debugger_thread_stopped(rtems_debugger_threads* threads)
257{
258 return threads->stopped.block;
259}
260
264static inline rtems_debugger_thread_stepper*
265rtems_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_id
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83
pc
#define pc
pc, used on mips16 *‍/
Definition: regs.h:67
thread.h
Constants and Structures Related with the Thread Control Block.
_Thread_Control
Definition: thread.h:732
rtems_debugger_block
Definition: rtems-debugger-block.h:46
rtems_debugger_block::block
void * block
Definition: rtems-debugger-block.h:47
rtems_debugger_thread_stepper
Definition: rtems-debugger-threads.h:103
rtems_debugger_thread
Definition: rtems-debugger-threads.h:87
rtems_debugger_threads
Definition: rtems-debugger-threads.h:113
rtems_debugger_threads::stopped
rtems_debugger_block stopped
Definition: rtems-debugger-threads.h:117
rtems_debugger_threads::selector_cont
int selector_cont
Definition: rtems-debugger-threads.h:121
rtems_debugger_threads::next
size_t next
Definition: rtems-debugger-threads.h:119
rtems_debugger_threads::registers
rtems_debugger_block registers
Definition: rtems-debugger-threads.h:115
rtems_debugger_threads::steppers
rtems_debugger_block steppers
Definition: rtems-debugger-threads.h:118
rtems_debugger_threads::excludes
rtems_debugger_block excludes
Definition: rtems-debugger-threads.h:116
rtems_debugger_threads::current
rtems_debugger_block current
Definition: rtems-debugger-threads.h:114
rtems_debugger_threads::selector_gen
int selector_gen
Definition: rtems-debugger-threads.h:120