[Mono-list] Gcc summit...interesting stuff
Fergus Henderson
fjh@cs.mu.oz.au
Thu, 27 Nov 2003 12:32:56 +1100
On 26-Nov-2003, Chris Lattner <sabre@nondot.org> wrote:
> > > While possible, it would be _very_ difficult. LLVM code is more
> > > expressive/low-level than CIL code: for example array bounds checks are
> > > not implicit, and there is no object model. I'm not sure exactly how you
> > > would map general C programs onto the managed runtime at least, much less
> > > general LLVM programs.
> >
> > LLVM should map to *unverifiable* CIL without too much difficulty, I think.
> > Well, actually you'd map to a subset of that: you wouldn't use the
> > object model instructions at all.
>
> 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.
> > It's mostly fairly straight-forward to map general C programs onto
> > unverifiable CIL. Casting a pointer to int or vice versa is easy, just
> > push as one type and pop as another. Pointer arithmetic is just integer
> > addition. The C heap is unmanaged memory which can be allocated either
> > as a global array or using OS-specific code.
>
> 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.
> 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.
--
Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.