X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Farch%2Fx86%2Fthread.cc;fp=kernel%2Farch%2Fx86%2Fthread.cc;h=f969a96b9adfea44e79a8c33b80d7fcbdc3275bd;hp=d7e445c5e65fffa933019c6434765c6de86bdcd2;hb=1ac390fe1e18444008857b056c947710be9621a8;hpb=6e64b28821757af60447c790ae52a91831a9d4f0 diff --git a/kernel/arch/x86/thread.cc b/kernel/arch/x86/thread.cc index d7e445c..f969a96 100644 --- a/kernel/arch/x86/thread.cc +++ b/kernel/arch/x86/thread.cc @@ -28,13 +28,13 @@ namespace Arch { { u32 dummy1, dummy2; - if (dest->addr_space) { - assert(dest->addr_space == dest->active_addr_space); + if (dest->aspace) { + assert(dest->aspace == dest->active_aspace); - if (dest->addr_space != src->active_addr_space) - set_aspace(dest->addr_space); + if (dest->aspace != src->active_aspace) + set_aspace(dest->aspace); } else { - dest->active_addr_space = src->active_addr_space; + dest->active_aspace = src->active_aspace; } Priv::tss.esp0 = reinterpret_cast(dest); @@ -51,4 +51,17 @@ namespace Arch { "0" (&src->arch.esp), "1" (&dest->arch.esp) : "ebx", "edx", "esi", "edi", "memory"); } + + void ArchThread::init(void *entry, void *arg1, void *arg2) + { + void **stack = reinterpret_cast(this); + + *--stack = arg2; + *--stack = arg1; + *--stack = entry; + + esp = stack; + ebp = 0; + jump_to_init = 1; + } }