diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 7023d8048a66c663f6e17732e7e36978b784edaa..be77ac293fdaab05195736b05b37ad15719b4e31 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-02-05  Roger Sayle  <roger@eyesopen.com>
+	    Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* Makefile.in <LIBUNWIND>: Make libgcc_s.so depend on libunwind.so.
+	(libgcc_s.so): Append -B./ to CFLAGS for $(SHLIB_LINK).
+	(libunwind.so): Likewise for $(SHLIBUNWIND_LINK).
+
 2007-01-29  Janis Johnson  <janis187@us.ibm.com>
 
 	* Makefile.in (dec-filenames): Add decExcept.
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index cb91cdaf756f36ab283eccb5a64f9a9938a64aed..80ab7e90fb7a87a8b6c1df105b13b331399b5f8d 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -591,6 +591,7 @@ all: libgcc.a libgcov.a
 
 ifneq ($(LIBUNWIND),)
 all: libunwind.a
+libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
 endif
 
 ifeq ($(enable_shared),yes)
@@ -622,7 +623,7 @@ libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts)
 	# @multilib_dir@ is not really necessary, but sometimes it has
 	# more uses than just a directory name.
 	$(mkinstalldirs) $(MULTIDIR)
-	$(subst @multilib_flags@,$(CFLAGS),$(subst \
+	$(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
 		@multilib_dir@,$(MULTIDIR),$(subst \
 		@shlib_objs@,$(objects),$(subst \
 		@shlib_base_name@,libgcc_s,$(subst \
@@ -635,7 +636,7 @@ libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
 	# @multilib_dir@ is not really necessary, but sometimes it has
 	# more uses than just a directory name.
 	$(mkinstalldirs) $(MULTIDIR)
-	$(subst @multilib_flags@,$(CFLAGS),$(subst \
+	$(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
 		@multilib_dir@,$(MULTIDIR),$(subst \
 		@shlib_objs@,$(objects),$(subst \
 		@shlib_base_name@,libunwind,$(subst \