[LLVMdev] Fw: Forcing the Interpreter segfaults

Duncan Sands baldrick at free.fr
Wed Nov 3 09:28:06 PDT 2010


Hi Salomon, please don't forget to reply to the list too (I've CC'd the list).

> I don't think my code is doing anything worng...

No, it looks fine to me, and the interpreter certainly supports this.  That
suggests that the value of %str is not being transmitted to the function right.
If it is getting the wrong pointer value, that would explain why it barfs.

Ciao,

Duncan.

> This segfaults :
> define i32 @llvmre_1(i8* %str) {
> entry:
>    %char = load i8* %str
>    %cond = icmp eq i8 %char, 97
>    br i1 %cond, label %State1, label %End
>
> State1:                                           ; preds = %entry
>    br label %End
>
> End:                                              ; preds = %State1, %entry
>    %retPtr.0 = phi i32 [ 1, %State1 ], [ 0, %entry ]
>    ret i32 %retPtr.0
> }
>
> It just checks if the first character of the string is an a.
> The given parameter is "abc"...
>
> On Wed, Nov 3, 2010 at 16:10, Duncan Sands <baldrick at free.fr
> <mailto:baldrick at free.fr>> wrote:
>
>     Hi,
>
>      > I have build LLVM in debug mode. Here are the informations of the
>      > segfault : memcpy() at 0x7ffff6f6581e
>      >   LoadIntFromMemory() at ExecutionEngine.cpp:887 0xb3c297
>      > llvm::ExecutionEngine::LoadValueFromMemory() at ExecutionEngine.cpp:915
>      > 0xb3c3f9
>      >   llvm::Interpreter::visitLoadInst() at Execution.cpp:812 0xa1f855
>      > llvm::InstVisitor<llvm::Interpreter, void>::visitLoad() at 0xa28357
>      >   llvm::InstVisitor<llvm::Interpreter, void>::visit() at 0xa26b4e
>      > llvm::Interpreter::run() at Execution.cpp:1,328 0xa235ff
>      >   llvm::Interpreter::runFunction() at Interpreter.cpp:95 0xa166fa
>      > ....
>      > So the segfaults happens because of the memcpy call in the
>      > LoadIntFromMemory function in ExecutionEngine.cpp on line 887... Any
>      > clue ?
>
>     usually this kind of thing means that your bitcode is doing something bad, such
>     as writing to random memory locations, and you just happened to get away with
>     it when using the JIT.  Try running under valgrind (either the interpreter or,
>     if you can, make a real program out of your bitcode and run that under
>     valgrind).
>
>     Ciao,
>
>     Duncan.
>
>      >
>      >
>      > Adding .setOptLevel(llvm::CodeGenOpt::None) to the EngineBuilder
>      > creation reduces the time by 25% but that is still not enough :(
>      >
>      >
>      > 2010/11/3 Török Edwin<edwintorok at gmail.com <mailto:edwintorok at gmail.com>>
>      >
>      >> On Wed, 3 Nov 2010 11:18:34 +0000
>      >> Salomon Brys<salomon.brys at gmail.com <mailto:salomon.brys at gmail.com>>  wrote:
>      >>
>      >>> Jiting with no optimization does not reduce significantly the
>      >>> compilation with very small code...
>      >>
>      >> I mean the parameter to createJIT, OptLevel. Try setting it to None.
>      >> Or if you use EngineBuilder, setOptLevel(CodeGenOpt::None).
>      >>
>      >>> What is the local register allocator ???
>      >>
>      >> -regalloc=fast, or -regalloc=local parameter to llc, or lli.
>      >> I think there was a programatic way to choose register allocator, but
>      >> I forgot how.
>      >>
>      >> Best regards,
>      >> --Edwin
>      >>
>      >
>      >
>      >
>      >
>      >
>      > I have build LLVM in debug mode. Here are the informations of the segfault :
>      > memcpy() at 0x7ffff6f6581e
>      > LoadIntFromMemory() at ExecutionEngine.cpp:887 0xb3c297
>      > llvm::ExecutionEngine::LoadValueFromMemory() at ExecutionEngine.cpp:915
>     0xb3c3f9
>      > llvm::Interpreter::visitLoadInst() at Execution.cpp:812 0xa1f855
>      > llvm::InstVisitor<llvm::Interpreter, void>::visitLoad() at 0xa28357
>      > llvm::InstVisitor<llvm::Interpreter, void>::visit() at 0xa26b4e
>      > llvm::Interpreter::run() at Execution.cpp:1,328 0xa235ff
>      > llvm::Interpreter::runFunction() at Interpreter.cpp:95 0xa166fa
>      > ....
>      > So the segfaults happens because of the�memcpy call in the�LoadIntFromMemory
>      > function in�ExecutionEngine.cpp on line 887... Any clue ?
>      >
>      >
>      > Adding .setOptLevel(llvm::CodeGenOpt::None) to the�EngineBuilder creation
>      > reduces the time by 25% but that is still not enough :(
>      >
>      >
>      > 2010/11/3 T�r�k Edwin <edwintorok at gmail.com <mailto:edwintorok at gmail.com>
>     <mailto:edwintorok at gmail.com <mailto:edwintorok at gmail.com>>>
>      >
>      >     On Wed, 3 Nov 2010 11:18:34 +0000
>      >     Salomon Brys <salomon.brys at gmail.com <mailto:salomon.brys at gmail.com>
>     <mailto:salomon.brys at gmail.com <mailto:salomon.brys at gmail.com>>> wrote:
>      >
>      > > Jiting with no optimization does not reduce significantly the
>      > > compilation with very small code...
>      >
>      >     I mean the parameter to createJIT, OptLevel. Try setting it to None.
>      >     Or if you use EngineBuilder, setOptLevel(CodeGenOpt::None).
>      >
>      > > What is the local register allocator ???
>      >
>      >     -regalloc=fast, or -regalloc=local parameter to llc, or lli.
>      >     I think there was a programatic way to choose register allocator, but I
>      >     forgot how.
>      >
>      >     Best regards,
>      >     --Edwin
>      >
>      >
>      >
>      >
>      > --
>      > ###########################################
>      > # Salomon BRYS
>      > # +33 (0) 6 83 54 55 96
>      > #------------------------------------------
>      > # > EPITECH "Koala" : C++ assistant : Sbire du C++
>      > # > Zend Certified Engineer for PHP5
>      > #------------------------------------------
>      > # All data in this e-mail is confidential.
>      > # If you are not, or if you don't believe you are, the recipient of this
>     e-mail,
>      > please delete it.
>      > #------------------------------------------
>      > # GPG : http://gpgkey-salomon.antesocial.fr/
>      > ###########################################
>      >
>      >
>      >
>      > _______________________________________________
>      > LLVM Developers mailing list
>      > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
>      > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>     _______________________________________________
>     LLVM Developers mailing list
>     LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
>     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
> --
> ###########################################
> # Salomon BRYS
> # +33 (0) 6 83 54 55 96
> #------------------------------------------
> # > EPITECH "Koala" : C++ assistant : Sbire du C++
> # > Zend Certified Engineer for PHP5
> #------------------------------------------
> # All data in this e-mail is confidential.
> # If you are not, or if you don't believe you are, the recipient of this e-mail,
> please delete it.
> #------------------------------------------
> # GPG : http://gpgkey-salomon.antesocial.fr/
> ###########################################




More information about the llvm-dev mailing list