main
Eggert Jung 4 months ago
parent 24a0888760
commit a0e2a59f96

@ -31,4 +31,5 @@ context_launch:
; with values from the non-volatile registers saved within the thread context (r15, r14, ...) ; with values from the non-volatile registers saved within the thread context (r15, r14, ...)
align 16 align 16
fake_systemv_abi: fake_systemv_abi:
mov rdi, r15
ret

@ -8,8 +8,9 @@ void panic(){
void prepareContext(void* tos, Context& context, void (*kickoff)(void*), void prepareContext(void* tos, Context& context, void (*kickoff)(void*),
void* param1) { void* param1) {
((uint64_t*)tos)[-1] = (uint64_t)panic; ((uint64_t*)tos)[-2] = (uint64_t)panic;
((uint64_t*)tos)[0] = (uint64_t)kickoff; ((uint64_t*)tos)[-1] = (uint64_t)kickoff;
((uint64_t*)tos)[0] = (uint64_t)fake_systemv_abi;
context.rsp = tos; context.rsp = tos;
context.rbx = 0; context.rbx = 0;
context.rbp = 0; context.rbp = 0;

@ -17,6 +17,7 @@
#include "interrupt/guard.h" #include "interrupt/guard.h"
#include "arch/context.h" #include "arch/context.h"
#include "thread/thread.h"
///TextStream kout = TextStream(0, 80, 0, 10, true); ///TextStream kout = TextStream(0, 80, 0, 10, true);
Ticketlock koutlock; Ticketlock koutlock;
@ -108,9 +109,10 @@ extern "C" int main() {
DBG << "Main CPU " << static_cast<int>(LAPIC::getID()) << endl << flush; DBG << "Main CPU " << static_cast<int>(LAPIC::getID()) << endl << flush;
Context test1; Context test1;
Thread test1_thread;
uint8_t test1_stack[256]; uint8_t test1_stack[256];
prepareContext(test1_stack, test1, (void(*)(void*)) &(Application::kickoff)); prepareContext(&test1_stack[255], test1, (void(*)(void*)) &(Application::kickoff), );
context_launch(&test1); context_launch(&test1);
//Application{}.action(); //Application{}.action();

Loading…
Cancel
Save