web-dev-qa-db-fra.com

GCC C ++ Référence de manipulation de nom

En regardant autour de moi, je vois surtout des questions sur le démêlage des symboles C++ plutôt que sur la façon de les manipuler. Oui, on pourrait invoquer g++, En utilisant l'option -S, Sur un code factice contenant les symboles à modifier, puis examiner l'assemblage résultant, mais je n'ai pas pu trouver un bonne référence ou spécification sur le changement de nom de GCC. La chose la plus proche que j'ai pu trouver était sur http://www.int0x80.gr/papers/name_mangling.pdf , mais cela ne semble pas couvrir des choses comme la façon dont les instanciations des modèles de noms sont modifiées ou pourquoi _Z3fooIN3BarEE3FooIXT_EEv Se traduirait par Foo<Bar> foo<Bar>() (bien que je puisse en quelque sorte voir comment, mais qu'est-ce que c'est que IXT_EE? Pourquoi n'y a-t-il pas N après le _Z Dans celui-ci? Qu'est-ce que cela veut dire?).

16
Mona the Monad

Citation des sources de gcc ( https://github.com/gcc-mirror/gcc/blob/master/gcc/cp/mangle.c ):

Ce fichier implémente le mangling des noms C++ selon la spécification IA64 C++ ABI.

Et voici les règles de cette spécification: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling

21
Pavel Golubev