Better abstraction of setting kernel stack.

This commit is contained in:
Jonas 'Sortie' Termansen 2012-08-02 15:24:00 +02:00
parent 950610e1eb
commit 61dbb4a2ec
3 changed files with 11 additions and 11 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);
} }
} }