Subversion Repositories HelenOS

Rev

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

Rev 2918 Rev 2921
Line 327... Line 327...
327
    interrupts_restore(ipl);
327
    interrupts_restore(ipl);
328
 
328
 
329
    /* This event does not sleep - debugging has finished in this thread */
329
    /* This event does not sleep - debugging has finished in this thread */
330
}
330
}
331
 
331
 
332
void udebug_breakpoint_event(uintptr_t addr)
332
static void breakpoint_trap_event(uintptr_t addr, udebug_event_t etype)
333
{
333
{
334
    call_t *call;
334
    call_t *call;
335
    ipl_t ipl;
335
    ipl_t ipl;
336
    udebug_event_t etype;
-
 
337
 
-
 
338
    etype = UDEBUG_EVENT_BREAKPOINT;
-
 
339
 
336
 
340
    ipl = interrupts_disable();
337
    ipl = interrupts_disable();
341
    spinlock_lock(&THREAD->debug_lock);
338
    spinlock_lock(&THREAD->debug_lock);
342
 
339
 
343
    /* Must only generate events when in debugging session and have go */
340
    /* Must only generate events when in debugging session and have go */
Line 347... Line 344...
347
        spinlock_unlock(&THREAD->debug_lock);
344
        spinlock_unlock(&THREAD->debug_lock);
348
        interrupts_restore(ipl);
345
        interrupts_restore(ipl);
349
        return;
346
        return;
350
    }
347
    }
351
 
348
 
352
    klog_printf("udebug_breakpoint_event");
349
    klog_printf("udebug_breakpoint/trap_event");
353
    call = THREAD->debug_go_call;
350
    call = THREAD->debug_go_call;
354
    IPC_SET_RETVAL(call->data, 0);
351
    IPC_SET_RETVAL(call->data, 0);
355
    IPC_SET_ARG1(call->data, etype);
352
    IPC_SET_ARG1(call->data, etype);
356
    IPC_SET_ARG2(call->data, addr);
353
    IPC_SET_ARG2(call->data, addr);
357
 
354
 
Line 372... Line 369...
372
    interrupts_restore(ipl);
369
    interrupts_restore(ipl);
373
 
370
 
374
    udebug_wait_for_go(&THREAD->go_wq);
371
    udebug_wait_for_go(&THREAD->go_wq);
375
}
372
}
376
 
373
 
-
 
374
void udebug_breakpoint_event(uintptr_t addr)
-
 
375
{
-
 
376
    breakpoint_trap_event(addr, UDEBUG_EVENT_BREAKPOINT);
-
 
377
}
-
 
378
 
-
 
379
void udebug_trap_event(uintptr_t addr)
-
 
380
{
-
 
381
    breakpoint_trap_event(addr, UDEBUG_EVENT_TRAP);
-
 
382
}
377
 
383
 
378
/**
384
/**
379
 * Terminate task debugging session.
385
 * Terminate task debugging session.
380
 *
386
 *
381
 * \param ta Must be already locked and interrupts must be disabled.
387
 * \param ta Must be already locked and interrupts must be disabled.