Changes for SPARC; we genuinely need libgcc on some arches

diff --git a/MCONFIG b/MCONFIG
index 9b884f1..7a24b82 100644
--- a/MCONFIG
+++ b/MCONFIG
@@ -59,8 +59,7 @@
 # Static library paths
 CRT0      = $(KLIBOBJ)/crt0.o
 KLIBC     = $(KLIBOBJ)/libc.a
-# Don't use libgcc for now, to see if anything breaks...
-LIBGCC    = # $(shell $(CC) --print-libgcc)
+LIBGCC    = $(shell $(CC) $(REQFLAGS) $(OPTFLAGS) --print-libgcc)
 
 # Shared library paths
 CRTSHARED = $(KLIBOBJ)/interp.o
diff --git a/klcc.in b/klcc.in
index bdd03e7..d8721c9 100644
--- a/klcc.in
+++ b/klcc.in
@@ -78,6 +78,11 @@
 }
 
 #
+# Initialization
+# 
+open(NULL, '+<', '/dev/null') or die "$0: cannot open /dev/null\n";
+
+#
 # Begin parsing options.
 #
 
@@ -191,10 +196,17 @@
 	}
     }
 
+    # Get the libgcc pathname for the *current* gcc
+    open(LIBGCC, '-|', $CC, @ccopt, '-print-libgcc-file-name')
+	or die "$0: cannot get libgcc filename\n";
+    $libgcc = <LIBGCC>;
+    chomp $libgcc;
+    close(LIBGCC);
+
     if ( $shared ) {
-	$rv = mysystem($LD, @LDFLAGS, @sharedopt, @ldopt, @outopt, @objs, @sharedlib);
+	$rv = mysystem($LD, @LDFLAGS, @sharedopt, @ldopt, @outopt, @objs, @sharedlib, $libgcc);
     } else {
-	$rv = mysystem($LD, @LDFLAGS, @staticopt, @ldopt, @outopt, @objs, @staticlib);
+	$rv = mysystem($LD, @LDFLAGS, @staticopt, @ldopt, @outopt, @objs, @staticlib, $libgcc);
     }
 
     unlink(@rmobjs);
diff --git a/klibc/arch/sparc/Makefile.inc b/klibc/arch/sparc/Makefile.inc
index 6ea6611..bea1dbc 100644
--- a/klibc/arch/sparc/Makefile.inc
+++ b/klibc/arch/sparc/Makefile.inc
@@ -16,7 +16,12 @@
 	arch/$(ARCH)/umul.o \
 	arch/$(ARCH)/setjmp.o \
 	arch/$(ARCH)/syscall.o \
-	arch/$(ARCH)/sysfork.o
+	arch/$(ARCH)/sysfork.o \
+	libgcc/__divdi3.o \
+	libgcc/__moddi3.o \
+	libgcc/__udivdi3.o \
+	libgcc/__umoddi3.o \
+	libgcc/__udivmoddi4.o
 
 arch/$(ARCH)/sdiv.S: arch/$(ARCH)/divrem.m4
 	@echo 'building $@ from $^'