diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9df927a19b231603f188fd8a8c0b915abeb1e9c1..7e12cc5d6dc55a6eb807cd8591b1db4e7a022c18 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+Tue Aug 24 22:41:06 1999  Mumit Khan  <khan@xraylith.wisc.edu>
+
+	* fixinc/mkfixinc.sh: Don't fix uwin headers.
+	* i386/uwin.h (MD_STARTFILE_PREFIX): Define.
+	(LINK_SPEC): Add -u _main when building executables.
+	(ASM_DECLARE_FUNCTION): Update from Cygwin.
+	(ASM_FILE_END): Use the default for ix86-pe.
+	* i386/xm-uwin.h (HAVE_BCOPY): Undefine.
+
 Tue Aug 24 20:49:47 1999  Art Haas  <ahaas@neosoft.com>
 
 	* final.c (output_addr_const): Handle case where ASM_OPEN_PAREN
diff --git a/gcc/config/i386/uwin.h b/gcc/config/i386/uwin.h
index 73e04add2e9759c6373e49c432b3187a71463741..29a3f982dd4edf6ad20ffe2db47b43aa061efb19 100644
--- a/gcc/config/i386/uwin.h
+++ b/gcc/config/i386/uwin.h
@@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA. */
 
 #define STANDARD_INCLUDE_COMPONENT "UWIN"
 #define SYSTEM_INCLUDE_DIR "/usr/gnu/include"
+#define MD_STARTFILE_PREFIX "/usr/gnu/lib/"
 
 #undef CPP_PREDEFINES
 #define CPP_PREDEFINES "-D__i386__ -D_WIN32 -D__WIN32__ \
@@ -62,25 +63,24 @@ Boston, MA 02111-1307, USA. */
 /* Specify a different entry point when linking a DLL */
 #undef LINK_SPEC
 #define LINK_SPEC \
-  "%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMainCRTStartup@12}"
+  "%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMainCRTStartup@12} \
+  %{!mdll:-u _main}"
 
 #undef STARTFILE_SPEC
 #define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s}"
 
 /* These are PE BFD bug workarounds. Should go away eventually. */
 
+/* Write the extra assembler code needed to declare a function
+   properly.  If we are generating SDB debugging information, this
+   will happen automatically, so we only need to handle other cases.  */
 #undef ASM_DECLARE_FUNCTION_NAME
 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)			\
   do									\
     {									\
       if (i386_pe_dllexport_name_p (NAME))				\
-	{								\
-	  drectve_section ();						\
-	  fprintf ((FILE), "\t.ascii \" -export:%s\"\n", 		\
-		   I386_PE_STRIP_ENCODING (NAME));			\
-	  function_section (DECL);					\
-	}								\
-      /* disable i386_pe_declare_function_type for UWIN */		\
+	i386_pe_record_exported_symbol (NAME);				\
+      /* UWIN binutils bug workaround. */				\
       if (0 && write_symbols != SDB_DEBUG)				\
 	i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL));	\
       ASM_OUTPUT_LABEL (FILE, NAME);					\
@@ -89,5 +89,4 @@ Boston, MA 02111-1307, USA. */
 
 #undef ASM_OUTPUT_EXTERNAL
 #undef ASM_OUTPUT_EXTERNAL_LIBCALL
-#undef ASM_FILE_END
 
diff --git a/gcc/config/i386/xm-uwin.h b/gcc/config/i386/xm-uwin.h
index 2e1ecde0fa7256e7ed7df65a56e33153c853d79e..4f0ad4c5a63d41add9f7eac18716d819cac5e0a3 100644
--- a/gcc/config/i386/xm-uwin.h
+++ b/gcc/config/i386/xm-uwin.h
@@ -37,3 +37,7 @@ Boston, MA 02111-1307, USA. */
 #undef PATH_SEPARATOR
 #define PATH_SEPARATOR ':'
 
+/* U/WIN 2.0b[3-5] bcopy was implemented using memcpy, which breaks the
+   C++ front end, so don't use it. */
+#undef HAVE_BCOPY
+
diff --git a/gcc/fixinc/mkfixinc.sh b/gcc/fixinc/mkfixinc.sh
index 98174c59a54350caeb91d62fed0d1fe20627ef9b..10bd27fe9a2ab58d34210ccb1965c045fc08131b 100755
--- a/gcc/fixinc/mkfixinc.sh
+++ b/gcc/fixinc/mkfixinc.sh
@@ -80,6 +80,7 @@ case $machine in
 	i[34567]86-*-win32 | \
 	i[34567]86-*-pe | i[34567]86-*-cygwin* | \
 	i[34567]86-*-mingw32* | \
+	i[34567]86-*-uwin* | \
 	mips-sgi-irix5cross64 | \
 	powerpc-*-eabiaix* | \
 	powerpc-*-eabisim* | \