Compare commits
No commits in common. "e6bc3afcb868adf6d75a32607c167140b7d58225" and "b2d89ab4fd33a8683e667d4a7f12a523eaa90285" have entirely different histories.
e6bc3afcb8
...
b2d89ab4fd
@ -14,6 +14,7 @@ pub inline fn enterTask(regs: *interrupts.InterruptStackFrame, comptime base: u6
|
|||||||
\\ mov $0, %rbx
|
\\ mov $0, %rbx
|
||||||
\\ mov $0, %rcx
|
\\ mov $0, %rcx
|
||||||
\\ mov $0, %rdx
|
\\ mov $0, %rdx
|
||||||
|
\\ mov $0, %rsi
|
||||||
\\ mov $0, %rbp
|
\\ mov $0, %rbp
|
||||||
\\ mov $0, %r8
|
\\ mov $0, %r8
|
||||||
\\ mov $0, %r9
|
\\ mov $0, %r9
|
||||||
@ -30,8 +31,7 @@ pub inline fn enterTask(regs: *interrupts.InterruptStackFrame, comptime base: u6
|
|||||||
[rflags] "r" (regs.rflags),
|
[rflags] "r" (regs.rflags),
|
||||||
[cs] "r" (regs.cs),
|
[cs] "r" (regs.cs),
|
||||||
[rip] "r" (regs.rip),
|
[rip] "r" (regs.rip),
|
||||||
[arg0] "{rdi}" (regs.rdi),
|
[arg] "{rdi}" (regs.rdi),
|
||||||
[arg1] "{rsi}" (regs.rsi),
|
|
||||||
[base] "r" (base),
|
[base] "r" (base),
|
||||||
[directory] "r" (directory),
|
[directory] "r" (directory),
|
||||||
);
|
);
|
||||||
|
@ -15,8 +15,7 @@ const PhysFrame = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn virtualPointer(self: *const PhysFrame, comptime T: type, base: usize) *T {
|
pub fn virtualPointer(self: *const PhysFrame, comptime T: type, base: usize) *T {
|
||||||
const virt = self.virtualAddress(base);
|
return @ptrFromInt(self.virtualAddress(base));
|
||||||
return @ptrFromInt(virt);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -108,7 +107,7 @@ fn setUpParentPageTableEntry(mapper: *const MemoryMapper, pte: *PageTableEntry,
|
|||||||
const frame = PhysFrame{ .address = try kernel.allocFrame() };
|
const frame = PhysFrame{ .address = try kernel.allocFrame() };
|
||||||
pte.present = 1;
|
pte.present = 1;
|
||||||
pte.setAddress(frame.address);
|
pte.setAddress(frame.address);
|
||||||
getTable(mapper, pte).* = std.mem.zeroes(PageDirectory);
|
getTable(pte, mapper.base).* = std.mem.zeroes(PageDirectory);
|
||||||
}
|
}
|
||||||
if (hasFlag(flags, Flags.ReadWrite) == 1) pte.read_write = 1;
|
if (hasFlag(flags, Flags.ReadWrite) == 1) pte.read_write = 1;
|
||||||
if (hasFlag(flags, Flags.User) == 1) pte.user = 1;
|
if (hasFlag(flags, Flags.User) == 1) pte.user = 1;
|
||||||
|
@ -8,13 +8,7 @@ export fn _start(base: u64, address: u64) callconv(.C) noreturn {
|
|||||||
kernel.print(address);
|
kernel.print(address);
|
||||||
kernel.print(@intFromPtr(mapper.directory));
|
kernel.print(@intFromPtr(mapper.directory));
|
||||||
|
|
||||||
const phys = kernel.allocFrame() catch {
|
vm.map(&mapper, 0x6000000, kernel.allocFrame(), @intFromEnum(vm.Flags.ReadWrite) | @intFromEnum(vm.Flags.User));
|
||||||
while (true) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
vm.map(&mapper, 0x6000000, .{ .address = phys }, @intFromEnum(vm.Flags.ReadWrite) | @intFromEnum(vm.Flags.User)) catch {
|
|
||||||
while (true) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
var counter: u64 = 0;
|
var counter: u64 = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user