This is the mail archive of the gcc-patches@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: [PATCH] AIX: Filename-based shared library versioning for libgcc_s


First, please explicitly copy me on AIX or PowerPC patches sent to gcc-patches.

I don't have a fundamental objection to including this option, but
note that Richi, Honza and I have discovered that using AIX runtime
linking option interacts badly with some GCC optimizations and can
result in applications that hang in a loop.

All code on AIX is position independent (PIC) by default.  Executables
and shared libraries essentially are PIE.  Because of this, AIX does
not provide separate "static" libraries and one can link statically
with a shared library.

Creating a library enabled for runtime linking with -G (-brtl), causes
a lot of problems, including a newly recognized failure mode.  Without
careful control over AIX symbol export, all global calls with use
glink code (equivalent to ELF PLTs). This also creates a TOC entry for
every global call, possibly overflowing the TOC.

But the main problem is GCC uses aliases and functions declared as
weak to support some C++ features. Functions declared weak interact
badly with shared libraries compiled for AIX runtime linking and
linked statically.  This can result in the static binary binding with
the glink code that loads its own address from the TOC instead of the
target function, causing endless looping.  Honza made some changes to
GCC code generation for AIX, but there still are problems and I have
disabled building libstdc++ enabled for runtime linking.

libgcc always explicitly creates a static library and uses it for
static linking.  All shared libraries for AIX that use this scheme
(through libtool) would have to follow the same convention to create
both shared and static libraries.  This new option only makes sense if
it fully emulates SVR4/ELF behavior and always creates both shared .so
and static .a libraries.

Thanks, David


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