I am working on a project that entails writing calls in Modula3 code to C
and C++ code in the llvm infrastructure. For C, things are fine. For C++,
they are working, but I am having to put the mangled linker name in my binding.
My questions are
1) Does the mangled linker name of a C++ nonmember function depend only on the
function signature?
2) Do gcc and clang both mangle the same?
If not, then I will probably need to do more work to produce C bindings
similar to those in llvm-c/Core.h
I am working on a project that entails writing calls in Modula3 code to C
and C++ code in the llvm infrastructure. For C, things are fine. For C++,
they are working, but I am having to put the mangled linker name in my
binding.
My questions are
1) Does the mangled linker name of a C++ nonmember function depend only on
the
function signature?
Yes (mangling is there to support overloading and namespaces - since the
underlying symbol system doesn't support either, mangling is the task of
putting all the unique data about a function into the (mangled) name)
2) Do gcc and clang both mangle the same?
Yes - this is necessary for C++ libraries compiled with Clang to link
successfully with C++ libraries compiled with GCC.
(modulo bugs, edge cases, etc)
I am working on a project that entails writing calls in Modula3 code to C
and C++ code in the llvm infrastructure. For C, things are fine. For C++,
they are working, but I am having to put the mangled linker name in my binding.
My questions are
- Does the mangled linker name of a C++ nonmember function depend only on the
function signature?
Yes (mangling is there to support overloading and namespaces - since the underlying symbol system doesn’t support either, mangling is the task of putting all the unique data about a function into the (mangled) name)
- Do gcc and clang both mangle the same?
Yes - this is necessary for C++ libraries compiled with Clang to link successfully with C++ libraries compiled with GCC.
The mangling scheme used for most platforms (used by all gcc-supported platforms IIUC, but notably not used by MSVC) is documented here: https://mentorembedded.github.io/cxx-abi/abi.html#mangling
Thanks, I know how to proceed.