Index: oldkernel/linux/arch/sparc/kernel/sparc_ksyms.c
diff -u linux/arch/sparc/kernel/sparc_ksyms.c:1.1.1.1 linux/arch/sparc/kernel/sparc_ksyms.c:1.2
--- linux/arch/sparc/kernel/sparc_ksyms.c:1.1.1.1	Wed May 31 12:33:53 2000
+++ linux/arch/sparc/kernel/sparc_ksyms.c	Thu Jun  1 15:12:09 2000
@@ -65,6 +65,7 @@
 extern int __ashrdi3(int, int);
 extern int __ashldi3(int, int);
 extern int __lshrdi3(int, int);
+extern int __muldi3(int, int);
 
 extern void dump_thread(struct pt_regs *, struct user *);
 
@@ -272,6 +273,7 @@
 EXPORT_SYMBOL_NOVERS(__ashrdi3);
 EXPORT_SYMBOL_NOVERS(__ashldi3);
 EXPORT_SYMBOL_NOVERS(__lshrdi3);
+EXPORT_SYMBOL_NOVERS(__muldi3);
 
 EXPORT_SYMBOL_DOT(rem);
 EXPORT_SYMBOL_DOT(urem);
Index: oldkernel/linux/arch/sparc/lib/Makefile
diff -u linux/arch/sparc/lib/Makefile:1.1.1.1 linux/arch/sparc/lib/Makefile:1.2
--- linux/arch/sparc/lib/Makefile:1.1.1.1	Wed May 31 12:33:53 2000
+++ linux/arch/sparc/lib/Makefile	Thu Jun  1 15:12:09 2000
@@ -6,7 +6,7 @@
         strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \
 	strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
 	copy_user.o locks.o atomic.o bitops.o debuglocks.o lshrdi3.o \
-	ashldi3.o
+	ashldi3.o muldi3.o
 
 ifdef CONFIG_SMP
 OBJS += irqlock.o
@@ -62,6 +62,9 @@
 
 strlen.o: strlen.S
 	$(CC) -D__ASSEMBLY__ -ansi -c -o strlen.o strlen.S
+
+muldi3.o: muldi3.S
+	$(CC) -D__ASSEMBLY__ -ansi -c -o muldi3.o muldi3.S
 
 divdi3.o: divdi3.S
 	$(CC) -D__ASSEMBLY__ -ansi -c -o divdi3.o divdi3.S
Index: oldkernel/linux/arch/sparc/lib/muldi3.S
diff -u /dev/null linux/arch/sparc/lib/muldi3.S:1.1
--- /dev/null	Mon Jul 31 21:12:40 2000
+++ linux/arch/sparc/lib/muldi3.S	Thu Jun  1 15:12:09 2000
@@ -0,0 +1,64 @@
+/* $Id: muldi3.S,v 1.1 2000/06/01 22:12:09 ccr Exp $
+ * muldi3.S:   GCC emits these for certain drivers playing
+ *	       with long longs.
+ *
+ * Copyright (C) 2000 Jakub Jelinek (jakub@redhat.com)
+ */
+
+	.text
+	.align		4
+	.globl		__muldi3
+
+__muldi3:
+	save		%sp, -112, %sp
+	wr		%g0, %i1, %y
+	sra		%i3, 0x1f, %o5
+	and		%i1, %o5, %o5
+	andcc		%g0, 0, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, %i3, %g1
+	mulscc		%g1, 0, %g1
+	add		%g1, %o5, %l0
+	rd		%y, %o0
+	mov		%o0, %l1
+	mov		%i2, %o1
+	call		.umul
+	 mov		%i1, %o0
+	mov		%o0, %l2
+	mov		%i0, %o0
+	call		.umul
+	 mov		%i3, %o1
+	add		%l2, %o0, %l2
+	mov		%l1, %i1
+	ret 
+	 restore	%l0, %l2, %o0
