1

llvm ツールチェーン (libc++、libunwind、compiler-rt、clang ...) を使用して、コード リポジトリで c++ メモリ サニタイザー (msan) を使用したいと考えています。したがって、最初に行う必要があるのは、msan-instrumented libc++ をビルドすることです。

MemorySanitizerLibcxxHowToから、オプション-DLLVM_USE_SANITIZER=Memoryorを指定して libc++ をビルドする必要があります-DLLVM_USE_SANITIZER=MemoryWithOrigin

完全なllvmツールチェーンの組み立てから、LLVM’s compiler runtime libraryセクションで

libc++ および/または libc++abi を使用している場合は、-DLIBCXX_USE_COMPILER_RT=YES および/または -DLIBCXXABI_USE_COMPILER_RT=YES を cmake に渡して、libgcc_s ではなく compiler-rt を使用するように構成する必要がある場合があります。そうしないと、両方のランタイム ライブラリがプログラムにリンクされてしまう可能性があります (これは通常、無害ですが、無駄です)。

私は完全なllvmツールチェーンを目指しているので、追加する必要があると思い-DLIBCXX_USE_COMPILER_RT=YESます-DLIBCXXABI_USE_COMPILER_RT=YES

そこで、以下のスクリプトを使用して libcxx と libcxxabi をダウンロードし、予想されるディレクトリ レイアウトを作成してビルドを実行します。

 #!/bin/bash

 file_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
 num_of_processors=$(cat /proc/cpuinfo | grep -c ^processor)

 cd $file_dir
 svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
 (cd llvm/projects && svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx)
 (cd llvm/projects && svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi)

 export CC=clang
 export CXX=clang++

 [ -d build ] && rm -rf build
 mkdir -p build && cd build
 cmake ../llvm -DCMAKE_INSTALL_PREFIX=.. \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_USE_SANITIZER=Memory \
-DLIBCXX_USE_COMPILER_RT=YES \
-DLIBCXXABI_USE_COMPILER_RT=YES
 make install-libcxx install-libcxxabi -j$num_of_processors

私が得るエラーは次のとおりです。

-- Performing Test LIBCXX_SUPPORTS_STD_COLON_CXX11_FLAG - Failed
CMake Error at projects/libcxx/CMakeLists.txt:538 (message):
  C++11 or greater is required but the compiler does not support c++11

-- Configuring incomplete, errors occurred!
See also "~/libcxx- 
msan/build/CMakeFiles/CMakeOutput.log".
See also "~/libcxx- 
msan/build/CMakeFiles/CMakeError.log".

-DLLVM_USE_SANITIZER=Memoryこのエラーは、-DLIBCXX_USE_COMPILER_RT=YES両方が存在する場合にのみ発生します。それらのいずれかを削除すると、問題が解決します。

問題を修正し、両方のオプション (msan とコンパイラ rt) を維持する方法はありますか? 前もって感謝します!

4

0 に答える 0