[LLVMdev] Portable I/O
Dustin Laurence
dllaurence at dslextreme.com
Fri Feb 12 10:10:04 PST 2010
On 02/12/2010 09:51 AM, Chris Lattner wrote:
> I think that the point is that you can define your own standard runtime interfaces:
>
> void *myopen(const char*path) {
> return fopen(path, ...);
> }
Maybe my experience hand-coding LLVM will actually be of some help.
What I did for this case is what I think Chris is suggesting--I have a
.c file with functions that return whatever FILE* I need as a void* (I
think--could have been a char), and a .ll file that declares the
function as returning an i8*.
Perhaps there is a more sophisticated way, but that seems to work just
fine. Basically anything that is not guaranteed to be a symbol the
linker can see gets a wrapper function written in C. I think I also did
this for some of libc's many types (ptrdiff_t and size_t, for example)
that I shouldn't technically assume anything about. I didn't *need*
portability, but I tried to work in that direction anyway.
I have some other tricks, but they depend on the fact that I actually
run LLVM code through CPP, which I assume most people have too much good
taste to do.
7x57
More information about the llvm-dev
mailing list