Compare commits

..

2 Commits

Author SHA1 Message Date
e6bc3afcb8
init: Fix a few errors 2025-02-20 23:01:56 +01:00
5cb9689d10
core: Don't set the second thread argument to zero
This defeated the point of passing the page tables to init, since rsi would be set to zero anyway.
2025-02-20 23:01:28 +01:00
3 changed files with 12 additions and 5 deletions

View File

@ -14,7 +14,6 @@ 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
@ -31,7 +30,8 @@ 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),
[arg] "{rdi}" (regs.rdi), [arg0] "{rdi}" (regs.rdi),
[arg1] "{rsi}" (regs.rsi),
[base] "r" (base), [base] "r" (base),
[directory] "r" (directory), [directory] "r" (directory),
); );

View File

@ -15,7 +15,8 @@ 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 {
return @ptrFromInt(self.virtualAddress(base)); const virt = self.virtualAddress(base);
return @ptrFromInt(virt);
} }
}; };
@ -107,7 +108,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(pte, mapper.base).* = std.mem.zeroes(PageDirectory); getTable(mapper, pte).* = 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;

View File

@ -8,7 +8,13 @@ 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));
vm.map(&mapper, 0x6000000, kernel.allocFrame(), @intFromEnum(vm.Flags.ReadWrite) | @intFromEnum(vm.Flags.User)); const phys = kernel.allocFrame() catch {
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;