This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Defining a libgnat.so, libgnarl.so ABI


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]