2016-06-28 5 views
16

Auf Ubuntu 14.10 wird das llvm-symbolizer Programm als /usr/bin/llvm-symbolizer-3.5 installiert. Normalerweise möchte der Adressdesinfektor eine Binärdatei mit der Bezeichnung llvm-symbolizer in PATH finden. Als Workaround konnte jedoch explizit ASAN_SYMBOLIZER_PATH gesetzt werden. Die Einstellung ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5 in der Umgebung würde also eine Adress-Sanitizer-Instrumentierung veranlassen, symbolisierte Fehler zu drucken.Warum funktioniert ASAN_SYMBOLIZER_PATH nicht mehr mit versionsverschönerten Binärdateien?

Auf Ubuntu 16.04 wird das Programm llvm-symbolizer erneut mit einem Versions-Suffix, jetzt als /usr/bin/llvm-symbolizer-3.8, installiert. Die Einstellung ASAN_SYMBOLIZER_PATH scheint jedoch nicht mehr zu funktionieren. Ausführen einen ASAN instrumentierte Programm mit ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8 in der Umgebung gesetzt generiert die folgende Fehlermeldung, wenn ASAN einen Fehler erkennt:

==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. 

Weiß jemand, warum dieses Verhalten geändert, oder wie das alte Verhalten wieder herzustellen? Dies scheint unangemessen restriktiv zu sein. Das Symbolizer-Programm, auf das ich ASAN hingewiesen habe, ist definitiv ein bekannter Symboler, es hat einfach am Ende ein Ubuntu-mandatiertes Versions-Tag.

Beachten Sie, dass die Anpassung PATH hier nicht hilft, da Ubuntu keine llvm-symbolizer Binärdatei liefert, die ohne eine Version Schmuck kommt.

+0

Für jeden anderen, der dies bemerkt, scheint es, dass dies das Ergebnis von [dieser Änderung in Compiler_rt] [1] war. Ich habe die Überprüfung gepingt, um zu versuchen, festzustellen, ob diese Änderung im Verhalten beabsichtigt war, oder wenn das eine Regression ist [1]: http://reviews.llvm.org/D8285 – acm

+2

Einfachster Weg, um dies zu beheben: ' sudo ln -s /usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-symbolizer' – Eraden

+1

@Eraden Sicher, das funktioniert gut auf meiner Dev-Box, aber das ist für ein CI-System, wo ich nicht ändern kann/usr/bin. – acm

Antwort

13

Es stellt sich heraus, dass auf Ubuntu die Verpackung von LLVM, kann man die schmucklose llvm-symbolizer Binär aus dem Pfad /usr/lib/llvm-3.x/bin, so PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND] macht den Trick. Ich denke immer noch, dass diese Änderung eine Regression in compiler_rt ist.

3

sudo ln -s /usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-Symbolizer

Funktioniert auch für llvm-Symbolizer-4.0

(kopiert von @Eraden Kommentar)

Verwandte Themen