[LLVMdev] new comer question
xinb at purdue.edu
Wed Nov 12 18:21:41 PST 2008
John Criswell wrote:
> 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 for the pointers.
More information about the llvm-dev