Hi ぷ风过无痕,

CIDL is an in-house language and compiler. As Kevin said, it was built by a student who has moved on to other things. Below I've reproduced some internal documentation on it. However, I suspect the best way to understand it is to dive into the source code.

Matt

 -- CIDL --

CIDL is a quick straightforward IDL compiler which generates stubs from a simple XML format IDL. CIDL aims to have processes in seL4 talking to each other with minimal work involved. CIDL expects a backing interface underneath, and one using pure seL4 IPC buffers has been supplied. The idea is that the user may simply switch their backing interface over to use shared buffers / passing pages around / whatever when they have the infrastructure to support it, and everything hopefully just works.

Features:
 - Integers, C strings, generic types & structs, arrays
 - Distinguishes between input / output arguments
 - Return values
 - Cap transfer
 - Save-and-reply-later supported (useful for async)

IDL Language:

CIDL uses a simple XML-based IDL language, based somewhat loosely on seL4's 
syscall XML IDL.

XSD spec for the IDL language:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
  <xs:element name="interface">
  <xs:complexType>

      <xs:sequence>
        <xs:element type="xs:string" name="include" maxOccurs="unbounded" 
minOccurs="0"/>
        <xs:element name="function" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element name="param" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:simpleContent>

                    <xs:extension base="xs:string">

                      <xs:attribute type="xs:string" name="type" 
use="required"/>
                      <xs:attribute type="xs:string" name="name" 
use="required"/>

                      <xs:attribute name="mode" use="optional">
                        <xs:simpleType>
                        <xs:restriction base="xs:string">
                          <xs:pattern value="(array|length|connect_ep)"/>
                        </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>

                      <xs:attribute name="dir" use="optional" default="in">
                        <xs:simpleType>
                        <xs:restriction base="xs:string">
                          <xs:pattern value="(in|out)"/>
                        </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>

                      <xs:attribute type="xs:string" name="lenvar" 
use="optional"/>

                    </xs:extension>

                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
        <xs:attribute type="xs:string" name="name" use="required"/>
        <xs:attribute type="xs:string" name="return" use="required"/>
        </xs:complexType>
        </xs:element>
      </xs:sequence>
  <xs:attribute type="xs:string" name="label_min" use="required"/>
  <xs:attribute type="xs:string" name="connect_ep" use="optional" default=""/>
  </xs:complexType>
  </xs:element>
</xs:schema>

Example XML conforming to this spec:
<?xml version="1.0" ?>
<interface label_min='0x5000' connect_ep=''>
    <include>stdio.h</include>
    <include>test_types.h</include>
    <function name="test_function1" return='seL4_CPtr'>
        TEST FUNCTION 1
    </function>
    <function name="test_function2" return='int'>
        TEST FUNCTION 2
        <param type="seL4_CPtr" name="session" mode="connect_ep"/>
        <param type="uintptr_t" name="a"/>
        <param type="uintptr_t*" name="b" dir="out"/>
        <param type="err_t*" name = "f" />
        <param type="int*" name="c" mode="array" lenvar="lenv"/>
        <param type="int" name="lenv" mode="length" />
    </function>
</interface>

 -- end --

On 22/06/15 15:37, Kevin Elphinstone wrote:
Refos was a student project, and as typical of student projects, the 
documentation patchy. The student is no longer with us.

I think your best bet is to learn how it works. The advantage of most student 
projects, is that they don’t have time to
make anything too big or complex J

-Kevin

*From:*Devel [mailto:[email protected]] *On Behalf Of *???????
*Sent:* Monday, 22 June 2015 2:52 PM
*To:* devel-request
*Subject:* [seL4] How to edit RefOS libs c file

Hi,

I am using RefOS to develop a small applicaiton(interprocess comunicaion).I 
need to edit some c files in
  RefOS/libs/librefos directory,But comments say that do not  edit these 
files,these files were generated by CIDL.CIDL
is a simple C IDL compiler which is made to save the trouble of manually 
implementing RPC interface stubs to marshal C
style arguments and return value. It uses a simple XML-based IDL language. I 
search on the google,but just got some
introduction. So where can I got some useful  infomation about CIDL? Can you 
recommend some books or websites?

------------------ Original ------------------

*From: * "devel-request";<[email protected] 
<mailto:[email protected]>>;

*Date: * Sun, Jun 21, 2015 10:00 AM

*To: * "devel"<[email protected] <mailto:[email protected]>>;

*Subject: * Devel Digest, Vol 13, Issue 11

Send Devel mailing list submissions to
[email protected] <mailto:[email protected]>

To subscribe or unsubscribe via the World Wide Web, visit
https://sel4.systems/lists/listinfo/devel
or, via email, send a message with subject or body 'help' to
[email protected] <mailto:[email protected]>

You can reach the person managing the list at
[email protected] <mailto:[email protected]>

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Devel digest..."


Today's Topics:

    1. Re: Devel Digest, Vol 13, Issue 10_Bare Metal support for GCC
       (da Tyga)


----------------------------------------------------------------------

