Nom de référence GCC C ++

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 modifier. Oui, vous pouvez invoquer g++ , à l’aide de l’option -S , sur un code factice contenant les symboles à modifier, puis examiner l’assemblage obtenu, mais je n’ai pas réussi à trouver une référence ou une spécification correcte concernant le nom déchiffré 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 telles que la façon dont les instanciations de modèles de noms sont mutilées ou pourquoi _Z3fooIN3BarEE3FooIXT_EEv se traduit en Foo foo() (bien que je puisse en quelque sorte voir comment, mais qu’est-ce que IXT_EE est l’enfer? Pourquoi n’y a-t-il pas de N après le _Z dans celui-ci? Qu’est-ce que cela signifie même?).

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

Ce fichier implémente la modification des noms C ++ conformément à 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