Subversion Repositories HelenOS

Rev

Rev 3018 | Rev 3606 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3018 Rev 3026
Line 174... Line 174...
174
} udebug_evmask_t;
174
} udebug_evmask_t;
175
 
175
 
176
#ifdef KERNEL
176
#ifdef KERNEL
177
 
177
 
178
#include <synch/mutex.h>
178
#include <synch/mutex.h>
-
 
179
#include <arch/interrupt.h>
-
 
180
#include <atomic.h>
179
 
181
 
180
typedef enum {
182
typedef enum {
181
    /** Task is not being debugged */
183
    /** Task is not being debugged */
182
    UDEBUG_TS_INACTIVE,
184
    UDEBUG_TS_INACTIVE,
183
    /** BEGIN operation in progress (waiting for threads to stop) */
185
    /** BEGIN operation in progress (waiting for threads to stop) */
Line 191... Line 193...
191
/** Debugging part of task_t structure.
193
/** Debugging part of task_t structure.
192
 */
194
 */
193
typedef struct {
195
typedef struct {
194
    /** Synchronize debug ops on this task / access to this structure */
196
    /** Synchronize debug ops on this task / access to this structure */
195
    mutex_t lock;
197
    mutex_t lock;
-
 
198
    char *lock_owner;
196
 
199
 
197
    udebug_task_state_t dt_state;
200
    udebug_task_state_t dt_state;
198
    call_t *begin_call;
201
    call_t *begin_call;
199
    int not_stoppable_count;
202
    int not_stoppable_count;
200
    struct task *debugger;
203
    struct task *debugger;
Line 202... Line 205...
202
} udebug_task_t;
205
} udebug_task_t;
203
 
206
 
204
/** Debugging part of thread_t structure.
207
/** Debugging part of thread_t structure.
205
 */
208
 */
206
typedef struct {
209
typedef struct {
-
 
210
    /**
-
 
211
     * Prevent deadlock with udebug_before_thread_runs() in interrupt
-
 
212
     * handler, without actually disabling interrupts.
-
 
213
     * ==0 means "unlocked", >0 means "locked"
-
 
214
     */
-
 
215
    atomic_t int_lock;
-
 
216
 
207
    /** Synchronize debug ops on this thread / access to this structure */
217
    /** Synchronize debug ops on this thread / access to this structure */
208
    SPINLOCK_DECLARE(lock);
218
    mutex_t lock;
209
 
219
 
210
    waitq_t go_wq;
220
    waitq_t go_wq;
211
    call_t *go_call;
221
    call_t *go_call;
212
    unative_t syscall_args[6];
222
    unative_t syscall_args[6];
213
    istate_t *uspace_state;
223
    istate_t *uspace_state;
214
    bool in_before_thread_runs;
-
 
215
 
224
 
216
    /** What type of event are we stopped in or 0 if none */
225
    /** What type of event are we stopped in or 0 if none */
217
    udebug_event_t cur_event;  
226
    udebug_event_t cur_event;  
218
    bool stop;
227
    bool stop;
219
    bool stoppable;
228
    bool stoppable;