コード例 #1
0
ファイル: machdep.LINUX.cpp プロジェクト: AlanDeSmet/htcondor
/*
  Return starting address of stack segment.
*/
long
stack_start_addr()
{
	jmp_buf env;
	unsigned long addr;

	(void)SETJMP(env);

	addr = (long)JMP_BUF_SP(env);
	PTR_DECRYPT(addr);

	return addr & PAGE_MASK;
}
コード例 #2
0
ファイル: user_threads.c プロジェクト: Prutkov-Alex/234123
thread_id uthread_create(UTHREAD_START_ROUTINE start_routine,void* arg) {
    thread_t *thread;

    if(threads == 0) {
	if(uthread_init() == UTHREAD_FAIL)
	    return UTHREAD_FAIL;
    }
    uthread_disable();
    thread = uthread_alloc(start_routine,arg);
    
    /* We save this point as new thread execution start. When we return here,
     * we spawn the thread and start it's execution. */
    /* JMP_BUF_SP(thread->stack) = ((long)uthread_stack_alloc())+UTHREAD_DEF_STACK_SIZE; */
    if(sigsetjmp(thread->stack,1)) {
	/* Execute this if we returned with siglongjmp. This will happen when
	 * jumping from alarm handler. */
	uthread_spawn(current);
    }
    JMP_BUF_SP(thread->stack) = ((long)uthread_stack_alloc())+UTHREAD_DEF_STACK_SIZE;
    uthread_enable();
    return thread->id;
}