[LLVMdev] new comer question

John Criswell criswell at cs.uiuc.edu
Wed Nov 12 15:29:27 PST 2008

Bin Xin wrote:
> Hello LLVMers,
>   I am considering LLVM for a project, but I am not sure the handling of
> (C/C++ or 3rd party) library code used by user program.  My
> understanding is that if those library code comes in native format, then
> all the benefit of LLVM is lost on them.
More accurately, the LLVM analyzers and optimizers cannot 
analyze/transform code that is not in LLVM intermediate representation.  
Calls to functions in native code libraries will appear as calls to 
external functions.

>  Can they be decompiled into
> LLVM bytecode, or what options are there if I want to write a runtime
> pass that has to analyze native code?
I think you have several options:

1) If you have the source to the library, you can compile the library to 
LLVM bitcode and link it into the program.

2) If you don't have source code but the library has simple, well-known 
interfaces (e.g., libc), you can write your analysis passes to handle 
calls to the library's functions as special cases.  As an example, our 
work on memory safety cannot insert run-time checks into libc functions 
like memset(), but it can recognize calls to libc functions and place 
run-time checks before the calls to prevent the functions from violating 
memory safety.

3) You can try to convert binary code to LLVM intermediate code either 
ahead of time or at run-time.  There was some work to incorporate LLVM 
into Qemu (a dynamic binary translation system), and such as system may 
be able to do this sort of thing for you.  There is no static binary to 
LLVM translator of which I know.

I cannot vouch for the viability of binary translation (I've never used 
LLVM-Qemu), but the other two have worked successfully in our projects 
at Illinois.

-- John T.

> Thanks,
> -bx
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list