2016-06-28 1 views
16

Sous Ubuntu 14.10, le programme llvm-symbolizer est installé sous la forme /usr/bin/llvm-symbolizer-3.5. Normalement, l'assainisseur d'adresse recherche un fichier binaire nommé llvm-symbolizer dans PATH. Cependant, en guise de solution de contournement, il était possible de définir explicitement ASAN_SYMBOLIZER_PATH. Par conséquent, si vous définissez ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5 dans l'environnement, un programme instrumenté de désinfection d'adresses imprime des erreurs symbolisées. Sur Ubuntu 16.04, le programme llvm-symbolizer est de nouveau installé avec un suffixe de version, maintenant /usr/bin/llvm-symbolizer-3.8. Cependant, le réglage ASAN_SYMBOLIZER_PATH ne semble plus fonctionner. Exécution d'un programme instrumenté ASAN avec ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8 situé dans l'environnement génère l'erreur suivante lorsque ASAN détecte une erreur:Pourquoi ASAN_SYMBOLIZER_PATH ne fonctionne plus avec les versions binaires ornées

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

Est-ce que quelqu'un sait pourquoi ce comportement a changé, ou comment rétablir l'ancien comportement? Cela semble déraisonnablement restrictif. Le programme de symbolisation que j'ai pointé vers ASAN est certainement un symboliseur connu, il arrive juste d'avoir une étiquette de version obligatoire d'Ubuntu à la fin.

Notez que l'ajustement PATH n'aide pas ici, car Ubuntu ne livre pas un binaire llvm-symbolizer qui est livré sans un ornement de version.

+0

Pour tout le monde qui rencontre cela, il semble que ce soit le résultat de [ce changement dans compiler_rt] [1]. J'ai cliqué sur la revue pour essayer de déterminer si ce changement de comportement était prévu, ou s'il s'agit d'une régression [1]: http://reviews.llvm.org/D8285 – acm

+2

Le moyen le plus simple de résoudre ce problème: ' sudo ln -s /usr/bin/llvm-symbolizer-3.8/usr/bin/llvm-symbolizer' – Eraden

+1

@Eraden Bien sûr, ça fonctionne bien sur ma boîte de dev, mais c'est pour un système de CI où je ne peux pas modifier/usr/bin. – acm

Répondre

13

Il s'avère que sur l'emballage Ubuntu de LLVM, on peut obtenir le binaire llvm-symbolizer sans fioritures du chemin /usr/lib/llvm-3.x/bin, donc PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND] fait l'affaire. Je pense toujours que ce changement est une régression dans compiler_rt.

3

ln -s /usr/bin/llvm-symbolizer-3.8 sudo/usr/bin/LLVM-symboliseur

travaille également pour LLVM-symboliseur 4.0

(copié à partir @Eraden commentaire)