[llvm-dev] Interpreter crash due to an "Unknown constant pointer type!"

Alberto Barbaro via llvm-dev llvm-dev at lists.llvm.org
Mon Feb 10 13:55:46 PST 2020


Hi Lang,
I'm using the interpreter because my goal is to use it as a visitor and
follow the execution instruction per instruction.

Is it the same possible with a JIT class?

Thanks

On Mon, Feb 10, 2020, 21:31 Lang Hames <lhames at gmail.com> wrote:

> Hey Lang - does any of this look familiar to you?
>
>
> I'm afraid not: I know nothing about the interpreter. As far as I'm aware
> it's essentially abandonware.
>
> Alberto: The usual recommendation in these circumstances is to use a JIT
> class instead of the interpreter. You're using -force-interpreter though,
> so I assume you really want to use the interpreter for your use case?
>
> -- Lang.
>
> On Fri, Jan 3, 2020 at 3:04 PM David Blaikie <dblaikie at gmail.com> wrote:
>
>> Hey Lang - does any of this look familiar to you?
>>
>> On Fri, Jan 3, 2020 at 7:04 AM Alberto Barbaro <barbaro.alberto at gmail.com>
>> wrote:
>>
>>> David,
>>> sorry for this email but I noticed I made a mistake in the previous one.
>>> So I managed to compile llvm Debug with asserts release. I have used the
>>> following commands:
>>>
>>> cmake -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_RTTI=ON
>>> -DLLVM_ENABLE_FFI=ON -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=ON ..
>>> cmake --build . -- -j8 && sudo cmake --build . --target install
>>>
>>> Once lli was installed it was enough to use the .bc
>>>
>>> /usr/local/bin/lli --debug --force-interpreter pngpixel_crash.bc 0 0
>>> mini.png
>>> ...
>>> png_ptr->width: 1
>>> max_pixel_depth: 24
>>> row_bytes: 28
>>> ...
>>> About to interpret:   store <2 x %struct.code*> <%struct.code*
>>> getelementptr inbounds ([512 x %struct.code], [512 x %struct.code]*
>>> @fixedtables.lenfix.681, i64 0, i64 0), %struct.code* getelementptr
>>> inbounds ([32 x %struct.code], [32 x %struct.code]*
>>> @fixedtables.distfix.682, i64 0, i64 0)>, <2 x %struct.code*>* %96, align
>>> 8, !tbaa !50
>>> Unknown constant pointer type!
>>> UNREACHABLE executed at
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/ExecutionEngine.cpp:1008!
>>> Stack dump:
>>> 0. Program arguments: /usr/local/bin/lli --force-interpreter
>>> pngpixel_crash.bc 0 0 mini.png
>>>  #0 0x0000564bad642af9 llvm::sys::PrintStackTrace(llvm::raw_ostream&)
>>> /home/al/llvm-9.0.0.src/lib/Support/Unix/Signals.inc:533:0
>>>  #1 0x0000564bad642b8c PrintStackTraceSignalHandler(void*)
>>> /home/al/llvm-9.0.0.src/lib/Support/Unix/Signals.inc:594:0
>>>  #2 0x0000564bad640a66 llvm::sys::RunSignalHandlers()
>>> /home/al/llvm-9.0.0.src/lib/Support/Signals.cpp:68:0
>>>  #3 0x0000564bad6424b0 SignalHandler(int)
>>> /home/al/llvm-9.0.0.src/lib/Support/Unix/Signals.inc:385:0
>>>  #4 0x00007f697df61890 __restore_rt
>>> (/lib/x86_64-linux-gnu/libpthread.so.0+0x12890)
>>>  #5 0x00007f697ca0ae97 raise
>>> /build/glibc-OTsEL5/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
>>>  #6 0x00007f697ca0c801 abort
>>> /build/glibc-OTsEL5/glibc-2.27/stdlib/abort.c:81:0
>>>  #7 0x0000564bad5ce768 bindingsErrorHandler(void*,
>>> std::__cxx11::basic_string<char, std::char_traits<char>,
>>> std::allocator<char> > const&, bool)
>>> /home/al/llvm-9.0.0.src/lib/Support/ErrorHandling.cpp:218:0
>>>  #8 0x0000564bacfc2e5a
>>> llvm::ExecutionEngine::getConstantValue(llvm::Constant const*)
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/ExecutionEngine.cpp:1013:0
>>>  #9 0x0000564bacfeb873 llvm::Interpreter::getOperandValue(llvm::Value*,
>>> llvm::ExecutionContext&)
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/Interpreter/Execution.cpp:2108:0
>>> #10 0x0000564bacfe548a
>>> llvm::Interpreter::visitStoreInst(llvm::StoreInst&)
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/Interpreter/Execution.cpp:1105:0
>>> #11 0x0000564bacfee32f llvm::InstVisitor<llvm::Interpreter,
>>> void>::visitStore(llvm::StoreInst&)
>>> /home/al/llvm-9.0.0.src/include/llvm/IR/Instruction.def:173:0
>>> #12 0x0000564bacfed18d llvm::InstVisitor<llvm::Interpreter,
>>> void>::visit(llvm::Instruction&)
>>> /home/al/llvm-9.0.0.src/include/llvm/IR/Instruction.def:173:0
>>> #13 0x0000564bacfebd7b llvm::Interpreter::run()
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/Interpreter/Execution.cpp:2161:0
>>> #14 0x0000564bacfd6bdc llvm::Interpreter::runFunction(llvm::Function*,
>>> llvm::ArrayRef<llvm::GenericValue>)
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/Interpreter/Interpreter.cpp:101:0
>>> #15 0x0000564bacfbfb94
>>> llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*,
>>> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>,
>>> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char,
>>> std::char_traits<char>, std::allocator<char> > > > const&, char const*
>>> const*)
>>> /home/al/llvm-9.0.0.src/lib/ExecutionEngine/ExecutionEngine.cpp:470:0
>>> #16 0x0000564bac794cc4 main
>>> /home/al/llvm-9.0.0.src/tools/lli/lli.cpp:614:0
>>> #17 0x00007f697c9edb97 __libc_start_main
>>> /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:344:0
>>> #18 0x0000564bac791a9a _start (/usr/local/bin/lli+0x110aa9a)
>>> [1]    12828 abort (core dumped)  /usr/local/bin/lli --force-interpreter
>>> pngpixel_crash.bc 0 0 mini.png
>>>
>>> So I'm certaint that the crash happend
>>> in ExecutionEngine::getConstantValue.
>>>
>>> In addition, I have noticed that ElemTy->getTypeID() is 15 ( pointer
>>> type of type struct.code ) but the switch branch ( Line 917 ) in not able
>>> to deal with it so the llvm_unrecheable instruction is reached.
>>>
>>> So I can conclude that the problem is that the switch branch is not able
>>> to deal with pointers.. Any suggestion on how to fix it please?
>>>
>>> Do it help to narrow down the problem?
>>>
>>> Thanks
>>>
>>>
>>> Il giorno ven 3 gen 2020 alle ore 11:28 Alberto Barbaro <
>>> barbaro.alberto at gmail.com> ha scritto:
>>>
>>>> David,
>>>> Using llvm 9 the crash is not present anymore. I think it was just time
>>>> for me to update my code...
>>>>
>>>> Thanks for your help
>>>>
>>>> Alberto
>>>>
>>>> On Tue, Dec 24, 2019, 21:16 Alberto Barbaro <barbaro.alberto at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi David,
>>>>> In pretty sure that the crash is due to the instruction I have shared
>>>>> in my first email. In order to run pngpixel you just need libpng and zlib..
>>>>> honest I thought that the .bc had Al the necessary. I'm happy to help you
>>>>> to reproduce it. As a curiosity, why do you think you cannot reproduce it?
>>>>>
>>>>> Unfortunately I won't be able to modify the interpreter soon.. anyway,
>>>>> I'll try to dump s much info as possible.
>>>>>
>>>>> Thanks
>>>>> Alberto
>>>>>
>>>>>
>>>>> On Tue, Dec 24, 2019, 22:09 David Blaikie <dblaikie at gmail.com> wrote:
>>>>>
>>>>>> I can't reproduce it (just because of other local differences that
>>>>>> lead to failures before it reaches this point, not because it passes for me
>>>>>> or anything)
>>>>>>
>>>>>> I'd suggest you hop in with a debugger and/or modify the interpreter
>>>>>> to print more information at that unreachable - to see what sort of type
>>>>>> you do have & maybe then it'll be more clear what should be done with that
>>>>>> type, or why it's a weird type, etc.
>>>>>>
>>>>>> On Thu, Dec 19, 2019 at 11:32 AM Alberto Barbaro <
>>>>>> barbaro.alberto at gmail.com> wrote:
>>>>>>
>>>>>>> Hi David,
>>>>>>> Thanks for the suggestions. I can definitely provide the example bc
>>>>>>> file and image ( please see the attachments ). For the debug + asserts I
>>>>>>> need a bit of more time.
>>>>>>>
>>>>>>> Anyway the full output of lli is:
>>>>>>>
>>>>>>> lli --force-interpreter examples/pngpixel_crash.bc 0 0
>>>>>>> examples/mini.png
>>>>>>> png_ptr->width: 1
>>>>>>> max_pixel_depth: 24
>>>>>>> row_bytes: 28
>>>>>>> Unknown constant pointer type!
>>>>>>> UNREACHABLE executed at
>>>>>>> /home/al/Desktop/llvm-6.0.1.src/lib/ExecutionEngine/ExecutionEngine.cpp:1007!
>>>>>>> LLVMSymbolizer: error reading file: No such file or directory
>>>>>>> #0 0x0000000001765ee9 (lli+0x1765ee9)
>>>>>>> #1 0x0000000001766099 (lli+0x1766099)
>>>>>>> #2 0x0000000001764643 (lli+0x1764643)
>>>>>>> #3 0x0000000001766424 (lli+0x1766424)
>>>>>>> #4 0x00007f5dc5fc7890 __restore_rt
>>>>>>> (/lib/x86_64-linux-gnu/libpthread.so.0+0x12890)
>>>>>>> #5 0x00007f5dc4a85e97 gsignal
>>>>>>> (/lib/x86_64-linux-gnu/libc.so.6+0x3ee97)
>>>>>>> #6 0x00007f5dc4a87801 abort (/lib/x86_64-linux-gnu/libc.so.6+0x40801)
>>>>>>> #7 0x00000000016d7150 (lli+0x16d7150)
>>>>>>> #8 0x0000000001139543 (lli+0x1139543)
>>>>>>> #9 0x00000000011500b8 (lli+0x11500b8)
>>>>>>> #10 0x000000000115c25d (lli+0x115c25d)
>>>>>>> #11 0x0000000001167d32 (lli+0x1167d32)
>>>>>>> #12 0x000000000116430d (lli+0x116430d)
>>>>>>> #13 0x0000000001163580 (lli+0x1163580)
>>>>>>> #14 0x000000000114e197 (lli+0x114e197)
>>>>>>> #15 0x0000000001135ba0 (lli+0x1135ba0)
>>>>>>> #16 0x00000000008c729d (lli+0x8c729d)
>>>>>>> #17 0x00007f5dc4a68b97 __libc_start_main
>>>>>>> (/lib/x86_64-linux-gnu/libc.so.6+0x21b97)
>>>>>>> #18 0x00000000008c4f1a (lli+0x8c4f1a)
>>>>>>> Stack dump:
>>>>>>> 0. Program arguments: lli --force-interpreter
>>>>>>> examples/pngpixel_crash.bc 0 0 examples/mini.png
>>>>>>> [1]    4344 abort (core dumped)  lli --force-interpreter
>>>>>>> examples/pngpixel_crash.bc 0 0 examples/mini.png
>>>>>>>
>>>>>>> Please let me know if you can reproduce it!!
>>>>>>>
>>>>>>> Thanks
>>>>>>> Alberto
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Dec 19, 2019, 19:10 David Blaikie <dblaikie at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Probably need a debug (& probably +Asserts) build to see more about
>>>>>>>> where it's failing & that might help you fix it - if you want other folks
>>>>>>>> to be able to help debug the issue, providing the full reproduction steps
>>>>>>>> (the entire input files, what commands were run, etc) - though, preferably,
>>>>>>>> minimized (simplify the inputs/commands, etc, while still producing the
>>>>>>>> failure)
>>>>>>>>
>>>>>>>> On Thu, Dec 19, 2019 at 11:06 AM Alberto Barbaro via llvm-dev <
>>>>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>> as usual I'm playing with the Interpreter and unfortunately I hit
>>>>>>>>> a crash. I have narrowed down the problem an the crash happens inside the
>>>>>>>>> inflate function which is part of zlib and specifically at the instruction:
>>>>>>>>>
>>>>>>>>> store <2 x %struct.code*> <%struct.code* getelementptr inbounds
>>>>>>>>> ([512 x %struct.code], [512 x %struct.code]* @fixedtables.lenfix.681, i64
>>>>>>>>> 0, i64 0), %struct.code* getelementptr inbounds ([32 x %struct.code], [32 x
>>>>>>>>> %struct.code]* @fixedtables.distfix.682, i64 0, i64 0)>, <2 x
>>>>>>>>> %struct.code*>* %96, align 8, !tbaa !46
>>>>>>>>>
>>>>>>>>> The output from lli is:
>>>>>>>>>
>>>>>>>>> Unknown constant pointer type!
>>>>>>>>> UNREACHABLE executed at
>>>>>>>>> /home/al/Desktop/llvm-6.0.1.src/lib/ExecutionEngine/ExecutionEngine.cpp:1007!
>>>>>>>>> LLVMSymbolizer: error reading file: No such file or directory
>>>>>>>>> #0 0x0000000001765ee9 (lli+0x1765ee9)
>>>>>>>>> #1 0x0000000001766099 (lli+0x1766099)
>>>>>>>>> #2 0x0000000001764643 (lli+0x1764643)
>>>>>>>>> #3 0x0000000001766424 (lli+0x1766424)
>>>>>>>>> #4 0x00007faade157890 __restore_rt
>>>>>>>>> (/lib/x86_64-linux-gnu/libpthread.so.0+0x12890)
>>>>>>>>> #5 0x00007faadcc15e97 gsignal
>>>>>>>>> (/lib/x86_64-linux-gnu/libc.so.6+0x3ee97)
>>>>>>>>> #6 0x00007faadcc17801 abort
>>>>>>>>> (/lib/x86_64-linux-gnu/libc.so.6+0x40801)
>>>>>>>>> #7 0x00000000016d7150 (lli+0x16d7150)
>>>>>>>>> #8 0x0000000001139543 (lli+0x1139543)
>>>>>>>>> #9 0x00000000011500b8 (lli+0x11500b8)
>>>>>>>>> #10 0x000000000115c25d (lli+0x115c25d)
>>>>>>>>> #11 0x0000000001167d32 (lli+0x1167d32)
>>>>>>>>> #12 0x000000000116430d (lli+0x116430d)
>>>>>>>>> #13 0x0000000001163580 (lli+0x1163580)
>>>>>>>>> #14 0x000000000114e197 (lli+0x114e197)
>>>>>>>>> #15 0x0000000001135ba0 (lli+0x1135ba0)
>>>>>>>>> #16 0x00000000008c729d (lli+0x8c729d)
>>>>>>>>> #17 0x00007faadcbf8b97 __libc_start_main
>>>>>>>>> (/lib/x86_64-linux-gnu/libc.so.6+0x21b97)
>>>>>>>>> #18 0x00000000008c4f1a (lli+0x8c4f1a)
>>>>>>>>>
>>>>>>>>> Is there anyone that can help me to understand how to fix it even
>>>>>>>>> a simple workaround for the moment would be enough!
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Alberto
>>>>>>>>> _______________________________________________
>>>>>>>>> LLVM Developers mailing list
>>>>>>>>> llvm-dev at lists.llvm.org
>>>>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>>>
>>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200210/aca691dd/attachment.html>


More information about the llvm-dev mailing list