NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

toolchain/47955: toolchain issues with glib2

>Number:         47955
>Category:       toolchain
>Synopsis:       toolchain issues with glib2
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    toolchain-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Jun 23 05:45:00 +0000 2013
>Originator:     Michael van Elst
>Release:        NetBSD 6.99.19
System: NetBSD twitty 6.99.19 NetBSD 6.99.19 (TWITTY) #1: Wed May 22 19:52:07 
CEST 2013 
Architecture: earm
Machine: evbarm
Trying to build the package devel/glib2 on an evbarm EABI system
results in the following error:

|   ld --eh-frame-hdr -X -m armelf_nbsd_eabi -dc -dp -e __start -dynamic-linker 
/usr/libexec/ld.elf_so -o .libs/gobject-query /usr/lib/crt0.o /usr/lib/crti.o 
-L/usr/pkgwrk/devel/glib2/work.twitty/.buildlink/lib -v -R/usr/pkg/lib 
gobject-query.o -rpath /usr/pkg/lib -lgobject-2.0 -lffi -lglib-2.0 -lpcre 
-lintl -lgcc -lpthread -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o
|  GNU ld (NetBSD Binutils nb1) 2.21.1
|  /usr/pkgwrk/devel/glib2/work.twitty/.buildlink/lib/ undefined 
reference to `__aeabi_unwind_cpp_pr1'

This is caused by libgcc.a not providing the unwind functions. Those are
only in libgcc_eh.a, but the compiler doesn't select it for linking.

The compiler (gcc4.5.4) doesn't select it for linking, because that's
not defined in the spec file. If you look at 'gcc -dumpsepcs' output
you only find:


The more interesting part however is, that the specs for x86_64 show
the same:


but somehow building glib2 does not fail for x86_64. The reason probably
is that the unwind functions for x86_64 exist in libgcc and libgcc_eh.

pussyfoot: {47} uname -a
NetBSD pussyfoot 6.99.19 NetBSD 6.99.19 (PUSSYFOOT) #1: Wed May  1 10:30:36 
CEST 2013  
pussyfoot: {44} nm /usr/lib/libgcc.a | grep Unwind_Backtrace
00000000000022ae T _Unwind_Backtrace
pussyfoot: {45} nm /usr/lib/libgcc_eh.a | grep Unwind_Backtrace
00000000000022ae T _Unwind_Backtrace

Looking at an older arch/amiga system with gcc4.1.3 you find that
libgcc and libgcc_eh are different, only libgcc_eh provides the
unwind functions.

serpens% uname -a
NetBSD 5.0_STABLE NetBSD 5.0_STABLE (SERPENS) #0: Sun Nov  1 
23:35:16 CET 2009  
spz@aquila:/home/netbsd/src5/src/sys/arch/amiga/compile/obj/SERPENS amiga
serpens% nm /usr/lib/libgcc.a | grep -i Unwind_Backtrace
serpens% nm /usr/lib/libgcc_eh.a | grep -i Unwind_Backtrace
00001644 T _Unwind_Backtrace

But here the specs tell the compiler what to do:

%{static: -lgcc -lgcc_eh}%{static-libgcc: %{!shared:-lgcc -lgcc_eh}%{shared:-lgc
c_pic -lgcc_eh_pic}}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc 
-lgcc_eh}%{shared-libgcc:-lgcc_s -lgcc}}%{shared:%{shared-libgcc:-lgcc_s} -lgcc_

It could be that gcc4.5.4 dropped the spec-file mechanics and requires
libgcc to include the unwind functions, then we build or libgcc wrong
for some archs.

Or what I find more likely is, that we build bad specs and libgcc
on x86_64 is built wrong to compensate.

Try to build devel/glib2 on an evbarm EABI system.


Home | Main Index | Thread Index | Old Index