This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [build] Move unwinder to toplevel libgcc (v2)
Andreas Schwab <schwab@linux-m68k.org> writes:
> I'm seeing this bootstrap failure on ia64 (configured with
> --with-system-libunwind):
>
> /usr/local/gcc/gcc-20110806/Build/./prev-gcc/g++ -B/usr/local/gcc/gcc-20110806/Build/./prev-gcc/ -B/usr/ia64-suse-linux/bin/ -nostdinc++ -B/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/src/.libs -B/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/libsupc++/.libs -I/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/include/ia64-suse-linux -I/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/include -I/usr/local/gcc/gcc-20110806/libstdc++-v3/libsupc++ -L/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/src/.libs -L/usr/local/gcc/gcc-20110806/Build/prev-ia64-suse-linux/libstdc++-v3/libsupc++/.libs -DUSE_LIBUNWIND_EXCEPTIONS -g -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common -DHAVE_CONFIG_H -o gengtype gengtype.o gengtype-lex.o gengtype-parse.o gengtype-state.o version.o errors.o libcommon.a ../libcpp/libcpp.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a
> /usr/local/gcc/gcc-20110806/Build/./prev-gcc/libgcc_s.so: undefined reference to `__libunwind__Unwind_Find_FDE'
> collect2: error: ld returned 1 exit status
> make[3]: *** [gengtype] Error 1
> make[3]: *** Waiting for unfinished jobs....
> make[3]: Leaving directory `/usr/local/gcc/gcc-20110806/Build/gcc'
> make[2]: *** [all-stage2-gcc] Error 2
> make[2]: Leaving directory `/usr/local/gcc/gcc-20110806/Build'
> make[1]: *** [stage2-bubble] Error 2
> make[1]: Leaving directory `/usr/local/gcc/gcc-20110806/Build'
> make: *** [bootstrap] Error 2
>
> Looks like -lunwind is missing somewhere.
AFAICT -lunwind comes from gcc/config/t-libunwind (SHLIB_LC) and is
still present *if t-libunwind is used*. The problem could be that there
are several different definitions of LIB2ADDEH for the ia64-*-*
configs. In the case of Linux/IA-64, we now have
> grep LIB2ADDEH ia64/t-ia64 ia64/t-glibc ia64/t-eh-ia64 t-libunwind
ia64/t-glibc:LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
ia64/t-eh-ia64:LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c \
t-libunwind:LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
t-libunwind:LIB2ADDEHSTATIC = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
On the 4.6 branch (in gcc/config), we have
ia64/t-ia64:LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c \
t-libunwind:LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
t-libunwind:LIB2ADDEHSTATIC = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
ia64/t-glibc:LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
It seems the ordering is wrong, i.e. t-libunwind should come before
ia64/t-glibc.
Perhaps you could have a look at all those definitions of LIB2ADDEH*?
Probably some of them can be removed, or the t-* files not included in
particular configurations.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University