exaloop / codon

A high-performance, zero-overhead, extensible Python compiler using LLVM
https://docs.exaloop.io/codon
Other
14.92k stars 510 forks source link

Gdb debug with segfault #577

Open CanftIn opened 1 month ago

CanftIn commented 1 month ago
(base)  canftin@DESKTOP-4QK14RE  ~/workspace/codon_ws/codon/build> gdb -args codon run ../.vscode/debug/test_fib.py
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from codon...
(gdb) r
Starting program: /home/canftin/workspace/codon_ws/codon/build/codon run ../.vscode/debug/test_fib.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007fffef33107d in GC_find_limit_with_bound (p=0x555555762918 "", up=0, bound=0x0)
    at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/os_dep.c:1008
1008                    GC_noop1((word)(*result));
(gdb) bt
#0  0x00007fffef33107d in GC_find_limit_with_bound (p=0x555555762918 "", up=0, bound=0x0)
    at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/os_dep.c:1008
#1  0x00007fffef330ea0 in GC_find_limit (p=0x555555762918, up=0) at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/os_dep.c:1020
#2  0x00007fffef330e51 in GC_init_linux_data_start () at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/os_dep.c:459
#3  0x00007fffef32e8d7 in GC_init () at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/misc.c:1207
#4  0x00007fffef332d59 in GC_add_roots (b=0x7fffefd39000, e=0x7fffefd3a000) at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/mark_rts.c:153
#5  0x00007fffef2b83fd in seq_gc_add_roots (start=0x7fffefd39000, end=0x7fffefd3a000) at /home/canftin/workspace/codon_ws/codon/codon/runtime/lib.cpp:212
#6  0x00007ffff08f4aac in codon::BoehmGCJITLinkMemoryManager::allocate(llvm::jitlink::JITLinkDylib const*, llvm::jitlink::LinkGraph&, llvm::unique_function<void (llvm::Expected<std::unique_ptr<llvm::jitlink::JITLinkMemoryManager::InFlightAlloc, std::default_delete<llvm::jitlink::JITLinkMemoryManager::InFlightAlloc> > >)>) (this=0x55555c23bb30, JD=0x555557d74bd8, G=..., OnAllocated=...) at /home/canftin/workspace/codon_ws/codon/codon/compiler/memory_manager.cpp:193
#7  0x00007ffff48a85ae in llvm::jitlink::JITLinkerBase::linkPhase1(std::unique_ptr<llvm::jitlink::JITLinkerBase, std::default_delete<llvm::jitlink::JITLinkerBase> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#8  0x00007ffff4891bf5 in llvm::jitlink::link_ELF_x86_64(std::unique_ptr<llvm::jitlink::LinkGraph, std::default_delete<llvm::jitlink::LinkGraph> >, std::unique_ptr<llvm::jitlink::JITLinkContext, std::default_delete<llvm::jitlink::JITLinkContext> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#9  0x00007ffff485ff35 in llvm::jitlink::link_ELF(std::unique_ptr<llvm::jitlink::LinkGraph, std::default_delete<llvm::jitlink::LinkGraph> >, std::unique_ptr<llvm::jitlink::JITLinkContext, std::default_delete<llvm::jitlink::JITLinkContext> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#10 0x00007ffff48346e2 in llvm::jitlink::link(std::unique_ptr<llvm::jitlink::LinkGraph, std::default_delete<llvm::jitlink::LinkGraph> >, std::unique_ptr<llvm::jitlink::JITLinkContext, std::default_delete<llvm::jitlink::JITLinkContext> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#11 0x00007ffff35866ba in llvm::orc::ObjectLinkingLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#12 0x00007ffff358f3d2 in llvm::orc::ObjectTransformLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#13 0x00007ffff35d1b41 in llvm::orc::IRCompileLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, llvm::orc::ThreadSafeModule) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#14 0x00007ffff35d23cb in llvm::orc::IRTransformLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, llvm::orc::ThreadSafeModule) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#15 0x00007ffff35d23cb in llvm::orc::IRTransformLayer::emit(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >, llvm::orc::ThreadSafeModule) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#16 0x00007ffff35da21c in llvm::orc::BasicIRLayerMaterializationUnit::materialize(std::unique_ptr<llvm::orc::MaterializationResponsibility, std::default_delete<llvm::orc::MaterializationResponsibility> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#17 0x00007ffff352500a in llvm::orc::MaterializationTask::run() () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#18 0x00007ffff350a1dc in void llvm::detail::UniqueFunctionBase<void, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> > >::CallImpl<void (*)(std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> >)>(void*, std::unique_ptr<llvm::orc::Task, std::default_delete<llvm::orc::Task> >&)
--Type <RET> for more, q to quit, c to continue without paging--
    () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#19 0x00007ffff3525ebd in llvm::orc::ExecutionSession::dispatchOutstandingMUs() () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#20 0x00007ffff352ae6c in llvm::orc::ExecutionSession::OL_completeLookup(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >, std::shared_ptr<llvm::orc::AsynchronousSymbolQuery>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > > const&)>) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#21 0x00007ffff352c265 in llvm::orc::InProgressFullLookupState::complete(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#22 0x00007ffff3517cc6 in llvm::orc::ExecutionSession::OL_applyQueryPhase1(std::unique_ptr<llvm::orc::InProgressLookupState, std::default_delete<llvm::orc::InProgressLookupState> >, llvm::Error) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#23 0x00007ffff352628e in llvm::orc::ExecutionSession::lookup(llvm::orc::LookupKind, std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolLookupSet, llvm::orc::SymbolState, llvm::unique_function<void (llvm::Expected<llvm::DenseMap<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void>, llvm::detail::DenseMapPair<llvm::orc::SymbolStringPtr, llvm::orc::ExecutorSymbolDef> > >)>, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > > const&)>) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#24 0x00007ffff35264cd in llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolLookupSet, llvm::orc::LookupKind, llvm::orc::SymbolState, std::function<void (llvm::DenseMap<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> >, llvm::DenseMapInfo<llvm::orc::JITDylib*, void>, llvm::detail::DenseMapPair<llvm::orc::JITDylib*, llvm::DenseSet<llvm::orc::SymbolStringPtr, llvm::DenseMapInfo<llvm::orc::SymbolStringPtr, void> > > > const&)>) () from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#25 0x00007ffff3526915 in llvm::orc::ExecutionSession::lookup(std::vector<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags>, std::allocator<std::pair<llvm::orc::JITDylib*, llvm::orc::JITDylibLookupFlags> > > const&, llvm::orc::SymbolStringPtr, llvm::orc::SymbolState) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#26 0x00007ffff3559ed9 in llvm::orc::LLJIT::lookupLinkerMangled(llvm::orc::JITDylib&, llvm::orc::SymbolStringPtr) ()
   from /home/canftin/workspace/codon_ws/codon/build/libcodonc.so
