[Mono-list] Gcc summit...interesting stuff

Chris Lattner sabre@nondot.org
Wed, 26 Nov 2003 19:31:34 -0600 (CST)


> > Ah, ok.  I thought the unverifiable CIL was basically just machine code.
> > I didn't know it used the stack machine: cool!
>
> You have to distinguish between _unverifiable_ code, and _unmanaged_ code.
> The former uses the stack machine, the latter is just machine code.

Ah, ok, I see.

> > Ok.  There are _inherently_ difficult parts though.  For example, you
> > can't really translate '#ifdef BIG_ENDIAN' style code into a portable
> > representation, no matter what it is.
>
> That's true.  But code which uses #ifdef BIG_ENDIAN is not
> standard-conforming C code.

How is it not?  Though not the best designed, there is a ton of code that
contains their own byte swapping routines, which do different things on
hosts of different endianness.

> > The hardest part is probably handling all of the libc functions that
> > everyone expects: signals, stdio, etc.
>
> Right.  For most of that, you can implement it using PInvoke to invoke
> the underlying (run-time) platform's libc.  However, because there are
> a lot of macros that the C standard specifies are (compile-time) constant
> expressions, you would have to wrap a lot of the functionality.
> That is, you'd need to define your own set of C header files that define
> the constants in a platform-independent way, and then have the implementation
> of the C functions work by PInvoking your own C wrapper functions which
> convert these constants to the appropriate platform-specific values and
> then invoke the wrapped libc function.

Yup exactly.  The problem is doing it in such a way that running the code
managed gives you an advantage though: which means that it should
interoperate fairly well with the existing runtime and stuff.  *shrug*

Also, if you want the resulting CLI code to be portable to other systems,
then you will have to provide ALL of the header files.  On solaris, for
example, 'stdin' is a #define for __iob[0], which obviously doesn't work
too well if you run the binary on glibc.  :)

-Chris

-- 
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/