blob: 6b8ae7bb6043c1a48d43c6d8b9c5371c646e07ac [file] [log] [blame] [edit]
#
# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
from __future__ import absolute_import, division, print_function, \
unicode_literals
# Add the root directory of this repository to your PYTHONPATH environment
# variable to enable the following import.
import capdl
# Let's make a TCB:
tcb = capdl.TCB('my_tcb')
# Set some relevant properties of it:
tcb.ip = 0x8000
tcb.sp = 0xdeadbeef
tcb.init += [0xcafe, 0xdeaf]
# Create an endpoint:
ep = capdl.Endpoint('my_ep')
# Let's set that endpoint as the TCB's fault EP:
ep_cap = capdl.Cap(ep)
tcb['fault_ep'] = ep_cap
# Let's setup a CSpace and VSpace for the TCB:
cspace = capdl.CNode('my_cnode', 28) # <-- size in bits
vspace = capdl.PageDirectory('my_pd')
tcb['cspace'] = capdl.Cap(cspace)
tcb['vspace'] = capdl.Cap(vspace)
# Throw in an untyped and give the thread a cap to it:
ut = capdl.Untyped('my_ut', 10) # <-- size in bits
cspace[1] = capdl.Cap(ut)
# Let's create a spec from all this and output it:
spec = capdl.Spec()
for obj in [tcb, ep, cspace, vspace, ut]:
spec.add_object(obj)
print(spec)