#27 0x00007ffff0899bb8 in llvm::orc::LLJIT::lookupLinkerMangled (this=0x555557762ba0, JD=..., Name=...)
    at /home/canftin/workspace/codon_ws/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:164
#28 0x00007ffff0899afd in llvm::orc::LLJIT::lookup (this=0x555557762ba0, JD=..., UnmangledName=...)
    at /home/canftin/workspace/codon_ws/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:176
#29 0x00007ffff08943e4 in llvm::orc::LLJIT::lookup (this=0x555557762ba0, UnmangledName=...)
    at /home/canftin/workspace/codon_ws/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h:181
#30 0x00007ffff0d666ff in codon::ir::LLVMVisitor::run (this=0x55555580a550, args=std::vector of length 1, capacity 1 = {...},
--Type <RET> for more, q to quit, c to continue without paging--
    libs=std::vector of length 0, capacity 0, envp=0x0) at /home/canftin/workspace/codon_ws/codon/codon/cir/llvm/llvisitor.cpp:1261
#31 0x00005555555eae27 in runMode (args=std::vector of length 2, capacity 2 = {...}) at /home/canftin/workspace/codon_ws/codon/codon/app/main.cpp:244
#32 0x00005555555eddb5 in main (argc=3, argv=0x7fffffffde18) at /home/canftin/workspace/codon_ws/codon/codon/app/main.cpp:454

python file:

(base)  canftin@DESKTOP-4QK14RE  ~/workspace/codon_ws/codon/build> cat ../.vscode/debug/test_fib.py
from time import time

def fib(n):
    return n if n < 2 else fib(n - 1) + fib(n - 2)

t0 = time()
ans = fib(40)
t1 = time()
print(f'Computed fib(40) = {ans} in {t1 - t0} seconds.')

only exec command will not segfault:

(base)  canftin@DESKTOP-4QK14RE  ~/workspace/codon_ws/codon/build> codon run ../.vscode/debug/test_fib.py
Computed fib(40) = 102334155 in 0.534422 seconds.

environment: Windows WSL Ubuntu 24.04

build command:

cmake .. -G Ninja \
    -DCMAKE_BUILD_TYPE=Debug \
    -DLLVM_DIR=/home/canftin/workspace/codon_ws/llvm-project/build/lib/cmake/llvm \
    -DCMAKE_C_COMPILER=clang \
    -DCMAKE_CXX_COMPILER=clang++ -DCODON_GPU=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
inumanag commented 19 hours ago

Hi @CanftIn

Can you try this in lldb? We do not test Codon with gdb.

Also, debugging should be done with executables made by codon build; codon run is not debuggable or designed to do so.

CanftIn commented 16 hours ago

@inumanag hello, i have tried in lldb, and also crash in same place

at /home/canftin/workspace/codon_ws/codon/build/_deps/bdwgc-src/os_dep.c:1008
1008                    GC_noop1((word)(*result));

image

my vscode launch.json is:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug",
      "program": "${workspaceFolder}/build/codon",
      "args": [
        "run",
        "${workspaceFolder}/.vscode/debug/test_fib.py"
      ],
      "cwd": "${workspaceFolder}",
      "env": {
        "CODON_DEBUG": "l"
      }
    },
  ]
}

i have compiled the newest source code of develop branch(d45646dc41e0380b860b24d625eabb0cc247257d) and tried to debug again. I have not been located the cause of the error.


Also, debugging should be done with executables made by codon build; codon run is not debuggable or designed to do so.

thank your advices, but the reason i debug codon source code is that i wanted to learn and figure out how the codon execute like lower and transform pass. Can you reproduct this case or how do you debug and test when you add features to codon?