[LLVMdev] Fw: Forcing the Interpreter segfaults
Salomon Brys
salomon.brys at gmail.com
Wed Nov 3 09:58:02 PDT 2010
Thank you.
Anyway, I have written my own interpreter.
It took me 20 minutes when I passed all the day searching for making the
LLVM interpreter working...
On Wed, Nov 3, 2010 at 16:28, Duncan Sands <baldrick at free.fr> wrote:
> 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/
>> ###########################################
>>
>
>
--
###########################################
# 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/
###########################################
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101103/d1331a07/attachment.html>
More information about the llvm-dev
mailing list