web-dev-qa-db-ja.com

GCC C ++名のマングリングリファレンス

周りを見回すと、C++シンボルをデマングルする方法ではなく、デマングルすることに関する質問がほとんどあります。はい、マングル化するシンボルを含むいくつかのダミーコードでg++オプションを使用して-Sを呼び出し、結果のアセンブリを調べることができますが、GCCの名前のマングリングに関する適切な参照または仕様を見つけることができませんでした。私が見つけることができた最も近いものは http://www.int0x80.gr/papers/name_mangling.pdf でしたが、名前テンプレートのインスタンス化がどのように変形されるか、または_Z3fooIN3BarEE3FooIXT_EEvの理由などはカバーされていないようですはFoo<Bar> foo<Bar>()に変換されます(方法はわかりますが、IXT_EEとは一体何ですか?_Zの後にNがないのはなぜですか?これはどういう意味ですか?).

16
Mona the Monad

Gccのソースからの引用( https://github.com/gcc-mirror/gcc/blob/master/gcc/cp/mangle.c ):

このファイルは、IA64 C++ ABI仕様に従ってC++名のマングリングを実装します。

そして、これがこの仕様のルールです: https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling

21
Pavel Golubev