[kernel] Add capabilities to handles
This change finally adds capabilities to handles. Included changes: - j6_handle_t is now again 64 bits, with the highest 8 bits being a type code, and the next highest 24 bits being the capability mask, so that programs can check type/caps without calling the kernel. - The definitions grammar now includes a `capabilities [ ]` section on objects, to list what capabilities are relevant. - j6/caps.h is auto-generated from object capability lists - init_libj6 again sets __handle_self and __handle_sys, this is a bit of a hack. - A new syscall, j6_handle_list, will return the list of existing handles owned by the calling process. - syscall_verify.cpp.cog now actually checks that the needed capabilities exist on handles before allowing the call.
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
from .parser import Transformer, v_args
|
||||
|
||||
def get_opts(args):
|
||||
from .types import CName, Description, Options, Type, UID
|
||||
from .types import Caps, CName, Description, Options, Type, UID
|
||||
|
||||
kinds = {
|
||||
Description: "desc",
|
||||
Options: "opts",
|
||||
CName: "cname",
|
||||
Caps: "caps",
|
||||
UID: "uid",
|
||||
Type: "typename",
|
||||
}
|
||||
@@ -112,6 +113,10 @@ class DefTransformer(Transformer):
|
||||
from .types import Options
|
||||
return Options([str(s) for s in args])
|
||||
|
||||
def capabilities(self, args):
|
||||
from .types import Caps
|
||||
return Caps([str(s) for s in args])
|
||||
|
||||
def description(self, s):
|
||||
from .types import Description
|
||||
return Description("\n".join(s))
|
||||
@@ -140,6 +145,9 @@ class DefTransformer(Transformer):
|
||||
def COMMENT(self, s):
|
||||
return s[2:].strip()
|
||||
|
||||
def OPTION(self, s):
|
||||
return str(s)
|
||||
|
||||
def IDENTIFIER(self, s):
|
||||
return str(s)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user