Subversion Repositories HelenOS

Rev

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

Rev 3606 Rev 3611
Line 230... Line 230...
230
    }
230
    }
231
}
231
}
232
 
232
 
233
/** Upon being scheduled to run, check if the current thread should stop.
233
/** Upon being scheduled to run, check if the current thread should stop.
234
 *
234
 *
235
 * This function is called from clock(). Preemption is enabled.
235
 * This function is called from clock().
236
 * interrupts are disabled, but since this is called after
-
 
237
 * being scheduled-in, we can enable them, if we're careful enough
-
 
238
 * not to allow arbitrary recursion or deadlock with the thread context.
-
 
239
 */
236
 */
240
void udebug_before_thread_runs(void)
237
void udebug_before_thread_runs(void)
241
{
238
{
242
    ipl_t ipl;
-
 
243
 
-
 
244
    return;
-
 
245
 
-
 
246
    ipl = interrupts_enable();
-
 
247
 
-
 
248
    /* Now we're free to do whatever we need (lock mutexes, sleep, etc.) */
-
 
249
 
-
 
250
    /* Check if we're supposed to stop */
239
    /* Check if we are supposed to stop. */
251
    udebug_stoppable_begin();
240
    udebug_stoppable_begin();
252
    udebug_stoppable_end();
241
    udebug_stoppable_end();
253
 
-
 
254
    interrupts_restore(ipl);
-
 
255
}
242
}
256
 
243
 
257
/** Syscall event hook.
244
/** Syscall event hook.
258
 *
245
 *
259
 * Must be called before and after servicing a system call. This generates
246
 * Must be called before and after servicing a system call. This generates
Line 439... Line 426...
439
        mutex_unlock(&THREAD->udebug.lock);
426
        mutex_unlock(&THREAD->udebug.lock);
440
        mutex_unlock(&TASK->udebug.lock);
427
        mutex_unlock(&TASK->udebug.lock);
441
        return;
428
        return;
442
    }
429
    }
443
 
430
 
444
    printf("udebug_breakpoint/trap_event\n");
431
    LOG("udebug_breakpoint/trap_event\n");
445
    call = THREAD->udebug.go_call;
432
    call = THREAD->udebug.go_call;
446
    THREAD->udebug.go_call = NULL;
433
    THREAD->udebug.go_call = NULL;
447
 
434
 
448
    IPC_SET_RETVAL(call->data, 0);
435
    IPC_SET_RETVAL(call->data, 0);
449
    IPC_SET_ARG1(call->data, etype);
436
    IPC_SET_ARG1(call->data, etype);
Line 455... Line 442...
455
     * point it must be back to the initial true value).
442
     * point it must be back to the initial true value).
456
     */
443
     */
457
    THREAD->udebug.go = false;
444
    THREAD->udebug.go = false;
458
    THREAD->udebug.cur_event = etype;
445
    THREAD->udebug.cur_event = etype;
459
 
446
 
460
    printf("- send answer\n");
447
    LOG("- send answer\n");
461
    ipc_answer(&TASK->answerbox, call);
448
    ipc_answer(&TASK->answerbox, call);
462
 
449
 
463
    mutex_unlock(&THREAD->udebug.lock);
450
    mutex_unlock(&THREAD->udebug.lock);
464
    mutex_unlock(&TASK->udebug.lock);
451
    mutex_unlock(&TASK->udebug.lock);
465
 
452