--- linux/arch/sparc/kernel/sparc_ksyms.c.jj	Tue Jan  4 19:12:12 2000
+++ linux/arch/sparc/kernel/sparc_ksyms.c	Fri Feb  4 15:11:48 2000
@@ -65,6 +65,7 @@ extern void bcopy (const char *, char *,
 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(memmove);
 EXPORT_SYMBOL_NOVERS(__ashrdi3);
 EXPORT_SYMBOL_NOVERS(__ashldi3);
 EXPORT_SYMBOL_NOVERS(__lshrdi3);
+EXPORT_SYMBOL_NOVERS(__muldi3);
 
 EXPORT_SYMBOL_DOT(rem);
 EXPORT_SYMBOL_DOT(urem);
--- linux/arch/sparc/lib/muldi3.S.jj	Fri Feb  4 15:05:09 2000
+++ linux/arch/sparc/lib/muldi3.S	Fri Feb  4 15:04:21 2000
@@ -0,0 +1,64 @@
+/* $Id:$
+ * 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
--- linux/arch/sparc/lib/Makefile.jj	Tue Jan  4 19:12:13 2000
+++ linux/arch/sparc/lib/Makefile	Fri Feb  4 15:12:28 2000
@@ -6,7 +6,7 @@ OBJS  = mul.o rem.o sdiv.o udiv.o umul.o
         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 @@ endif
 
 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

