> > Since I barely know any Ada, or Ada mangling, > > Ada subprogram name mangling depends on the order of declarations in > the source file. This order is also somewhat constrained by language > rules. I think this means that defining a stable ABI is rather > difficult.
Not sure what this particular discussion is about, since there's no notion of "mangling" in Ada, at least not in the usual C++ sense. In particular, there's no need to encode the parameter list in symbols as is apparently needed in C++, and as far as I know, no Ada compiler does that. The main "mangling" (in Ada parlance, we talk rather about "encoding") that is performed by GNAT is to handle packages ("namespace" in C++) and to differentiate overloaded functions (and there, a simple counter is all that is needed). There are a few other cases to handle nested procedures, tasks, protected objects, operators, etc... For example, consider the following Ada package: package Pack1 is procedure Foo; procedure Foo (I : Integer); end Pack1; The corresponding symbols generated by GNAT will be: pack1__foo pack1__foo__2 This (relatively small) part of the GNAT ABI BTW is fully documented, see exp_dbug.ads. Arno