core+system: Add a "getAddressSpace()" system call

This commit is contained in:
Gabriel 2025-03-05 19:11:49 +01:00
parent b5327891d8
commit 02762336a0
4 changed files with 19 additions and 0 deletions

View File

@ -46,3 +46,14 @@ pub fn setAddressSpace(_: *platform.Registers, args: *sys.Arguments, _: *isize)
target.address_space = vmm.AddressSpace.create(.{ .address = args.arg1 }, vmm.PHYSICAL_MAPPING_BASE); target.address_space = vmm.AddressSpace.create(.{ .address = args.arg1 }, vmm.PHYSICAL_MAPPING_BASE);
} }
pub fn getAddressSpace(_: *platform.Registers, args: *sys.Arguments, result: *isize) anyerror!void {
const core = cpu.thisCore();
if (!sys.checkToken(core, system.kernel.Token.CreateProcess)) return error.NotAuthorized;
const target = thread.lookupThreadById(args.arg0) orelse return error.NoSuchThread;
const space = target.address_space orelse return error.NoAddressSpace;
result.* = @bitCast(space.phys.address);
}

View File

@ -36,6 +36,7 @@ const syscalls = [_]SystemCall{
sched.setThreadStack, sched.setThreadStack,
sched.startThread, sched.startThread,
sched.getThreadId, sched.getThreadId,
mem.getAddressSpace,
}; };
pub fn invokeSyscall(number: usize, frame: *platform.Registers, args: *Arguments, retval: *isize) void { pub fn invokeSyscall(number: usize, frame: *platform.Registers, args: *Arguments, retval: *isize) void {

View File

@ -16,6 +16,7 @@ pub const SystemCall = enum(u64) {
SetThreadStack, // requires Token.CreateProcess SetThreadStack, // requires Token.CreateProcess
StartThread, // requires Token.CreateProcess StartThread, // requires Token.CreateProcess
GetThreadId, GetThreadId,
GetAddressSpace, // requires Token.CreateProcess
}; };
pub const Token = enum(u64) { pub const Token = enum(u64) {

View File

@ -95,3 +95,9 @@ pub fn startThread(pid: u64) !void {
pub fn getThreadId() u64 { pub fn getThreadId() u64 {
return @bitCast(syscall(.GetThreadId, 0, 0, 0)); return @bitCast(syscall(.GetThreadId, 0, 0, 0));
} }
pub fn getAddressSpace(pid: u64) !u64 {
const retval = syscall(.GetAddressSpace, pid, 0, 0);
if (retval < 0) return error.NoSuchThread;
return @bitCast(retval);
}