Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2787 | decky | 1 | |
2 | /** @addtogroup tdebug |
||
3 | * @{ |
||
4 | */ |
||
5 | /** @file |
||
6 | */ |
||
7 | |||
8 | #ifndef KERN_TDEBUG_TYPE_H_ |
||
9 | #define KERN_TDEBUG_TYPE_H_ |
||
10 | |||
11 | /** |
||
12 | * Type of tdebug event. |
||
13 | */ |
||
14 | typedef enum { |
||
15 | TDEBUG_EV_STOP, /**< stopped on monitor request */ |
||
16 | TDEBUG_EV_SYSCALL, /**< syscall */ |
||
17 | TDEBUG_EV_EXCEPTION, /**< hardware exception */ |
||
18 | TDEBUG_EV_IBEFORE, /**< before executing an instruction */ |
||
19 | TDEBUG_EV_IAFTER /**< after executing an instruction */ |
||
20 | } tdebug_event_t; |
||
21 | |||
22 | /** |
||
23 | * Event type bitmasks. |
||
24 | */ |
||
25 | typedef enum { |
||
26 | TDEBUG_EVMASK_STOP = (1 << TDEBUG_EV_STOP), |
||
27 | TDEBUG_EVMASK_SYSCALL = (1 << TDEBUG_EV_SYSCALL), |
||
28 | TDEBUG_EVMASK_EXCEPTION = (1 << TDEBUG_EV_EXCEPTION), |
||
29 | TDEBUG_EVMASK_IBEFORE = (1 << TDEBUG_EV_IBEFORE), |
||
30 | TDEBUG_EVMASK_IAFTER = (1 << TDEBUG_EV_IAFTER), |
||
31 | } tdebug_evmask_t; |
||
32 | |||
33 | #ifdef KERNEL |
||
34 | |||
35 | #include <atomic.h> |
||
36 | #include <arch/types.h> |
||
37 | #include <arch/interrupt.h> |
||
38 | #include <synch/condvar.h> |
||
39 | |||
40 | |||
41 | struct thread; |
||
42 | struct task; |
||
43 | |||
44 | /** |
||
45 | * A part of the task structure related to the tdebug interface. |
||
46 | * Access is synchronized using task lock of the containing task structure, |
||
47 | * except for the field have_monitor, which is not locked. |
||
48 | */ |
||
49 | typedef struct task_tdebug { |
||
50 | atomic_t have_monitor; /**< this field is only informative */ |
||
51 | struct task *monitor; /**< points to the monitoring task or NULL */ |
||
52 | unative_t method; /**< method number to use with notifications */ |
||
53 | |||
54 | link_t targets; |
||
55 | link_t targets_link; |
||
56 | } task_tdebug_t; |
||
57 | |||
58 | /** |
||
59 | * A part of the thread structure related to the tdebug interface. |
||
60 | */ |
||
61 | typedef struct thread_tdebug { |
||
62 | int stopped; |
||
63 | condvar_t stopped_cv; |
||
64 | unative_t current_event; |
||
65 | |||
66 | int stop_request; |
||
67 | unative_t event_mask; |
||
68 | |||
69 | /** Points to the stored userspace istate or NULL if none */ |
||
70 | istate_t *uspace_state; |
||
71 | |||
72 | unative_t *syscall_args; |
||
73 | } thread_tdebug_t; |
||
74 | |||
75 | #endif /* KERNEL */ |
||
76 | |||
77 | #endif |
||
78 | |||
79 | /** @} |
||
80 | */ |