Better abstraction of setting kernel stack.
This commit is contained in:
parent
950610e1eb
commit
61dbb4a2ec
|
@ -80,17 +80,17 @@ namespace Sortix
|
||||||
Syscall::Register(SYSCALL_SLEEP, (void*) SysSleep);
|
Syscall::Register(SYSCALL_SLEEP, (void*) SysSleep);
|
||||||
Syscall::Register(SYSCALL_USLEEP, (void*) SysUSleep);
|
Syscall::Register(SYSCALL_USLEEP, (void*) SysUSleep);
|
||||||
|
|
||||||
addr_t stackstart = Memory::GetKernelStack();
|
addr_t stackhigher = Memory::GetKernelStack();
|
||||||
size_t stacksize = Memory::GetKernelStackSize();
|
size_t stacksize = Memory::GetKernelStackSize();
|
||||||
addr_t stackend = stackstart - stacksize;
|
addr_t stacklower = stackhigher - stacksize;
|
||||||
int prot = PROT_KREAD | PROT_KWRITE;
|
int prot = PROT_KREAD | PROT_KWRITE;
|
||||||
if ( !Memory::MapRange(stackend, stacksize, prot) )
|
if ( !Memory::MapRange(stacklower, stacksize, prot) )
|
||||||
{
|
{
|
||||||
PanicF("could not create kernel stack (%zx to %zx)",
|
PanicF("could not create kernel stack (%zx to %zx)",
|
||||||
stackend, stackstart);
|
stacklower, stackhigher);
|
||||||
}
|
}
|
||||||
|
|
||||||
GDT::SetKernelStack((size_t*) stackstart);
|
GDT::SetKernelStack(stacklower, stacksize, stackhigher);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The no operating thread is a thread stuck in an infinite loop that
|
// The no operating thread is a thread stuck in an infinite loop that
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
||||||
COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011, 2012.
|
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
|
||||||
|
|
||||||
This file is part of Sortix.
|
This file is part of Sortix.
|
||||||
|
|
||||||
|
@ -142,12 +142,12 @@ namespace Sortix
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetKernelStack(size_t* stack)
|
void SetKernelStack(addr_t stacklower, size_t stacksize, addr_t stackhigher)
|
||||||
{
|
{
|
||||||
#ifdef PLATFORM_X86
|
#ifdef PLATFORM_X86
|
||||||
tss_entry.esp0 = (uint32_t) stack;
|
tss_entry.esp0 = (uint32_t) stackhigher;
|
||||||
#elif defined(PLATFORM_X64)
|
#elif defined(PLATFORM_X64)
|
||||||
tss_entry.stack0 = (uint64_t) stack;
|
tss_entry.stack0 = (uint64_t) stackhigher;
|
||||||
#else
|
#else
|
||||||
#warning "TSS is not yet supported on this arch!"
|
#warning "TSS is not yet supported on this arch!"
|
||||||
while(true);
|
while(true);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
||||||
COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011, 2012.
|
Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
|
||||||
|
|
||||||
This file is part of Sortix.
|
This file is part of Sortix.
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ namespace Sortix
|
||||||
void Init();
|
void Init();
|
||||||
void SetGate(int32_t num, uint32_t base, uint32_t limit, uint8_t access, uint8_t gran);
|
void SetGate(int32_t num, uint32_t base, uint32_t limit, uint8_t access, uint8_t gran);
|
||||||
void WriteTSS(int32_t num, uint16_t ss0, addr_t stack0);
|
void WriteTSS(int32_t num, uint16_t ss0, addr_t stack0);
|
||||||
void SetKernelStack(size_t* stack);
|
void SetKernelStack(addr_t stacklower, size_t stacksize, addr_t stackhigher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue