diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 24d534b4d0d492828c8bd398991df8ee0ed4a7fc..c5426abd66c4829c6b3dfa09f3db3434fb0f4c5f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-16  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	PR target/18997
+	* config/i386/cygwin.h (GTHREAD_USE_WEAK): Define to 0.
+
 2004-12-16  Richard Henderson  <rth@redhat.com>
 	    Aldy Hernandez  <aldyh@redhat.com>
 
diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h
index def39f4d3f59d922f7105ac6eb79537c7533dc4d..96b4692d8214bfc1a7a9a951367f07b3780a98d7 100644
--- a/gcc/config/i386/cygwin.h
+++ b/gcc/config/i386/cygwin.h
@@ -228,3 +228,7 @@ do \
   } \
 while (0)
 #endif
+
+/* Binutils does not handle weak symbols from dlls correctly.  For now,
+   do not use them unnecessarily in gthr-posix.h.  */
+#define GTHREAD_USE_WEAK 0
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 17a134f81acd6bd690cd075a8c1a560bfaa89990..542a82f3137e5fe603519b5da855940c866aa1b9 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-16  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	PR target/18997
+	* config/os/newlib/os_defines.h (_GLIBCXX_GTHREAD_USE_WEAK):
+	Define to 0 for __CYGWIN__.
+
 2004-12-16  Paolo Carlini  <pcarlini@suse.de>
 
 	* include/tr1/type_traits: Implement add_const, add_volatile,
diff --git a/libstdc++-v3/config/os/newlib/os_defines.h b/libstdc++-v3/config/os/newlib/os_defines.h
index 3b19787929f84aa080c6b9bcf70da0a0ec9cf760..ff334610f226194a545fa36cbac3fad0b7a66a7c 100644
--- a/libstdc++-v3/config/os/newlib/os_defines.h
+++ b/libstdc++-v3/config/os/newlib/os_defines.h
@@ -33,4 +33,8 @@
 // System-specific #define, typedefs, corrections, etc, go here.  This
 // file will come before all others.
 
+#ifdef __CYGWIN__
+#define _GLIBCXX_GTHREAD_USE_WEAK 0
+#endif
+
 #endif