This is the mail archive of the 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]

-fno-weak, typeinfo, and AIX

The new ABI's C++ typeinfo implementation depends on having only one
copy of the type name string in the final executable.  Then, typeinfo
equality is just equality of the address of this string.

Unfortunately, if you do not have weak symbols, you cannot pull this
off.  For classes without a key function, you need to emit the
typeinfo information statically, in every .o, and then do a full
string comparison at run-time.  (Alternatively, you could have
`collect2' look for undefined typeinfo symbols, and define them at
link time, but that wouldn't work across shared objects.)

So, on AIX, we need to:

  - Emit typeinfo statically when there is no key function

  - Modify the run-time library to do a string comparison, not an 
    address comparison, of the typeinfo strings.

Both are relatively easy tasks.

However, this also begs a usability question.  On all targets, even
those that do support weak symbols, g++ provides a -fno-weak flag that
turns them off.

It's not clear to me why we provide this flag, since the weak symbols
approach works much more smoothly.  I'm pretty sure that nobody uses
this flag, because things don't work well when you do use it!
Furthermore, in the new ABI, -fno-weak will break RTTI, since we only
want to slow down RTTI on the platforms where we really need to.

Therefore, I propose doing the following things, necessary to get AIX
support working reasonably well:

  - Changing G++ to emit typeinfo statically if the target does
    not support weak symbols.

  - Modify the support runtime to do strcmp's on AIX.

  - Remove -fno-weak, except in so far as to issue a message saying
    it is no longer supported, and remove it from the documentation.

The last step is technically optional, but will reduce user confusion.


Mark Mitchell         
CodeSourcery, LLC     

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