https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108994
Bug ID: 108994
Summary: LLVM JIT segfaults in libgcc after upgrading from gcc
12.2.1 to 13.0.1
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libgcc
Assignee: unassigned at gcc dot gnu.org
Reporter: tstellar at redhat dot com
Target Milestone: ---
On AArch64, I'm seeing some test failures when building the latest LLVM main
branch with gcc 13.0.1 installed on my system. Downgrading to 12.2.1 allows
the test to pass.
For example, clang/test/Interpreter/global-dtor.cpp fails with this stack
trace:
#0 0x0000fffff7c5e608 in classify_object_over_fdes () from
/lib64/libgcc_s.so.1
#1 0x0000fffff7c5f130 in __deregister_frame_info_bases () from
/lib64/libgcc_s.so.1
#2 0x0000fffff7c5f930 in __deregister_frame () from /lib64/libgcc_s.so.1
#3 0x0000000001351bc0 in llvm_orc_deregisterEHFrameSectionWrapper ()
#4 0x0000000000db9f74 in
llvm::orc::SelfExecutorProcessControl::callWrapperAsync(llvm::orc::ExecutorAddr,
llvm::orc::ExecutorProcessControl::IncomingWFRHandler, llvm::ArrayRef<char>) ()
#5 0x0000000000da0198 in
llvm::orc::ExecutorProcessControl::callWrapper(llvm::orc::ExecutorAddr,
llvm::ArrayRef<char>) ()
#6 0x0000000000dc03d4 in llvm::Error
llvm::orc::shared::WrapperFunction<llvm::orc::shared::SPSEmpty
(llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr,
llvm::orc::shared::SPSExecutorAddr>)>::call<llvm::orc::ExecutorProcessControl::callSPSWrapper<void
(llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr,
llvm::orc::shared::SPSExecutorAddr>),
llvm::orc::ExecutorAddrRange&>(llvm::orc::ExecutorAddr,
llvm::orc::ExecutorAddrRange&)::{lambda(char const*, unsigned long)#1},
llvm::orc::shared::SPSEmpty,
llvm::orc::ExecutorAddrRange>(llvm::orc::ExecutorProcessControl::callSPSWrapper<void
(llvm::orc::shared::SPSTuple<llvm::orc::shared::SPSExecutorAddr,
llvm::orc::shared::SPSExecutorAddr>),
llvm::orc::ExecutorAddrRange&>(llvm::orc::ExecutorAddr,
llvm::orc::ExecutorAddrRange&)::{lambda(char const*, unsigned long)#1} const&,
llvm::orc::shared::SPSEmpty&, llvm::orc::ExecutorAddrRange const&) ()
#7 0x0000000000dc0358 in
llvm::orc::EPCEHFrameRegistrar::deregisterEHFrames(llvm::orc::ExecutorAddrRange)
()
#8 0x0000000000da8170 in
llvm::orc::EHFrameRegistrationPlugin::notifyRemovingResources(llvm::orc::JITDylib&,
unsigned long) ()
#9 0x0000000000da711c in
llvm::orc::ObjectLinkingLayer::handleRemoveResources(llvm::orc::JITDylib&,
unsigned long) ()
#10 0x0000000000d7336c in
llvm::orc::ExecutionSession::removeResourceTracker(llvm::orc::ResourceTracker&)
()
#11 0x0000000000d791cc in llvm::orc::JITDylib::clear() ()
#12 0x0000000000d8582c in llvm::orc::ExecutionSession::endSession() ()
#13 0x0000000000d9b014 in llvm::orc::LLJIT::~LLJIT() ()
#14 0x0000000000d9b170 in llvm::orc::LLJIT::~LLJIT() ()
#15 0x0000000000ff07e0 in clang::IncrementalExecutor::~IncrementalExecutor() ()
#16 0x0000000000fef788 in clang::Interpreter::~Interpreter() ()
#17 0x0000000000a46010 in main ()
The crashing program is clang-repl, which is a C++ interpreter, so it's
crashing while trying to run the code, not while trying to compile it. I'm
working on getting a better reproducer, but if you have access to an AArch64
machine you can reproduce it like this:
git clone https://github.com/llvm/llvm-project
cd llvm-project
cmake -G Ninja -B build -S llvm -DCMAKE_BUILD_TYPE=release
-DLLVM_ENABLE_PROJECTS=clang -DLLVM_BUILD_LLVM_DYLIB=ON
-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
./build/bin/clang-repl < test.cpp
ninja -C build clang-repl
------------------------------
test.cpp:
extern "C" int printf(const char *, ...);
struct D { float f = 1.0; D *m = nullptr; D(){} ~D() { printf("D[f=%f,
m=0x%llx]\n", f, reinterpret_cast<unsigned long long>(m)); }} d;
// CHECK: D[f=1.000000, m=0x0]
--------------------------------