Rev 2833 | Rev 2866 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2833 | Rev 2838 | ||
---|---|---|---|
1 | /** @addtogroup generic |
1 | /** @addtogroup generic |
2 | * @{ |
2 | * @{ |
3 | */ |
3 | */ |
4 | /** @file |
4 | /** @file |
5 | */ |
5 | */ |
6 | 6 | ||
7 | #ifndef KERN_UDEBUG_H_ |
7 | #ifndef KERN_UDEBUG_H_ |
8 | #define KERN_UDEBUG_H_ |
8 | #define KERN_UDEBUG_H_ |
9 | 9 | ||
10 | typedef enum { /* udebug_method_t */ |
10 | typedef enum { /* udebug_method_t */ |
11 | 11 | ||
12 | /** Start debugging the recipient. |
12 | /** Start debugging the recipient. |
13 | * Causes all threads in the receiving task to stop. When they |
13 | * Causes all threads in the receiving task to stop. When they |
14 | * are all stoped, an answer with retval 0 is generated. |
14 | * are all stoped, an answer with retval 0 is generated. |
15 | */ |
15 | */ |
16 | UDEBUG_M_BEGIN = 1, |
16 | UDEBUG_M_BEGIN = 1, |
17 | 17 | ||
18 | /** Finish debugging the recipient. |
18 | /** Finish debugging the recipient. |
19 | * Answers all pending GO and GUARD messages. |
19 | * Answers all pending GO and GUARD messages. |
20 | */ |
20 | */ |
21 | UDEBUG_M_END, |
21 | UDEBUG_M_END, |
22 | 22 | ||
23 | /** Make sure the debugged task is still there. |
23 | /** Make sure the debugged task is still there. |
24 | * This message is answered when the debugged task dies |
24 | * This message is answered when the debugged task dies |
25 | * or the debugging session ends. |
25 | * or the debugging session ends. |
26 | */ |
26 | */ |
27 | UDEBUG_M_GUARD, |
27 | UDEBUG_M_GUARD, |
28 | 28 | ||
29 | /** Run a thread until a debugging event occurs. |
29 | /** Run a thread until a debugging event occurs. |
30 | * This message is answered when the thread stops |
30 | * This message is answered when the thread stops |
31 | * in a debugging event. |
31 | * in a debugging event. |
32 | * |
32 | * |
33 | * - ARG2 - id of the thread to run |
33 | * - ARG2 - id of the thread to run |
34 | */ |
34 | */ |
35 | UDEBUG_M_GO, |
35 | UDEBUG_M_GO, |
36 | 36 | ||
37 | /** Stop a thread being debugged. |
37 | /** Stop a thread being debugged. |
38 | * Creates a special STOP event in the thread, causing |
38 | * Creates a special STOP event in the thread, causing |
39 | * it to answer a pending GO message (if any). |
39 | * it to answer a pending GO message (if any). |
40 | */ |
40 | */ |
41 | UDEBUG_M_STOP, |
41 | UDEBUG_M_STOP, |
42 | 42 | ||
43 | /** Read arguments of a syscall. |
43 | /** Read arguments of a syscall. |
44 | * |
44 | * |
45 | * - ARG2 - thread identification |
45 | * - ARG2 - thread identification |
46 | * - ARG3 - destination address in the caller's address space |
46 | * - ARG3 - destination address in the caller's address space |
47 | * |
47 | * |
48 | */ |
48 | */ |
49 | UDEBUG_M_ARGS_READ, |
49 | UDEBUG_M_ARGS_READ, |
50 | 50 | ||
51 | /** Read thread's userspace register state (istate_t). |
51 | /** Read thread's userspace register state (istate_t). |
52 | * |
52 | * |
53 | * - ARG2 - thread identification |
53 | * - ARG2 - thread identification |
54 | * - ARG3 - destination address in the caller's address space |
54 | * - ARG3 - destination address in the caller's address space |
55 | * - ARG4 - size of receiving buffer in bytes |
55 | * - ARG4 - size of receiving buffer in bytes |
56 | * |
56 | * |
57 | * on answer, the kernel will set: |
57 | * on answer, the kernel will set: |
58 | * |
58 | * |
59 | * - ARG1 - actual size in bytes of data read |
59 | * - ARG1 - actual size in bytes of data read |
60 | * - ARG2 - total size in bytes of data available |
60 | * - ARG2 - total size in bytes of data available |
61 | * |
61 | * |
62 | * or, on error, retval will be |
62 | * or, on error, retval will be |
63 | * - ENOENT - thread does not exist |
63 | * - ENOENT - thread does not exist |
64 | * - EBUSY - register state not available |
64 | * - EBUSY - register state not available |
65 | */ |
65 | */ |
66 | UDEBUG_M_REGS_READ, |
66 | UDEBUG_M_REGS_READ, |
67 | 67 | ||
68 | /** Write thread's userspace register state (istate_t). |
68 | /** Write thread's userspace register state (istate_t). |
69 | * |
69 | * |
70 | * - ARG2 - thread identification |
70 | * - ARG2 - thread identification |
71 | * - ARG3 - source address in the caller's address space |
71 | * - ARG3 - source address in the caller's address space |
72 | * - ARG4 - size of source data in bytes |
72 | * - ARG4 - size of source data in bytes |
73 | * |
73 | * |
74 | * on answer, the kernel will set: |
74 | * on answer, the kernel will set: |
75 | * |
75 | * |
76 | * - ARG1 - actual size in bytes of data copied |
76 | * - ARG1 - actual size in bytes of data copied |
77 | * - ARG2 - max size in bytes that could have been copied |
77 | * - ARG2 - max size in bytes that could have been copied |
78 | * |
78 | * |
79 | * or, on error, retval will be |
79 | * or, on error, retval will be |
80 | * - ENOENT - thread does not exist |
80 | * - ENOENT - thread does not exist |
81 | * - EBUSY - register state not available |
81 | * - EBUSY - register state not available |
82 | */ |
82 | */ |
83 | UDEBUG_M_REGS_WRITE, |
83 | UDEBUG_M_REGS_WRITE, |
84 | 84 | ||
85 | /** Read the list of the debugged tasks's threads. |
85 | /** Read the list of the debugged tasks's threads. |
86 | * |
86 | * |
87 | * - ARG2 - destination address in the caller's address space |
87 | * - ARG2 - destination address in the caller's address space |
88 | * - ARG3 - size of receiving buffer in bytes |
88 | * - ARG3 - size of receiving buffer in bytes |
89 | * |
89 | * |
90 | * The kernel fills the buffer with a series of sysarg_t values |
90 | * The kernel fills the buffer with a series of sysarg_t values |
91 | * (thread ids). On answer, the kernel will set: |
91 | * (thread ids). On answer, the kernel will set: |
92 | * |
92 | * |
93 | * - ARG1 - number of bytes that were actually copied |
93 | * - ARG1 - number of bytes that were actually copied |
94 | * - ARG2 - number of bytes of the complete data |
94 | * - ARG2 - number of bytes of the complete data |
95 | * |
95 | * |
96 | */ |
96 | */ |
97 | UDEBUG_M_THREAD_READ, |
97 | UDEBUG_M_THREAD_READ, |
98 | 98 | ||
99 | /** Read the debugged tasks's memory. |
99 | /** Read the debugged tasks's memory. |
100 | * |
100 | * |
101 | * - ARG2 - destination address in the caller's address space |
101 | * - ARG2 - destination address in the caller's address space |
102 | * - ARG3 - source address in the recipient's address space |
102 | * - ARG3 - source address in the recipient's address space |
103 | * - ARG4 - size of receiving buffer in bytes |
103 | * - ARG4 - size of receiving buffer in bytes |
104 | * |
104 | * |
105 | */ |
105 | */ |
106 | UDEBUG_M_MEM_READ, |
106 | UDEBUG_M_MEM_READ, |
107 | 107 | ||
108 | /** Write the debugged tasks's memory. |
108 | /** Write the debugged tasks's memory. |
109 | * |
109 | * |
110 | * - ARG2 - source address in the caller's address space |
110 | * - ARG2 - source address in the caller's address space |
111 | * - ARG3 - destination address in the recipient's address space |
111 | * - ARG3 - destination address in the recipient's address space |
112 | * - ARG4 - size of receiving buffer in bytes |
112 | * - ARG4 - size of receiving buffer in bytes |
113 | * |
113 | * |
114 | */ |
114 | */ |
115 | UDEBUG_M_MEM_WRITE |
115 | UDEBUG_M_MEM_WRITE |
116 | 116 | ||
117 | 117 | ||
118 | } udebug_method_t; |
118 | } udebug_method_t; |
119 | 119 | ||
120 | 120 | ||
121 | typedef enum { |
121 | typedef enum { |
- | 122 | UDEBUG_EVENT_FINISHED, /**< Debuging session has finished */ |
|
122 | UDEBUG_EVENT_SYSCALL |
123 | UDEBUG_EVENT_SYSCALL /**< A syscall has been executed */ |
123 | } udebug_event_t; |
124 | } udebug_event_t; |
124 | 125 | ||
125 | #ifdef KERNEL |
126 | #ifdef KERNEL |
126 | 127 | ||
127 | typedef enum { |
128 | typedef enum { |
128 | /** Task is not being debugged */ |
129 | /** Task is not being debugged */ |
129 | UDEBUG_TS_INACTIVE, |
130 | UDEBUG_TS_INACTIVE, |
130 | /** BEGIN operation in progress (waiting for threads to stop) */ |
131 | /** BEGIN operation in progress (waiting for threads to stop) */ |
131 | UDEBUG_TS_BEGINNING, |
132 | UDEBUG_TS_BEGINNING, |
132 | /** Debugger fully connected */ |
133 | /** Debugger fully connected */ |
133 | UDEBUG_TS_ACTIVE, |
134 | UDEBUG_TS_ACTIVE, |
134 | /** Task is shutting down, no more debug activities allowed */ |
135 | /** Task is shutting down, no more debug activities allowed */ |
135 | UDEBUG_TS_SHUTDOWN |
136 | UDEBUG_TS_SHUTDOWN |
136 | } udebug_task_state_t; |
137 | } udebug_task_state_t; |
137 | 138 | ||
138 | void udebug_syscall_event(unative_t a1, unative_t a2, unative_t a3, |
139 | void udebug_syscall_event(unative_t a1, unative_t a2, unative_t a3, |
139 | unative_t a4, unative_t a5, unative_t a6, unative_t id, unative_t rc); |
140 | unative_t a4, unative_t a5, unative_t a6, unative_t id, unative_t rc); |
140 | void udebug_stoppable_begin(void); |
141 | void udebug_stoppable_begin(void); |
141 | void udebug_stoppable_end(void); |
142 | void udebug_stoppable_end(void); |
142 | 143 | ||
143 | #endif |
144 | #endif |
144 | 145 | ||
145 | #endif |
146 | #endif |
146 | 147 | ||
147 | /** @} |
148 | /** @} |
148 | */ |
149 | */ |
149 | 150 |