mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Syscalls working as expected
This commit is contained in:
parent
5dd496a73f
commit
c2628019b7
@ -79,7 +79,6 @@ extern "C" __attribute__((naked, used, no_stack_protector)) void SystemCallHandl
|
|||||||
void InitializeSystemCalls()
|
void InitializeSystemCalls()
|
||||||
{
|
{
|
||||||
wrmsr(MSR_EFER, rdmsr(MSR_EFER) | 1);
|
wrmsr(MSR_EFER, rdmsr(MSR_EFER) | 1);
|
||||||
// TODO: THIS IS NOT WORKING! USER CODE AND USER DATA SHOULD BE CS:0x23 AND SS:0x1B
|
|
||||||
wrmsr(MSR_STAR, ((uint64_t)(GDT_KERNEL_CODE) << 32) | ((uint64_t)(GDT_KERNEL_DATA | 3) << 48));
|
wrmsr(MSR_STAR, ((uint64_t)(GDT_KERNEL_CODE) << 32) | ((uint64_t)(GDT_KERNEL_DATA | 3) << 48));
|
||||||
wrmsr(MSR_LSTAR, (uint64_t)SystemCallHandlerStub);
|
wrmsr(MSR_LSTAR, (uint64_t)SystemCallHandlerStub);
|
||||||
wrmsr(MSR_SYSCALL_MASK, (uint64_t)(1 << 9));
|
wrmsr(MSR_SYSCALL_MASK, (uint64_t)(1 << 9));
|
||||||
|
@ -7,10 +7,10 @@ SystemCallHandlerStub:
|
|||||||
mov [gs:0x8], rsp ; CPUData->TempStack
|
mov [gs:0x8], rsp ; CPUData->TempStack
|
||||||
mov rsp, [gs:0x0] ; CPUData->SystemCallStack
|
mov rsp, [gs:0x0] ; CPUData->SystemCallStack
|
||||||
|
|
||||||
push qword 0x23 ; user data segment
|
push qword 0x1b ; user data segment
|
||||||
push qword [gs:0x8] ; saved stack
|
push qword [gs:0x8] ; saved stack
|
||||||
push r11 ; saved rflags
|
push r11 ; saved rflags
|
||||||
push qword 0x1b ; user code segment
|
push qword 0x23 ; user code segment
|
||||||
push rcx ; Current RIP
|
push rcx ; Current RIP
|
||||||
|
|
||||||
cld
|
cld
|
||||||
|
@ -44,20 +44,6 @@ namespace GlobalDescriptorTable
|
|||||||
.Flags = {.Raw = 0x0},
|
.Flags = {.Raw = 0x0},
|
||||||
.BaseHigh = 0x0},
|
.BaseHigh = 0x0},
|
||||||
|
|
||||||
// user code
|
|
||||||
{.Length = 0x0,
|
|
||||||
.BaseLow = 0x0,
|
|
||||||
.BaseMiddle = 0x0,
|
|
||||||
.Access = {.A = 0,
|
|
||||||
.RW = 1,
|
|
||||||
.DC = 0,
|
|
||||||
.E = 1,
|
|
||||||
.S = 1,
|
|
||||||
.DPL = 3,
|
|
||||||
.P = 1},
|
|
||||||
.Flags = {.Unknown = 0x0, .L = 1},
|
|
||||||
.BaseHigh = 0x0},
|
|
||||||
|
|
||||||
// user data
|
// user data
|
||||||
{.Length = 0x0,
|
{.Length = 0x0,
|
||||||
.BaseLow = 0x0,
|
.BaseLow = 0x0,
|
||||||
@ -72,6 +58,20 @@ namespace GlobalDescriptorTable
|
|||||||
.Flags = {.Raw = 0x0},
|
.Flags = {.Raw = 0x0},
|
||||||
.BaseHigh = 0x0},
|
.BaseHigh = 0x0},
|
||||||
|
|
||||||
|
// user code
|
||||||
|
{.Length = 0x0,
|
||||||
|
.BaseLow = 0x0,
|
||||||
|
.BaseMiddle = 0x0,
|
||||||
|
.Access = {.A = 0,
|
||||||
|
.RW = 1,
|
||||||
|
.DC = 0,
|
||||||
|
.E = 1,
|
||||||
|
.S = 1,
|
||||||
|
.DPL = 3,
|
||||||
|
.P = 1},
|
||||||
|
.Flags = {.Unknown = 0x0, .L = 1},
|
||||||
|
.BaseHigh = 0x0},
|
||||||
|
|
||||||
// tss
|
// tss
|
||||||
{}};
|
{}};
|
||||||
|
|
||||||
|
@ -55,16 +55,10 @@ namespace InterruptDescriptorTable
|
|||||||
"pushq %r13\n"
|
"pushq %r13\n"
|
||||||
"pushq %r14\n"
|
"pushq %r14\n"
|
||||||
"pushq %r15\n"
|
"pushq %r15\n"
|
||||||
// push ds segment
|
|
||||||
"movq %ds, %rax\n"
|
|
||||||
"pushq %rax\n"
|
|
||||||
|
|
||||||
"movq %rsp, %rdi\n"
|
"movq %rsp, %rdi\n"
|
||||||
"call ExceptionHandler\n"
|
"call ExceptionHandler\n"
|
||||||
|
|
||||||
// pop ds segment
|
|
||||||
"popq %rax\n"
|
|
||||||
|
|
||||||
// pop all registers
|
// pop all registers
|
||||||
"popq %r15\n"
|
"popq %r15\n"
|
||||||
"popq %r14\n"
|
"popq %r14\n"
|
||||||
@ -104,16 +98,10 @@ namespace InterruptDescriptorTable
|
|||||||
"pushq %r13\n"
|
"pushq %r13\n"
|
||||||
"pushq %r14\n"
|
"pushq %r14\n"
|
||||||
"pushq %r15\n"
|
"pushq %r15\n"
|
||||||
// push ds segment
|
|
||||||
"movq %ds, %rax\n"
|
|
||||||
"pushq %rax\n"
|
|
||||||
|
|
||||||
"movq %rsp, %rdi\n"
|
"movq %rsp, %rdi\n"
|
||||||
"call MainInterruptHandler\n"
|
"call MainInterruptHandler\n"
|
||||||
|
|
||||||
// pop ds segment
|
|
||||||
"popq %rax\n"
|
|
||||||
|
|
||||||
"popq %r15\n"
|
"popq %r15\n"
|
||||||
"popq %r14\n"
|
"popq %r14\n"
|
||||||
"popq %r13\n"
|
"popq %r13\n"
|
||||||
|
@ -117,8 +117,8 @@ namespace GlobalDescriptorTable
|
|||||||
GlobalDescriptorTableEntry Null;
|
GlobalDescriptorTableEntry Null;
|
||||||
GlobalDescriptorTableEntry Code;
|
GlobalDescriptorTableEntry Code;
|
||||||
GlobalDescriptorTableEntry Data;
|
GlobalDescriptorTableEntry Data;
|
||||||
GlobalDescriptorTableEntry UserCode;
|
|
||||||
GlobalDescriptorTableEntry UserData;
|
GlobalDescriptorTableEntry UserData;
|
||||||
|
GlobalDescriptorTableEntry UserCode;
|
||||||
TaskStateSegmentEntry TaskStateSegment;
|
TaskStateSegmentEntry TaskStateSegment;
|
||||||
} __attribute__((packed)) GlobalDescriptorTableEntries;
|
} __attribute__((packed)) GlobalDescriptorTableEntries;
|
||||||
|
|
||||||
|
@ -348,10 +348,13 @@ namespace CrashHandler
|
|||||||
CPU::x64::CR8 cr8 = CPU::x64::readcr8();
|
CPU::x64::CR8 cr8 = CPU::x64::readcr8();
|
||||||
CPU::x64::EFER efer;
|
CPU::x64::EFER efer;
|
||||||
efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
|
||||||
EHPrint("\eFF0000FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n",
|
EHPrint("\eFF0000FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
Frame->ss, Frame->cs, Frame->ds);
|
Frame->ss, Frame->cs, ds);
|
||||||
EHPrint("R8=%#llx R9=%#llx R10=%#llx R11=%#llx\n", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
EHPrint("R8=%#llx R9=%#llx R10=%#llx R11=%#llx\n", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
||||||
EHPrint("R12=%#llx R13=%#llx R14=%#llx R15=%#llx\n", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
EHPrint("R12=%#llx R13=%#llx R14=%#llx R15=%#llx\n", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
||||||
EHPrint("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx\n", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
EHPrint("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx\n", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
||||||
@ -402,6 +405,9 @@ namespace CrashHandler
|
|||||||
crashdata.cr4 = CPU::x64::readcr4();
|
crashdata.cr4 = CPU::x64::readcr4();
|
||||||
crashdata.cr8 = CPU::x64::readcr8();
|
crashdata.cr8 = CPU::x64::readcr8();
|
||||||
crashdata.efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
crashdata.efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
|
||||||
// Get debug registers
|
// Get debug registers
|
||||||
asmv("movq %%dr0, %0"
|
asmv("movq %%dr0, %0"
|
||||||
@ -458,7 +464,7 @@ namespace CrashHandler
|
|||||||
{
|
{
|
||||||
error("FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx",
|
error("FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
Frame->ss, Frame->cs, Frame->ds);
|
Frame->ss, Frame->cs, ds);
|
||||||
error("R8=%#llx R9=%#llx R10=%#llx R11=%#llx", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
error("R8=%#llx R9=%#llx R10=%#llx R11=%#llx", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
||||||
error("R12=%#llx R13=%#llx R14=%#llx R15=%#llx", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
error("R12=%#llx R13=%#llx R14=%#llx R15=%#llx", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
||||||
error("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
error("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
||||||
|
@ -28,9 +28,20 @@ namespace CrashHandler
|
|||||||
data.Thread->Name,
|
data.Thread->Name,
|
||||||
data.Thread->ID);
|
data.Thread->ID);
|
||||||
EHPrint("\e7981FCTechnical Informations on CPU %lld:\n", data.ID);
|
EHPrint("\e7981FCTechnical Informations on CPU %lld:\n", data.ID);
|
||||||
|
#if defined(__amd64__)
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
#elif defined(__i386__)
|
||||||
|
uint32_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
#elif defined(__aarch64__)
|
||||||
|
#endif
|
||||||
|
|
||||||
EHPrint("\e7981FCFS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n",
|
EHPrint("\e7981FCFS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx\n",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
data.Frame->ss, data.Frame->cs, data.Frame->ds);
|
data.Frame->ss, data.Frame->cs, ds);
|
||||||
#if defined(__amd64__)
|
#if defined(__amd64__)
|
||||||
EHPrint("R8=%#llx R9=%#llx R10=%#llx R11=%#llx\n", data.Frame->r8, data.Frame->r9, data.Frame->r10, data.Frame->r11);
|
EHPrint("R8=%#llx R9=%#llx R10=%#llx R11=%#llx\n", data.Frame->r8, data.Frame->r9, data.Frame->r10, data.Frame->r11);
|
||||||
EHPrint("R12=%#llx R13=%#llx R14=%#llx R15=%#llx\n", data.Frame->r12, data.Frame->r13, data.Frame->r14, data.Frame->r15);
|
EHPrint("R12=%#llx R13=%#llx R14=%#llx R15=%#llx\n", data.Frame->r12, data.Frame->r13, data.Frame->r14, data.Frame->r15);
|
||||||
|
@ -42,10 +42,20 @@ __no_stack_protector void UserModeExceptionHandler(CHArchTrapFrame *Frame)
|
|||||||
efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
efer.raw = CPU::x64::rdmsr(CPU::x64::MSR_EFER);
|
||||||
|
|
||||||
error("Technical Informations on CPU %lld:", GetCurrentCPU()->ID);
|
error("Technical Informations on CPU %lld:", GetCurrentCPU()->ID);
|
||||||
|
#if defined(__amd64__)
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
#elif defined(__i386__)
|
||||||
|
uint32_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
|
#elif defined(__aarch64__)
|
||||||
|
#endif
|
||||||
error("FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx",
|
error("FS=%#llx GS=%#llx SS=%#llx CS=%#llx DS=%#llx",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
Frame->ss, Frame->cs, Frame->ds);
|
Frame->ss, Frame->cs, ds);
|
||||||
#if defined(__amd64__)
|
#if defined(__amd64__)
|
||||||
error("R8=%#llx R9=%#llx R10=%#llx R11=%#llx", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
error("R8=%#llx R9=%#llx R10=%#llx R11=%#llx", Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
||||||
error("R12=%#llx R13=%#llx R14=%#llx R15=%#llx", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
error("R12=%#llx R13=%#llx R14=%#llx R15=%#llx", Frame->r12, Frame->r13, Frame->r14, Frame->r15);
|
||||||
error("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
error("RAX=%#llx RBX=%#llx RCX=%#llx RDX=%#llx", Frame->rax, Frame->rbx, Frame->rcx, Frame->rdx);
|
||||||
|
@ -362,9 +362,12 @@ namespace Tasking
|
|||||||
schedbg("================================================================");
|
schedbg("================================================================");
|
||||||
schedbg("Status: 0-ukn | 1-rdy | 2-run | 3-wait | 4-term");
|
schedbg("Status: 0-ukn | 1-rdy | 2-run | 3-wait | 4-term");
|
||||||
schedbg("Technical Informations on regs %#lx", Frame->InterruptNumber);
|
schedbg("Technical Informations on regs %#lx", Frame->InterruptNumber);
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
schedbg("FS=%#lx GS=%#lx SS=%#lx CS=%#lx DS=%#lx",
|
schedbg("FS=%#lx GS=%#lx SS=%#lx CS=%#lx DS=%#lx",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
Frame->ss, Frame->cs, Frame->ds);
|
Frame->ss, Frame->cs, ds);
|
||||||
schedbg("R8=%#lx R9=%#lx R10=%#lx R11=%#lx",
|
schedbg("R8=%#lx R9=%#lx R10=%#lx R11=%#lx",
|
||||||
Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
||||||
schedbg("R12=%#lx R13=%#lx R14=%#lx R15=%#lx",
|
schedbg("R12=%#lx R13=%#lx R14=%#lx R15=%#lx",
|
||||||
@ -486,8 +489,8 @@ namespace Tasking
|
|||||||
CurrentCPU->CurrentThread->Registers.ss != GDT_USER_DATA)
|
CurrentCPU->CurrentThread->Registers.ss != GDT_USER_DATA)
|
||||||
{
|
{
|
||||||
warn("Wrong CS or SS for user process! (Code:%#lx, Data:%#lx != Code:%#lx, Data:%#lx)",
|
warn("Wrong CS or SS for user process! (Code:%#lx, Data:%#lx != Code:%#lx, Data:%#lx)",
|
||||||
CurrentCPU->CurrentThread->Registers.cs, CurrentCPU->CurrentThread->Registers.ss,
|
CurrentCPU->CurrentThread->Registers.cs, CurrentCPU->CurrentThread->Registers.ss,
|
||||||
GDT_USER_CODE, GDT_USER_DATA);
|
GDT_USER_CODE, GDT_USER_DATA);
|
||||||
CurrentCPU->CurrentThread->Registers.cs = GDT_USER_CODE;
|
CurrentCPU->CurrentThread->Registers.cs = GDT_USER_CODE;
|
||||||
CurrentCPU->CurrentThread->Registers.ss = GDT_USER_DATA;
|
CurrentCPU->CurrentThread->Registers.ss = GDT_USER_DATA;
|
||||||
}
|
}
|
||||||
@ -498,8 +501,8 @@ namespace Tasking
|
|||||||
CurrentCPU->CurrentThread->Registers.ss != GDT_KERNEL_DATA)
|
CurrentCPU->CurrentThread->Registers.ss != GDT_KERNEL_DATA)
|
||||||
{
|
{
|
||||||
warn("Wrong CS or SS for kernel process! (Code:%#lx, Data:%#lx != Code:%#lx, Data:%#lx",
|
warn("Wrong CS or SS for kernel process! (Code:%#lx, Data:%#lx != Code:%#lx, Data:%#lx",
|
||||||
CurrentCPU->CurrentThread->Registers.cs, CurrentCPU->CurrentThread->Registers.ss,
|
CurrentCPU->CurrentThread->Registers.cs, CurrentCPU->CurrentThread->Registers.ss,
|
||||||
GDT_KERNEL_CODE, GDT_KERNEL_DATA);
|
GDT_KERNEL_CODE, GDT_KERNEL_DATA);
|
||||||
CurrentCPU->CurrentThread->Registers.cs = GDT_KERNEL_CODE;
|
CurrentCPU->CurrentThread->Registers.cs = GDT_KERNEL_CODE;
|
||||||
CurrentCPU->CurrentThread->Registers.ss = GDT_KERNEL_DATA;
|
CurrentCPU->CurrentThread->Registers.ss = GDT_KERNEL_DATA;
|
||||||
}
|
}
|
||||||
@ -553,9 +556,12 @@ namespace Tasking
|
|||||||
{
|
{
|
||||||
schedbg("================================================================");
|
schedbg("================================================================");
|
||||||
schedbg("Technical Informations on Thread %s[%ld]:", CurrentCPU->CurrentThread->Name, CurrentCPU->CurrentThread->ID);
|
schedbg("Technical Informations on Thread %s[%ld]:", CurrentCPU->CurrentThread->Name, CurrentCPU->CurrentThread->ID);
|
||||||
|
uint64_t ds;
|
||||||
|
asmv("mov %%ds, %0"
|
||||||
|
: "=r"(ds));
|
||||||
schedbg("FS=%#lx GS=%#lx SS=%#lx CS=%#lx DS=%#lx",
|
schedbg("FS=%#lx GS=%#lx SS=%#lx CS=%#lx DS=%#lx",
|
||||||
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
CPU::x64::rdmsr(CPU::x64::MSR_FS_BASE), CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE),
|
||||||
Frame->ss, Frame->cs, Frame->ds);
|
Frame->ss, Frame->cs, ds);
|
||||||
schedbg("R8=%#lx R9=%#lx R10=%#lx R11=%#lx",
|
schedbg("R8=%#lx R9=%#lx R10=%#lx R11=%#lx",
|
||||||
Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
Frame->r8, Frame->r9, Frame->r10, Frame->r11);
|
||||||
schedbg("R12=%#lx R13=%#lx R14=%#lx R15=%#lx",
|
schedbg("R12=%#lx R13=%#lx R14=%#lx R15=%#lx",
|
||||||
@ -725,7 +731,6 @@ namespace Tasking
|
|||||||
Thread->GSBase = CPU::x64::rdmsr(CPU::x64::MSRID::MSR_GS_BASE);
|
Thread->GSBase = CPU::x64::rdmsr(CPU::x64::MSRID::MSR_GS_BASE);
|
||||||
Thread->FSBase = CPU::x64::rdmsr(CPU::x64::MSRID::MSR_FS_BASE);
|
Thread->FSBase = CPU::x64::rdmsr(CPU::x64::MSRID::MSR_FS_BASE);
|
||||||
Thread->Registers.cs = GDT_KERNEL_CODE;
|
Thread->Registers.cs = GDT_KERNEL_CODE;
|
||||||
Thread->Registers.ds = GDT_KERNEL_DATA;
|
|
||||||
Thread->Registers.ss = GDT_KERNEL_DATA;
|
Thread->Registers.ss = GDT_KERNEL_DATA;
|
||||||
Thread->Registers.rflags.AlwaysOne = 1;
|
Thread->Registers.rflags.AlwaysOne = 1;
|
||||||
Thread->Registers.rflags.IF = 1;
|
Thread->Registers.rflags.IF = 1;
|
||||||
@ -744,7 +749,6 @@ namespace Tasking
|
|||||||
Thread->GSBase = 0;
|
Thread->GSBase = 0;
|
||||||
Thread->FSBase = 0;
|
Thread->FSBase = 0;
|
||||||
Thread->Registers.cs = GDT_USER_CODE;
|
Thread->Registers.cs = GDT_USER_CODE;
|
||||||
Thread->Registers.ds = GDT_USER_DATA;
|
|
||||||
Thread->Registers.ss = GDT_USER_DATA;
|
Thread->Registers.ss = GDT_USER_DATA;
|
||||||
Thread->Registers.rflags.AlwaysOne = 1;
|
Thread->Registers.rflags.AlwaysOne = 1;
|
||||||
// Thread->Registers.rflags.PF = 1;
|
// Thread->Registers.rflags.PF = 1;
|
||||||
|
@ -312,11 +312,6 @@ namespace CPU
|
|||||||
|
|
||||||
typedef struct TrapFrame
|
typedef struct TrapFrame
|
||||||
{
|
{
|
||||||
// uint32_t gs; // General-purpose Segment
|
|
||||||
// uint32_t fs; // General-purpose Segment
|
|
||||||
// uint32_t es; // Extra Segment (used for string operations)
|
|
||||||
uint32_t ds; // Data Segment
|
|
||||||
|
|
||||||
uint32_t ebp; // Base Pointer (meant for stack frames)
|
uint32_t ebp; // Base Pointer (meant for stack frames)
|
||||||
uint32_t edi; // Destination index for string operations
|
uint32_t edi; // Destination index for string operations
|
||||||
uint32_t esi; // Source index for string operations
|
uint32_t esi; // Source index for string operations
|
||||||
@ -1396,11 +1391,6 @@ namespace CPU
|
|||||||
|
|
||||||
typedef struct TrapFrame
|
typedef struct TrapFrame
|
||||||
{
|
{
|
||||||
// uint64_t gs; // General-purpose Segment
|
|
||||||
// uint64_t fs; // General-purpose Segment
|
|
||||||
// uint64_t es; // Extra Segment (used for string operations)
|
|
||||||
uint64_t ds; // Data Segment
|
|
||||||
|
|
||||||
uint64_t r15; // General purpose
|
uint64_t r15; // General purpose
|
||||||
uint64_t r14; // General purpose
|
uint64_t r14; // General purpose
|
||||||
uint64_t r13; // General purpose
|
uint64_t r13; // General purpose
|
||||||
|
Loading…
x
Reference in New Issue
Block a user