Library mcertikos.mm.ContainerGenLinkSource
*********************************************************************** * * * The CertiKOS Certified Kit Operating System * * * * The FLINT Group, Yale University * * * * Copyright The FLINT Group, Yale University. All rights reserved. * * This file is distributed under the terms of the Yale University * * Non-Commercial License Agreement. * * * ***********************************************************************
Require Import liblayers.compat.CompatLayers.
Require Import liblayers.compat.CompatClightSem.
Require Import LAsmModuleSem.
Require Import CompCertiKOS.
Require Import GlobIdent.
Require Import CDataTypes.
Require Import I64Layer.
Require Import CompCertiKOSproof.
Require Import RealParams.
Require Import DAbsHandler.
Require Import DAbsHandlerCSource.
Section WITHCOMPCERTIKOS.
Context `{compcertikos_prf: CompCertiKOS}.
Context `{real_params_prf : RealParams}.
Definition MContainer_impl: res LAsm.module :=
M1 <- (M_container_init <- CompCertiKOS.transf_module (container_init ↦ f_container_init);
M_container_get_parent <- CompCertiKOS.transf_module (container_get_parent ↦ f_container_get_parent);
M_container_get_quota <- CompCertiKOS.transf_module (container_get_quota ↦ f_container_get_quota);
M_container_get_usage <- CompCertiKOS.transf_module (container_get_usage ↦ f_container_get_usage);
M_container_can_consume <- CompCertiKOS.transf_module (container_can_consume ↦ f_container_can_consume);
M_container_split <- CompCertiKOS.transf_module (container_split ↦ f_container_split);
M_container_alloc <- CompCertiKOS.transf_module (container_alloc ↦ f_container_alloc);
_ <- eassert nil (LayerOK (〚M_container_init ⊕ M_container_get_parent ⊕
M_container_get_quota ⊕ M_container_get_usage ⊕
M_container_can_consume ⊕ M_container_split ⊕
M_container_alloc〛((dabshandler ⊕ L64) ⊕ AC_LOC ↦ container_loc_type)
⊕ ((dabshandler ⊕ L64) ⊕ AC_LOC ↦ container_loc_type)));
ret ((M_container_init ⊕ M_container_get_parent ⊕ M_container_get_quota
⊕ M_container_get_usage ⊕ M_container_can_consume
⊕ M_container_split ⊕ M_container_alloc) ⊕ AC_LOC ↦ container_loc_type));
M <- ret (M1 ⊕ ∅);
_ <- eassert nil (LayerOK (〚M 〛 (dabshandler ⊕ L64) ⊕ dabshandler ⊕ L64));
watch out parentheses here:
ret (
group primitives according to the global variables that they use
M
for L64 and other passthrough primitives