When libunwind is installed on the system, the gcc configure will enable it automatically by default. As the result, the new libgcc_s.so.1 is very different and not backward compatible with the previous libgcc_s.so.1. The new libgcc_s.so.1 depends on libunwind.so. Many symbols used to defined in libgcc_s.so.1 are now provided by libunwind.so and unversioned. Anything referencing those symbols won't work now like: /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_GetRegionStart@GCC_3.0' /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_SetGR@GCC_3.0' /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_GetLanguageSpecificData@GCC_3.0' /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_GetIP@GCC_3.0' /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_GetGR@GCC_3.0' /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/adalib//libgnat.so: undefined reference to `_Unwind_SetIP@GCC_3.0' collect2: ld returned 1 exit status gnatlink: cannot call /usr/bin/gcc
I do not think there is any way around this. Either use libunwind or not use it, do not build one compiler with and then one without or the other way around.
I don't think gcc 3.4.0 should enable libunwind by default before binary compatibility issue is resolved.
A patch is posted at http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00751.html
Until someone (Richard Henderson?) says that this is really a defect, I'm not going to treat it as a showstopper. There's a backwards compatible fix for 3.4.1 -- have the new libgcc define the old, versioned symbols even when using libunwind. Since there's a backwards compatible fix later, I'm not worried now: any distributors using 3.4.0 directly can use --disable-libunwind.
I think this was decided this is not a bug, as anything changes the ABI is really not a bug if it is more correct.
It is a real gcc bug. We have been working on it. A proposal will be submitted soon.
How can an ABI change be a GCC bug?
The proposed fix will be backward binary compatible.
I see the email was posted and nothing came out of it, basically this bug is invalid. Not because it would change the ABI but the different between using libunwind and not using it is an ABI difference and an known one which means that you should be care full when trying to mix the binaries so closing as invalid.
An updated patch is posted at http://gcc.gnu.org/ml/gcc-patches/2004-08/msg01398.html
With the patch http://gcc.gnu.org/ml/gcc-patches/2004-08/msg01398.html applied, the ABI-compliant 3rd party libunwind can be used in gcc without causing any binary incompatibility. libunwind 0.98 from David Mosberger is one of such libraries.
The draft of the ia64 unwind extension is at http://www.kernel.org/pub/linux/devel/gcc/unwind/
Note again this is not a bug in GCC at all so closing as invalid.
Subject: Bug 14925 CVSROOT: /cvs/gcc Module name: gcc Changes by: hjl@gcc.gnu.org 2004-09-04 00:15:43 Modified files: gcc : ChangeLog Makefile.in config.gcc config.in configure configure.ac gcc.c mklibgcc.in unwind-dw2-fde-glibc.c unwind-dw2.c gcc/config : t-libunwind gcc/config/ia64: t-glibc t-hpux unwind-ia64.c gcc/doc : install.texi Added files: gcc : unwind-compat.c unwind-compat.h unwind-dw2-fde-compat.c gcc/config : t-libunwind-elf gcc/config/ia64: t-glibc-libunwind Log message: 2004-09-03 H.J. Lu <hongjiu.lu@intel.com> PR target/14925: Makefile.in (LIB2ADDEHSTATIC): New. (LIB2ADDEHSHARED): New. (LIBUNWIND): New. (LIBUNWINDDEP): New. (SHLIBUNWIND_LINK): New. (SHLIBUNWIND_INSTALL): New. (libgcc.mk): Pass LIB2ADDEHSTATIC, LIB2ADDEHSHARED, LIBUNWIND, LIBUNWINDDEP, SHLIBUNWIND_LINK and SHLIBUNWIND_INSTALL. (clean): Remove libunwind* (stage1-start): Remove and copy stage1/libunwind*. (stage2-start): Remove and copy stage2/libunwind*. (stage3-start): Remove and copy stage3/libunwind*. (stage4-start): Remove and copy stage4/libunwind*. (stageprofile-start): Remove and copy stageprofile/libunwind*. (stagefeedback-start): Remove and copy stagefeedback/libunwind*. * config.gcc (ia64*-*-linux*): Always add t-libunwind to tmake_file. Add t-libunwind-elf and ia64/t-glibc-libunwind to tmake_file if --with-system-libunwind isn't used. * config/ia64/t-glibc-libunwind: New file. * config/t-libunwind-elf: Likewise. * unwind-compat.c: Likewise. * unwind-compat.h: Likewise. * unwind-dw2-fde-compat.c: Likewise. * config/ia64/t-glibc (LIB2ADDEH): Updated. * config/ia64/t-hpux (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS. * config/ia64/unwind-ia64.c: Include "unwind-compat.h". Define aliases if needed. * unwind-dw2-fde-glibc.c: Likewise. * unwind-dw2.c: Likewise. * config/t-libunwind (LIB2ADDEH): Updated. (LIB2ADDEHSTATIC): New. (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS. (TARGET_LIBGCC2_CFLAGS): Set to -DUSE_GAS_SYMVER. * configure.ac: Change --enable-libunwind-exceptions to --with-system-libunwind. Don't define USE_LIBUNWIND_EXCEPTIONS. * configure: Regenerated. * config.in: Updated. * doc/install.texi (ia64-*-linux): Require libunwind 0.98 or above and mention --with-system-libunwind. (ia64-*-hpux*): Mention --enable-libunwind-exceptions is removed in gcc 3.4.3 and later. * gcc.c (init_spec): Add -lunwind to -lgcc_s if USE_LIBUNWIND_EXCEPTIONS is defined. * mklibgcc.in: Support libunwind. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-compat.c.diff?cvsroot=gcc&r1=NONE&r2=2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-compat.h.diff?cvsroot=gcc&r1=NONE&r2=2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2-fde-compat.c.diff?cvsroot=gcc&r1=NONE&r2=2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.5245&r2=2.5246 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/Makefile.in.diff?cvsroot=gcc&r1=1.1368&r2=1.1369 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.gcc.diff?cvsroot=gcc&r1=1.487&r2=1.488 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.in.diff?cvsroot=gcc&r1=1.195&r2=1.196 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/configure.diff?cvsroot=gcc&r1=1.850&r2=1.851 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/configure.ac.diff?cvsroot=gcc&r1=2.61&r2=2.62 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/gcc.c.diff?cvsroot=gcc&r1=1.430&r2=1.431 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/mklibgcc.in.diff?cvsroot=gcc&r1=1.70&r2=1.71 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2-fde-glibc.c.diff?cvsroot=gcc&r1=1.14&r2=1.15 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2.c.diff?cvsroot=gcc&r1=1.44&r2=1.45 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/t-libunwind-elf.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/t-libunwind.diff?cvsroot=gcc&r1=1.5&r2=1.6 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-glibc-libunwind.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-glibc.diff?cvsroot=gcc&r1=1.3&r2=1.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-hpux.diff?cvsroot=gcc&r1=1.8&r2=1.9 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/unwind-ia64.c.diff?cvsroot=gcc&r1=1.25&r2=1.26 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/install.texi.diff?cvsroot=gcc&r1=1.313&r2=1.314
Subject: Bug 14925 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: hjl@gcc.gnu.org 2004-09-08 15:16:17 Modified files: gcc : ChangeLog Makefile.in config.gcc config.in configure.ac gcc.c mklibgcc.in unwind-dw2-fde-glibc.c unwind-dw2.c gcc/config : t-libunwind gcc/config/ia64: t-glibc t-hpux unwind-ia64.c gcc/doc : install.texi Added files: gcc : unwind-compat.c unwind-compat.h unwind-dw2-fde-compat.c gcc/config : t-libunwind-elf gcc/config/ia64: t-glibc-libunwind Log message: 2004-09-08 H.J. Lu <hongjiu.lu@intel.com> PR target/14925: Makefile.in (LIB2ADDEHSTATIC): New. (LIB2ADDEHSHARED): New. (LIBUNWIND): New. (LIBUNWINDDEP): New. (SHLIBUNWIND_LINK): New. (SHLIBUNWIND_INSTALL): New. (libgcc.mk): Pass LIB2ADDEHSTATIC, LIB2ADDEHSHARED, LIBUNWIND, LIBUNWINDDEP, SHLIBUNWIND_LINK and SHLIBUNWIND_INSTALL. (clean): Remove libunwind* (stage1-start): Remove and copy stage1/libunwind*. (stage2-start): Remove and copy stage2/libunwind*. (stage3-start): Remove and copy stage3/libunwind*. (stage4-start): Remove and copy stage4/libunwind*. (stageprofile-start): Remove and copy stageprofile/libunwind*. (stagefeedback-start): Remove and copy stagefeedback/libunwind*. * config.gcc (ia64*-*-linux*): Always add t-libunwind to tmake_file. Add t-libunwind-elf and ia64/t-glibc-libunwind to tmake_file if --with-system-libunwind isn't used. * config/ia64/t-glibc-libunwind: New file. * config/t-libunwind-elf: Likewise. * unwind-compat.c: Likewise. * unwind-compat.h: Likewise. * unwind-dw2-fde-compat.c: Likewise. * config/ia64/t-glibc (LIB2ADDEH): Updated. * config/ia64/t-hpux (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS. * config/ia64/unwind-ia64.c: Include "unwind-compat.h". Define aliases if needed. * unwind-dw2-fde-glibc.c: Likewise. * unwind-dw2.c: Likewise. * config/t-libunwind (LIB2ADDEH): Updated. (LIB2ADDEHSTATIC): New. (T_CFLAGS): Add -DUSE_LIBUNWIND_EXCEPTIONS. (TARGET_LIBGCC2_CFLAGS): Set to -DUSE_GAS_SYMVER. * configure.ac: Change --enable-libunwind-exceptions to --with-system-libunwind. Don't define USE_LIBUNWIND_EXCEPTIONS. * configure: Regenerated. * config.in: Updated. * doc/install.texi (ia64-*-linux): Require libunwind 0.98 or above and mention --with-system-libunwind. (ia64-*-hpux*): Mention --enable-libunwind-exceptions is removed in gcc 3.4.3 and later. * gcc.c (init_spec): Add -lunwind to -lgcc_s if USE_LIBUNWIND_EXCEPTIONS is defined. * mklibgcc.in: Support libunwind. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-compat.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=2.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-compat.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=2.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2-fde-compat.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=2.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.612&r2=2.2326.2.613 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/Makefile.in.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.1223.2.17&r2=1.1223.2.18 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.gcc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.420.2.14&r2=1.420.2.15 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config.in.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.181.4.3&r2=1.181.4.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/configure.ac.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.6.2.15&r2=2.6.2.16 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/gcc.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.403.4.8&r2=1.403.4.9 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/mklibgcc.in.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.67.4.1&r2=1.67.4.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2-fde-glibc.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.12&r2=1.12.6.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/unwind-dw2.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.40&r2=1.40.6.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/t-libunwind-elf.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/t-libunwind.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.5&r2=1.5.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-glibc-libunwind.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-glibc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3&r2=1.3.84.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/t-hpux.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.8&r2=1.8.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/ia64/unwind-ia64.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.21.4.1&r2=1.21.4.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/install.texi.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.248.4.25&r2=1.248.4.26