Message: 1
Date: Sat, 20 Jun 2015 16:26:46 +1000
From: da Tyga <[email protected] <mailto:[email protected]>>
To: [email protected] <mailto:[email protected]>
Subject: Re: [seL4] Devel Digest, Vol 13, Issue 10_Bare Metal support
for GCC
Message-ID:
<calj3nd3+cffqf41boww+-bwfnoezs9hyvlhdwvsstymacsu...@mail.gmail.com
<mailto:calj3nd3+cffqf41boww+-bwfnoezs9hyvlhdwvsstymacsu...@mail.gmail.com>>
Content-Type: text/plain; charset="utf-8"

 >
 >
 > Hi Yuxin,

I don't think you need to modify GCC, it is the compiler that you can use
to generate required executables.  Making changes to it is a massive
undertaking.

Instead of trying to reinvent stuff that has already been done, you really
should read the Genode documentation and download and read the source code
referenced by Norman Feske's suggestions.

 >From my reading of the Genode documents and source code, I would expect
that you would find a considerable amount of code that you could you
re-purpose for your specific requirements.

Cheers,
Tyga




 > ----------------------------------------------------------------------
 >
 > Message: 1
 > Date: Fri, 19 Jun 2015 22:46:40 +0800
 > From: Yuxin Ren <[email protected] <mailto:[email protected]>>
 > To: Norman Feske <[email protected] 
<mailto:[email protected]>>
 > Cc: "[email protected] <mailto:[email protected]>" <[email protected] 
<mailto:[email protected]>>
 > Subject: Re: [seL4] Does sel4 support c++
 > Message-ID:
 >         <CAAKbDrcbyh0YV+nHzhziiiXavn-=
 > [email protected] 
<mailto:[email protected]>>
 > Content-Type: text/plain; charset="utf-8"
 >
 > Thank you all!
 >
 > If modifying the tool chain is the easiest way, I want to try it.
 > But I definitely want to avoid creating the tool chain from "bare metal".
 > I still prefer to reuse the existing tool chain like gcc
 > with minimal modification.
 >
 > Could you give me some guidance how to create a custom tool chain, which
 > part I need to modify?
 > I am not familiar with gcc. So if I have to modify gcc, where can I get
 > more information or documentation?
 >
 > Thanks a lot!!
 > Yuxin
 >
 > On Thu, Jun 18, 2015 at 9:50 PM, Norman Feske <
 > [email protected] <mailto:[email protected]>>
 > wrote:
 >
 > > Hello,
 > >
 > > > The easiest approach is possibly to create a custom tool chain, and
 > port
 > > > the GCC C++ library that way. I know the people behind Genode did some
 > > > of this (http://genode.org/download/tool-chain), although I'm not sure
 > > > how much of the C++ standard library they actually support.
 > >
 > > more in-depth information about Genode's tool chain are provided by
 > > Section 7.2 of the documentation [1]. In short, the tool chain is a
 > > "bare metal" tool chain that does not depend on a C library, yet it
 > > still supports C++ (including exceptions and runtime type information).
 > >
 > > On Genode, the libc and STL (aka stdcxx) can be used optionally whereas
 > > the STL depends on the libc. The libc is based on FreeBSD's libc. The
 > > STL is GCC's version. Both libraries are available via Genode's ports
 > > mechanism.
 > >
 > > That said, as both the libc and stdcxx are shared libraries, they cannot
 > > be used on the seL4 version of Genode as of now. Shared libraries don't
 > > work on seL4 (at least on x86_32) because the system-call bindings
 > > cannot be compiled with -fPIC.
 > >
 > > [1] http://genode.org/documentation/genode-foundations-15-05.pdf
 > >
 > > Best regards
 > > Norman
 > >
 > > --
 > > Dr.-Ing. Norman Feske
 > > Genode Labs
 > >
 > > http://www.genode-labs.com ? http://genode.org
 > >
 > > Genode Labs GmbH ? Amtsgericht Dresden ? HRB 28424 ? Sitz Dresden
 > > Gesch?ftsf?hrer: Dr.-Ing. Norman Feske, Christian Helmuth
 > >
 > > _______________________________________________
 > > Devel mailing list
 > > [email protected] <mailto:[email protected]>
 > > https://sel4.systems/lists/listinfo/devel
 > >
 > -------------- next part --------------
 > An HTML attachment was scrubbed...
 > URL: <
 > 
http://sel4.systems/pipermail/devel/attachments/20150619/5b4ce704/attachment-0001.html
 > >
 >
 > ------------------------------
 >
 > Subject: Digest Footer
 >
 > _______________________________________________
 > Devel mailing list
 > [email protected] <mailto:[email protected]>
 > https://sel4.systems/lists/listinfo/devel
 >
 >
 > ------------------------------
 >
 > End of Devel Digest, Vol 13, Issue 10
 > *************************************
 >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://sel4.systems/pipermail/devel/attachments/20150620/c72cfc07/attachment-0001.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Devel mailing list
[email protected] <mailto:[email protected]>
https://sel4.systems/lists/listinfo/devel


------------------------------

End of Devel Digest, Vol 13, Issue 11
*************************************


------------------------------------------------------------------------------------------------------------------------

The information in this e-mail may be confidential and subject to legal 
professional privilege and/or copyright.
National ICT Australia Limited accepts no liability for any damage caused by 
this email or its attachments.


_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel


_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to