[LLVMdev] inserting exit function into IR

George Baah georgebaah at gmail.com
Thu Mar 31 12:57:49 PDT 2011


I did M.getOrInsertFunction and called the exit function with .

   IRBuilder<> builder = IRBuilder<>(...);

Value *one = ConstantInt::get(Type::getInt32Ty(M.getContext()),1);

builder.CreateCall(exitF,one,"tmp4");


"Instruction has a name, but provides a void value!
  %tmp4 = call void @exit(i32 1)
Broken module found, compilation aborted! "




On Thu, Mar 31, 2011 at 3:51 PM, Frits van Bommel <fvbommel at gmail.com>wrote:

> On Thu, Mar 31, 2011 at 9:31 PM, George Baah <georgebaah at gmail.com> wrote:
> > Hi Joshua,
> >       I have a function foo and I want to insert exit(0) at the end of
> foo.
> > The problem is M.getFunction returns null, which is understandable. I am
> not
> > sure what to do. Below is the code snippet.
> > void foo(int argc, char* argv[]) {
> >   printf("hello world\n");
> >   exit(0); //***I want to insert this exit
> > }
> > My llvm code snippet is
> >
> > vector<const Type *> params = vector<const Type *>();
>
> The initialization is unnecessary (but harmless).
>
> > params.push_back(Type::getInt32Ty(M.getContext()));
> >
> > FunctionType *fType = FunctionType::get(Type::getVoidTy(M.getContext()),
> > params, false);
> >
> > Constant *temp = M.getFunction("exit", fType);
>
> M.getOrInsertFunction("exit", fType);
>
> > if(!temp){
> >
> > errs() << "exit function not in symbol table\n";
> >
> > exit(1);
> >
> > }
> >
> > Function *f = cast<Function>(temp);
> >
> > CallInst *ci = CallInst::Create(...)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110331/d8e33af8/attachment.html>


More information about the llvm-dev mailing list