web-dev-qa-db-ja.com

ASAN_SYMBOLIZER_PATHがバージョンで装飾されたバイナリで機能しなくなったのはなぜですか

Ubuntu 14.10では、llvm-symbolizerプログラムは/usr/bin/llvm-symbolizer-3.5としてインストールされます。通常、アドレスサニタイザーはPATHllvm-symbolizerという名前のバイナリを見つけたいと考えています。ただし、回避策として、ASAN_SYMBOLIZER_PATHを明示的に設定することが可能でした。したがって、環境でASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5を設定すると、アドレスサニタイザーがインストルメントされたプログラムがシンボル化されたエラーを出力するようになります。

Ubuntu 16.04では、llvm-symbolizerプログラムがバージョンサフィックスとともに再びインストールされ、現在は/usr/bin/llvm-symbolizer-3.8になっています。ただし、ASAN_SYMBOLIZER_PATH設定は機能しなくなったようです。環境でASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8を設定してASANインストルメント済みプログラムを実行すると、ASANがエラーを検出すると、次のエラーが生成されます。

==18718==ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-3.8' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.

この動作が変更された理由、または古い動作を復元する方法を誰かが知っていますか?これは不当に制限されているようです。私がASANに指摘したシンボライザープログラムは間違いなく既知のシンボライザーであり、Ubuntuで義務付けられたバージョンタグが最後に付いているだけです。

Ubuntuはバージョン装飾のないllvm-symbolizerバイナリを出荷していないため、PATHを調整してもここでは役に立たないことに注意してください。

20
acm

UbuntuのLLVMのパッケージ化では、装飾されていないllvm-symbolizerバイナリをパス/usr/lib/llvm-3.x/binから取得できるため、PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]がそのトリックを実行します。この変更はcompiler_rtのリグレッションだと私はまだ思っています。

17
acm

以下

Sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer

llvm-symbolizer-4.0でも機能します

(@Eradenコメントからコピー)

5
tutejszy