Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

LLVM Pass Crash

73 views
Skip to first unread message

José Lira Junior

unread,
Mar 24, 2024, 3:40:18 PM3/24/24
to android-llvm
Hello.

I was trying to use the Android LLVM Toolchain to run some LLVM passes.

## How I built it

- Downloaded the latest NDK release (r26c) and checked `clang` version
```bash
$ ./android-ndk-r26c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --version
Android (11349228, +pgo, +bolt, +lto, -mlgo, based on r487747e) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```

**Note**: added the following options to `build.py` -> `--no-build windows --skip-tests --no-lto`

After the build, it looks ok.

```bash
$ ./out/stage2-install/bin/clang --version
Android (dev, -pgo, -bolt, -lto, -mlgo, based on r487747e) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```

## Steps taken

I was trying to run a custom pass, but I thought maybe my pass was the problem, so I used [LLVM Tutor Hello World Pass](https://github.com/banach-space/llvm-tutor/blob/main/HelloWorld) as a test case.

Basically, this is the structure of the folder.

```
.
├── Hello
│   ├── CMakeLists.txt
│   └── HelloWorld.cpp
├── test.c
```

Then,

```bash
$ mkdir build
$ cd build
$ cmake -DLT_LLVM_INSTALL_DIR=/home/jose/llvm-toolchain/out/stage2-install ../Hello/
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- Found zstd: /usr/lib/x86_64-linux-gnu/libzstd.so
-- Found LibXml2: /usr/lib/x86_64-linux-gnu/libxml2.so (found version "2.9.10")
-- Configuring done (0.6s)
-- Generating done (0.0s)
-- Build files have been written to: /home/jose/ndk-passes/build
$ make
[ 50%] Building CXX object CMakeFiles/HelloWorld.dir/HelloWorld.cpp.o
[100%] Linking CXX shared library libHelloWorld.so
[100%] Built target HelloWorld
$ /home/jose/llvm-toolchain/out/stage2-install/bin/clang -S -emit-llvm -Xclang -disable-O0-optnone test.c -o test.ll
```

### Opt crash

```
$ /home/jose/llvm-toolchain/out/stage2-install/bin/opt -load-pass-plugin build/libHelloWorld.so -passes=hello-world test.ll -o mod.bc
PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace.
Stack dump:
0. Program arguments: /home/jose/llvm-toolchain/out/stage2-install/bin/opt -load-pass-plugin build/libHelloWorld.so -passes=hello-world test.ll -o mod.bc
 #0 0x0000563efffe3978 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jose/llvm-toolchain/out/stage2-install/bin/opt+0x3031978)
 #1 0x0000563efffe19de llvm::sys::RunSignalHandlers() (/home/jose/llvm-toolchain/out/stage2-install/bin/opt+0x302f9de)
 #2 0x0000563efffe40fd SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fba8e281420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fba8dd9d6c0 std::enable_if<__and_<std::__not_<std::__is_tuple_like<std::_Any_data>>, std::is_move_constructible<std::_Any_data>, std::is_move_assignable<std::_Any_data>>::value, void>::type std::swap<std::_Any_data>(std::_Any_data&, std::_Any_data&) (build/libHelloWorld.so+0xd6c0)
 #5 0x00007fba8dd9d671 std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>::swap(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>&) (build/libHelloWorld.so+0xd671)
 #6 0x00007fba8dd9d61f std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>::function(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>&&) (build/libHelloWorld.so+0xd61f)
 #7 0x00007fba8dd9d4fd void std::_Construct<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>>(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>&&) (build/libHelloWorld.so+0xd4fd)
 #8 0x00007fba8dd9d418 std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>* std::__uninitialized_copy<false>::__uninit_copy<std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>(std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*) (build/libHelloWorld.so+0xd418)
 #9 0x00007fba8dd9d379 std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>* std::uninitialized_copy<std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>(std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::move_iterator<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*) (build/libHelloWorld.so+0xd379)
#10 0x00007fba8dd9d32f std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>* std::uninitialized_move<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*) (build/libHelloWorld.so+0xd32f)
#11 0x00007fba8dd9d2a5 void llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::uninitialized_move<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*>(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*) (build/libHelloWorld.so+0xd2a5)
#12 0x00007fba8dd9d1ca llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::moveElementsForGrow(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*) (build/libHelloWorld.so+0xd1ca)
#13 0x00007fba8dd9d016 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::grow(unsigned long) (build/libHelloWorld.so+0xd016)
#14 0x00007fba8dd9cf1d std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const* llvm::SmallVectorTemplateCommon<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, void>::reserveForParamAndGetAddressImpl<llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>>(llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&, unsigned long) (build/libHelloWorld.so+0xcf1d)
#15 0x00007fba8dd9cd85 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::reserveForParamAndGetAddress(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&, unsigned long) (build/libHelloWorld.so+0xcd85)
#16 0x00007fba8dd9cd26 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::push_back(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&) (build/libHelloWorld.so+0xcd26)
#17 0x00007fba8dd9ccd4 llvm::PassBuilder::registerPipelineParsingCallback(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&) (build/libHelloWorld.so+0xccd4)
#18 0x00007fba8dd9c362 getHelloWorldPluginInfo()::$_0::operator()(llvm::PassBuilder&) const HelloWorld.cpp:0:0
#19 0x00007fba8dd9c329 getHelloWorldPluginInfo()::$_0::__invoke(llvm::PassBuilder&) HelloWorld.cpp:0:0
#20 0x0000563efea2bfc8 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/home/jose/llvm-toolchain/out/stage2-install/bin/opt+0x1a79fc8)
#21 0x0000563efea39dc7 main (/home/jose/llvm-toolchain/out/stage2-install/bin/opt+0x1a87dc7)
#22 0x00007fba8ddca083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#23 0x0000563efea28169 _start (/home/jose/llvm-toolchain/out/stage2-install/bin/opt+0x1a76169)
Segmentation fault (core dumped)
```

### Clang crash

```
$ /home/jose/llvm-toolchain/out/stage2-install/bin/clang -fpass-plugin=/home/jose/ndk-passes/build/libHelloWorld.so -Xclang -disable-O0-optnone test.c -S -emit-llvm -o mod_clang.ll
PLEASE submit a bug report to https://github.com/android-ndk/ndk/issues and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /home/jose/llvm-toolchain/out/stage2-install/bin/clang -fpass-plugin=/home/jose/ndk-passes/build/libHelloWorld.so -Xclang -disable-O0-optnone test.c -S -emit-llvm -o mod_clang.ll
1. <eof> parser at end of file
 #0 0x000055b2909bca98 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x3c5ea98)
 #1 0x000055b2909baafe llvm::sys::RunSignalHandlers() (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x3c5cafe)
 #2 0x000055b2909bbf81 llvm::sys::CleanupOnSignal(unsigned long) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x3c5df81)
 #3 0x000055b29093cb09 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #4 0x00007f1f2f441420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #5 0x00007f1f2f0006f0 free (/lib/x86_64-linux-gnu/libc.so.6+0x9a6f0)
 #6 0x00007f1f2ef2223a llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::takeAllocationForGrow(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>*, unsigned long) (/home/jose/ndk-passes/build/libHelloWorld.so+0xd23a)
 #7 0x00007f1f2ef22027 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::grow(unsigned long) (/home/jose/ndk-passes/build/libHelloWorld.so+0xd027)
 #8 0x00007f1f2ef21f1d std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const* llvm::SmallVectorTemplateCommon<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, void>::reserveForParamAndGetAddressImpl<llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>>(llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>*, std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&, unsigned long) (/home/jose/ndk-passes/build/libHelloWorld.so+0xcf1d)
 #9 0x00007f1f2ef21d85 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::reserveForParamAndGetAddress(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&, unsigned long) (/home/jose/ndk-passes/build/libHelloWorld.so+0xcd85)
#10 0x00007f1f2ef21d26 llvm::SmallVectorTemplateBase<std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)>, false>::push_back(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&) (/home/jose/ndk-passes/build/libHelloWorld.so+0xcd26)
#11 0x00007f1f2ef21cd4 llvm::PassBuilder::registerPipelineParsingCallback(std::function<bool (llvm::StringRef, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>&, llvm::ArrayRef<llvm::PassBuilder::PipelineElement>)> const&) (/home/jose/ndk-passes/build/libHelloWorld.so+0xccd4)
#12 0x00007f1f2ef21362 getHelloWorldPluginInfo()::$_0::operator()(llvm::PassBuilder&) const HelloWorld.cpp:0:0
#13 0x00007f1f2ef21329 getHelloWorldPluginInfo()::$_0::__invoke(llvm::PassBuilder&) HelloWorld.cpp:0:0
#14 0x000055b291045431 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream>>&, std::__1::unique_ptr<llvm::ToolOutputFile, std::__1::default_delete<llvm::ToolOutputFile>>&) BackendUtil.cpp:0:0
#15 0x000055b291040807 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream>>) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x42e2807)
#16 0x000055b29141c95c clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#17 0x000055b2923ac7cd clang::ParseAST(clang::Sema&, bool, bool) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x564e7cd)
#18 0x000055b2913827a6 clang::FrontendAction::Execute() (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x46247a6)
#19 0x000055b291303304 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x45a5304)
#20 0x000055b291415db3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x46b7db3)
#21 0x000055b28f56c58b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x280e58b)
#22 0x000055b28f56914d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#23 0x000055b291174402 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#24 0x000055b29093c8ec llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x3bde8ec)
#25 0x000055b291173e1b clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x4415e1b)
#26 0x000055b291139d30 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x43dbd30)
#27 0x000055b291139f9e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&, bool) const (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x43dbf9e)
#28 0x000055b291156580 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x43f8580)
#29 0x000055b28f568304 clang_main(int, char**) (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x280a304)
#30 0x00007f1f2ef8a083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#31 0x000055b28f565429 _start (/home/jose/llvm-toolchain/out/stage2-install/bin/clang+0x2807429)
clang-17: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Android (dev, -pgo, -bolt, -lto, -mlgo, based on r487747e) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/jose/llvm-toolchain/out/stage2-install/bin
clang-17: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-17: note: diagnostic msg: /tmp/test-afb5ec.c
clang-17: note: diagnostic msg: /tmp/test-afb5ec.sh
clang-17: note: diagnostic msg:

********************
```

Could someone please provide guidance on how to troubleshoot and resolve these issues?

Thank you in advance for your assistance.

Pirama Arumuga Nainar

unread,
Mar 25, 2024, 1:03:13 PM3/25/24
to José Lira Junior, android-llvm
Plugins are disabled in AOSP clang.  Can you try by enabling plugin support in https://android.googlesource.com/toolchain/llvm_android/+/refs/heads/main/base_builders.py#516?

--
You received this message because you are subscribed to the Google Groups "android-llvm" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-llvm...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-llvm/fb193b18-9a4e-458d-b399-f199b60cca3en%40googlegroups.com.

Pirama Arumuga Nainar

unread,
Mar 25, 2024, 7:22:58 PM3/25/24
to José Lira Junior, android-llvm
+android-llvm 

Good to know this works.

Per git blame, plugin support was disabled after the r26 toolchain so you'd need to set the CMake option when switching to r27 or later: https://android.googlesource.com/toolchain/llvm_android/+/b497d21a7784e3af5066b3e7c259df0d155226fc

On Mon, Mar 25, 2024 at 1:21 PM José Lira Junior <jljun...@gmail.com> wrote:
Hi, Pirama. There's no such line in `base_builders.py` for me.

```
$ grep LLVM_ENABLE_PLUGINS llvm-toolchain/toolchain/llvm_android/base_builders.py
$ echo $?
1
```

But now that you mentioned this option, I found this on `LLVMConfig.cmake`: `set(LLVM_ENABLE_PLUGINS ON)`.

After a few changes on `CMakeLists.txt`, it's working. Apparently, adding `-stdlib=libc++` to `CMAKE_CXX_FLAGS` solved the issue.

Thank you for your prompt answer!

José Lira Junior

unread,
Mar 27, 2024, 10:08:56 AM3/27/24
to android-llvm

Thanks for the heads up, Pirama!

I'm not entirely clear on this. Does the option need to be set during the toolchain build process? (i.e., is it an option for build.py?) Or can it be changed afterward?

Pirama Arumuga Nainar

unread,
Mar 27, 2024, 11:43:46 PM3/27/24
to José Lira Junior, android-llvm
On Wed, Mar 27, 2024 at 7:08 AM José Lira Junior <jljun...@gmail.com> wrote:

Thanks for the heads up, Pirama!

I'm not entirely clear on this. Does the option need to be set during the toolchain build process? (i.e., is it an option for build.py?) Or can it be changed afterward?


The option needs to be set in the build scripts.  base_builders.py sets LLVM_ENABLE_PLUGINS to OFF.  You should change it to ON, and then re-run build.py.  Since it is an uncommon knob, we did not add an option to build.py to turn plugin support on or off.
Reply all
Reply to author
Forward
0 new messages