c++assemblydisassemblyfunction-callname-mangling

C++ class function in assembly


I am look at C++ assembly, I have compiled a benchmark from the PARSEC suite and I am having difficulty knowing how do they name the class attribute functions in assembly language. for example if I have a class with some functions to manipulate it, in cpp we call them like test.increment();

After some investigation I found out that this function is

atomic_load_acq_ptr

represented as:

_ZL19atomic_load_acq_intPVj

in assembly, or at least this is what I have found out.

Let me know if I am wrong!

Is there some fixed rule for the mapping? or are they random?


Solution

  • It's called name mangling, is necessary because of overloads and templates and such (i.e. the plain chars-and-numbers name isn't enough to identify a chunk of code unambiguously; embedding spaces or <> or :: in names usually isn't legal; copying the additional information in uncondensed, human-readable form would be wasteful), and it therefore depends on types, arity, etc.

    The exact scheme can vary, but usually each compiler is self-consistent for a relatively long time (sometimes even several compilers can settle for one way).