Added the handle_clone syscall which allows for cloning a handle with a subset of the original handle's capabilities. Related changes: - srv.init now calls handle_clone on its system handle, and load_program was changed to allow this second system handle to be passed to loaded programs instead. However, as drv.uart is still a driver AND a log reader, this new handle is not actually passed yet. - The definition parser was using a set for the cap list, which meant the order (and thus values) of caps was not static. - Some code in objects/handle.h was made more explicit about what bits meant what.
46 lines
1.2 KiB
Modula-2
46 lines
1.2 KiB
Modula-2
import "objects/kobject.def"
|
|
|
|
import "objects/channel.def"
|
|
import "objects/endpoint.def"
|
|
import "objects/event.def"
|
|
import "objects/process.def"
|
|
import "objects/system.def"
|
|
import "objects/thread.def"
|
|
import "objects/vma.def"
|
|
|
|
interface syscalls [syscall] {
|
|
uid 01d9b6a948961097
|
|
|
|
expose object system
|
|
expose object kobject
|
|
expose object event
|
|
expose object process
|
|
expose object thread
|
|
expose object channel
|
|
expose object endpoint
|
|
expose object vma
|
|
|
|
# Simple no-op syscall for testing
|
|
function noop
|
|
|
|
# Write a message to the kernel log
|
|
function log {
|
|
param message string
|
|
}
|
|
|
|
# Get a list of handles owned by this process. If the
|
|
# supplied list is not big enough, will set the size
|
|
# needed in `size` and return j6_err_insufficient
|
|
function handle_list {
|
|
param handles object kobject [list inout optional] # A list of handles to be filled
|
|
}
|
|
|
|
# Create a clone of an existing handle, possibly with
|
|
# some capabilities masked out.
|
|
function handle_clone {
|
|
param handle object kobject [handle] # The handle to clone
|
|
param clone object kobject [out] # The new handle
|
|
param mask uint32 # The capability bitmask
|
|
}
|
|
}
|