core+system: Add a "getAddressSpace()" system call
This commit is contained in:
parent
b5327891d8
commit
02762336a0
@ -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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ const syscalls = [_]SystemCall{
|
||||
sched.setThreadStack,
|
||||
sched.startThread,
|
||||
sched.getThreadId,
|
||||
mem.getAddressSpace,
|
||||
};
|
||||
|
||||
pub fn invokeSyscall(number: usize, frame: *platform.Registers, args: *Arguments, retval: *isize) void {
|
||||
|
@ -16,6 +16,7 @@ pub const SystemCall = enum(u64) {
|
||||
SetThreadStack, // requires Token.CreateProcess
|
||||
StartThread, // requires Token.CreateProcess
|
||||
GetThreadId,
|
||||
GetAddressSpace, // requires Token.CreateProcess
|
||||
};
|
||||
|
||||
pub const Token = enum(u64) {
|
||||
|
@ -95,3 +95,9 @@ pub fn startThread(pid: u64) !void {
|
||||
pub fn getThreadId() u64 {
|
||||
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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user