Question about consistency of mangled link names

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

  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)

  1. 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.