2017-08-09 6 views
1

abi-conformité vérificateur est un programme Perl qui peut vérifier ABI des bibliothèques sur linux (https://lvc.github.io/abi-compliance-checker/)À quoi sert l'option étendue dans abi-compliance-checker?

L'outil a une option -extended, et voici ce que le manuel dit à ce sujet:

Si votre bibliothèque A est censée être utilisée par l'autre bibliothèque B et vous voulez contrôler l'ABI de B, alors vous devriez activer cette option. L'outil vérifie les changements dans tous les types de données, même s'ils ne sont utilisés par aucune fonction de la bibliothèque A. Ces types de données ne font pas partie de l'ABI de bibliothèque A, mais peuvent faire partie de l'ABI de la bibliothèque B. Le régime est court: app C (cassé) -> lib B (cassé ABI) -> lib A (stable ABI)

Même après avoir essayé de vérifier ABI avec et sans l'option, je ne toujours pas vraiment comprendre l'option de signification et comment cela change les résultats que je reçois.

Voici un extrait des résultats que j'ai sans l'option:

Test Results 
Total Header Files 177 
Total Libraries 1 
Total Symbols/Types 96/57 
Compatibility 100% 

Added Symbols 1 
demangle.h, libtoolbox.so.16.0.0.27 
namespace mdw 
demangle (std::__cxx11::string const& iMangledString) 

Problems with Symbols, Low Severity 1 
BufferMgr.h 
namespace toolbox 
[+] kDefaultMaxBufferSize [data] 1 

Et voici les résultats avec l'option activée:

Test Results 
Total Header Files 177 
Total Symbols/Types 158/375 
Compatibility 99.8% 

Added Symbols 2 
demangle.h 
namespace mdw 
demangle (std::__cxx11::string const& iMangledString) 

StaticInit.h 
namespace toolbox 
_SymbolDefinedInStaticInitOnly_StaticInit () 

Removed Symbols 1 
StaticInit.h 
namespace toolbox 
_SymbolDefinedInStaticInitOnly () 

Problems with Symbols, Low Severity 1 
BufferMgr.h 
namespace toolbox 
[+] kDefaultMaxBufferSize [data] 1 

Quelqu'un est-il en mesure d'expliquer ce que cela signifie d'option , et ce que les différences dans la production signifie d'un point de vue ABI?

Répondre

1

Par défaut, l'outil vérifie les types de données utilisés (en tant que paramètre, valeur de retour ou champ de paramètre ou valeur de retour, etc.) par les symboles exportés du binaire analysé. Les types de données non utilisés ne sont pas vérifiés par défaut. En mode -extended, l'outil vérifie tous les types de données, y compris ceux qui ne sont pas utilisés.

Dans votre exemple, je vois que le nombre de symboles cochés est différent dans le mode étendu, mais il devrait être le même selon la description de l'option. La détection de _SymbolDefinedInStaticInitOnly* ajouté/supprimé ressemble à un bug de régression dans l'outil pour moi.

Pour l'instant, l'option -extended active implicitement l'option -headers-only, qui permet l'analyse de tous les symboles en-tête dans les en-têtes. Je pense que nous ne devrions pas activer l'option -headers-only dans ce cas.

On dirait que l'option -extended ne fonctionne pas comme prévu pour l'instant. Nous devons le réparer.