Subject: toolchain/22454: gcc3 alpha build problem
To: None <gnats-bugs@gnats.netbsd.org>
From: None <stephen@degler.net>
List: netbsd-bugs
Date: 08/12/2003 10:07:20
>Number:         22454
>Category:       toolchain
>Synopsis:       libgcc3 on alpha omits assembly objects
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    toolchain-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Aug 12 14:44:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Stephen Degler
>Release:        NetBSD 1.6W
>Organization:
	Very Little, At Best
>Environment:
	
	
System: NetBSD stand.degler.net 1.6W NetBSD 1.6W (STAND) #6: Sun Aug 3 00:21:07 EDT 2003 root@stand.degler.net:/vol1/NetBSD/kernels/STAND alpha
Architecture: alpha
Machine: alpha
>Description:

The reach over Makefile for libgcc3 only selects .c files and omits
assembly files.  Furthermore, the gcc distribution includes the
assembly files with an ".asm" extension, for which NetBSD provides no
implicit rules.  My fix includes a copy of the .asm file to a ".S" file,
which is then handled properly by the default make rules.

>How-To-Repeat:
	build netbsd -current on alpha and then try to build perl5.
	observe the symbols missing from libgcc.

% pwd
/usr/pkgsrc/lang/perl5
% make
===> Building for perl-5.6.1nb7
        AutoSplitting perl library
LD_LIBRARY_PATH=/usr/pkgsrc/lang/perl5/work/perl-5.6.1 ./miniperl -Ilib -e
'use AutoSplit;  autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm

        Making DynaLoader (static)
LD_LIBRARY_PATH=/usr/pkgsrc/lang/perl5/work/perl-5.6.1 cc -o perl
-Wl,-R/usr/pkg/lib  -L/usr/pkg/lib -Wl,-whole-archive -lgcc
-Wl,-no-whole-archive                     -Wl,-E -Wl,-R/usr/pkg/lib
-Wl,-R/usr/pkg/lib/perl5/5.6.1/alpha-netbsd/CORE perlmain.o
lib/auto/DynaLoader/DynaLoader.a  -L. -lperl `cat ext.libs` -lm -lcrypt
/usr/lib/libgcc.a(_udivmoddi4.o): In function `__udivmodti4':
_udivmoddi4.o(.text+0x74): undefined reference to `__udiv_qrnnd'
_udivmoddi4.o(.text+0x84): undefined reference to `__udiv_qrnnd'
_udivmoddi4.o(.text+0x9c): undefined reference to `__udiv_qrnnd'
_udivmoddi4.o(.text+0xb0): undefined reference to `__udiv_qrnnd'
_udivmoddi4.o(.text+0x114): undefined reference to `__udiv_qrnnd'
/usr/lib/libgcc.a(_udivmoddi4.o)(.text+0x120): more undefined references to
`__udiv_qrnnd' follow
*** Error code 1

>Fix:
This patch, while ugly, seems to work fine.

Index: gnu/lib/libgcc3/Makefile
===================================================================
RCS file: /cvsroot/src/gnu/lib/libgcc3/Makefile,v
retrieving revision 1.8
diff -u -r1.8 Makefile
--- gnu/lib/libgcc3/Makefile	2003/08/01 17:03:43	1.8
+++ gnu/lib/libgcc3/Makefile	2003/08/04 13:36:20
@@ -26,7 +26,7 @@
 LIB2DIVMOD=	${G_LIB2_DIVMOD_FUNCS:=.c}
 LIB2_EH=	${G_LIB2ADDEH:M*.c:T}
 
-SRCS+=		${LIB2FUNCS} ${LIB2DIVMOD} ${LIB2_EH} ${G_LIB2ADD:M*.c:T}
+SRCS+=		${LIB2FUNCS} ${LIB2DIVMOD} ${LIB2_EH} ${G_LIB2ADD:T:S/.asm/.S/}
 
 DPSRCS+=	${.CURDIR}/${MACHINE_ARCH}.mk tconfig.h
 CLEANFILES+=	${LIB2FUNCS} tconfig.h
@@ -36,6 +36,15 @@
 
 ${LIB2DIVMOD}: ${.CURDIR}/Makefile
 	printf '#define L${.PREFIX}\n#include <libgcc2.c>\n' >${.TARGET}
+
+${G_LIB2ADD:T:S/.asm/.S/}: ${.CURDIR}/Makefile ${G_LIB2ADD}
+	@echo copying ${G_LIB2ADD}
+	for i in ${G_LIB2ADD} ; do \
+	  j=$${i##*/} ; \
+	  j=`echo $$j | sed 's/\.asm$$/\.S/'` ; \
+	  cp $$i $$j ; \
+	done 
+	@echo copying ${G_LIB2ADD} complete
 
 # XXX
 .if ${MACHINE_ARCH} == "m68000"

>Release-Note:
>Audit-Trail:
>Unformatted: