[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.


More information about the llvm-dev mailing list