/*
 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

import <std_connector.camkes>;

procedure ControlFlowTransfer {
    void call(void);
}

component Client {
    control;
    uses ControlFlowTransfer other;
}

component Server {
    provides ControlFlowTransfer other;
}

assembly {
    composition {
        component Client client;
        component Server server;
        connection seL4RPCCall transfer(from client.other, to server.other);
    }
}
