changeset 5:6b8e05507b18

Windowsy updates (new binutils, gcc, and a fix to elfload).
author Gregor Richards <Richards@codu.org>
date Sun, 13 Dec 2009 19:28:20 -0500
parents 54ff11eb9191
children c8c435a06d13
files diffs/binutils-2.19-winelf.diff diffs/binutils-2.20-winelf.diff diffs/gcc-4.4.1-winelf.diff diffs/gcc-4.4.2-winelf.diff diffs/old/binutils-2.19-winelf.diff diffs/old/gcc-4.4.1-winelf.diff elfload/src/main.c
diffstat 7 files changed, 842 insertions(+), 419 deletions(-) [+]
line wrap: on
line diff
--- a/diffs/binutils-2.19-winelf.diff	Sun Dec 13 18:04:50 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-diff -r 32aece6b841a -r 2766f4462a7e bfd/config.bfd
---- a/bfd/config.bfd	Thu Jul 23 13:16:34 2009 -0400
-+++ b/bfd/config.bfd	Thu Jul 23 13:17:20 2009 -0400
-@@ -479,7 +479,8 @@
-     ;;
-   i[3-7]86-*-sysv4* | i[3-7]86-*-unixware* | \
-   i[3-7]86-*-elf | i[3-7]86-*-sco3.2v5* | \
--  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5*)
-+  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5* | \
-+  i[3-7]86-*-win32elf*)
-     targ_defvec=bfd_elf32_i386_vec
-     targ_selvecs=i386coff_vec
-     ;;
-diff -r 32aece6b841a -r 2766f4462a7e config.sub
---- a/config.sub	Thu Jul 23 13:16:34 2009 -0400
-+++ b/config.sub	Thu Jul 23 13:17:20 2009 -0400
-@@ -1257,7 +1257,7 @@
- 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- 	      | -chorusos* | -chorusrdb* \
--	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
- 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- 	      | -uxpv* | -beos* | -mpeix* | -udk* \
- 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-diff -r 32aece6b841a -r 2766f4462a7e gas/configure.tgt
---- a/gas/configure.tgt	Thu Jul 23 13:16:34 2009 -0400
-+++ b/gas/configure.tgt	Thu Jul 23 13:17:20 2009 -0400
-@@ -225,6 +225,7 @@
-       x86_64*)				fmt=coff em=pep ;;
-       i*)				fmt=coff em=pe ;;
-     esac ;;
-+  i386-*-win32elf*)			fmt=elf ;;
-   i386-*-nto-qnx*)			fmt=elf ;;
-   i386-*-*nt*)				fmt=coff em=pe ;;
-   i386-*-chaos)				fmt=elf ;;
-diff -r 32aece6b841a -r 2766f4462a7e ld/configure.tgt
---- a/ld/configure.tgt	Thu Jul 23 13:16:34 2009 -0400
-+++ b/ld/configure.tgt	Thu Jul 23 13:17:20 2009 -0400
-@@ -272,6 +272,7 @@
- 			targ_extra_ofiles="deffilep.o pep-dll.o" ;;
- i[3-7]86-*-interix*)	targ_emul=i386pe_posix;
-  			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
-+i[3-7]86-*-win32elf*)   targ_emul=elf_i386 ;;
- i[3-7]86-*-beospe*)	targ_emul=i386beos ;;
- i[3-7]86-*-beos*)	targ_emul=elf_i386_be ;;
- i[3-7]86-*-vxworks*)	targ_emul=elf_i386_vxworks ;;
-diff -r 32aece6b841a -r 2766f4462a7e libiberty/configure
---- a/libiberty/configure	Thu Jul 23 13:16:34 2009 -0400
-+++ b/libiberty/configure	Thu Jul 23 13:17:20 2009 -0400
-@@ -6044,7 +6044,7 @@
- 
- 
- case "${host}" in
--  *-*-cygwin* | *-*-mingw*)
-+  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
-     cat >>confdefs.h <<\_ACEOF
- #define HAVE_SYS_ERRLIST 1
- _ACEOF
-@@ -6228,7 +6228,7 @@
-     fi
-     ;;
- 
--  *-*-mingw32*)
-+  *-*-mingw32* | *-*-win32elf*)
-     # Under mingw32, sys_nerr and sys_errlist exist, but they are
-     # macros, so the test below won't find them.
-     libiberty_cv_var_sys_nerr=yes
-@@ -8549,7 +8549,7 @@
- 
- # Figure out which version of pexecute to use.
- case "${host}" in
--     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-+     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
-      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-      *)				pexecute=./pex-unix.o   ;;
-diff -r 32aece6b841a -r 2766f4462a7e libiberty/configure.ac
---- a/libiberty/configure.ac	Thu Jul 23 13:16:34 2009 -0400
-+++ b/libiberty/configure.ac	Thu Jul 23 13:17:20 2009 -0400
-@@ -501,7 +501,7 @@
- AC_SUBST(target_header_dir)
- 
- case "${host}" in
--  *-*-cygwin* | *-*-mingw*)
-+  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
-     AC_DEFINE(HAVE_SYS_ERRLIST)
-     AC_DEFINE(HAVE_SYS_NERR)
-     ;;
-@@ -593,7 +593,7 @@
-     fi
-     ;;
- 
--  *-*-mingw32*)
-+  *-*-mingw32* | *-*-win32elf*)
-     # Under mingw32, sys_nerr and sys_errlist exist, but they are
-     # macros, so the test below won't find them.
-     libiberty_cv_var_sys_nerr=yes
-@@ -678,7 +678,7 @@
- 
- # Figure out which version of pexecute to use.
- case "${host}" in
--     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-+     *-*-mingw* | *-*-winnt* | *-*-win32elf)	pexecute=./pex-win32.o  ;;
-      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-      *)				pexecute=./pex-unix.o   ;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/diffs/binutils-2.20-winelf.diff	Sun Dec 13 19:28:20 2009 -0500
@@ -0,0 +1,107 @@
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 bfd/config.bfd
+--- a/bfd/config.bfd	Sun Dec 13 19:02:47 2009 -0500
++++ b/bfd/config.bfd	Sun Dec 13 19:04:31 2009 -0500
+@@ -494,7 +494,8 @@
+     ;;
+   i[3-7]86-*-sysv4* | i[3-7]86-*-unixware* | \
+   i[3-7]86-*-elf | i[3-7]86-*-sco3.2v5* | \
+-  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5*)
++  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5* | \
++  i[3-7]86-*-win32elf*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs=i386coff_vec
+     ;;
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 config.sub
+--- a/config.sub	Sun Dec 13 19:02:47 2009 -0500
++++ b/config.sub	Sun Dec 13 19:04:31 2009 -0500
+@@ -1284,7 +1284,7 @@
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* | -cegcc* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
+ 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 gas/configure.tgt
+--- a/gas/configure.tgt	Sun Dec 13 19:02:47 2009 -0500
++++ b/gas/configure.tgt	Sun Dec 13 19:04:31 2009 -0500
+@@ -231,6 +231,7 @@
+       x86_64*)				fmt=coff em=pep ;;
+       i*)				fmt=coff em=pe ;;
+     esac ;;
++  i386-*-win32elf*)			fmt=elf ;;
+   i386-*-nto-qnx*)			fmt=elf ;;
+   i386-*-*nt*)				fmt=coff em=pe ;;
+   i386-*-chaos)				fmt=elf ;;
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 ld/configure.tgt
+--- a/ld/configure.tgt	Sun Dec 13 19:02:47 2009 -0500
++++ b/ld/configure.tgt	Sun Dec 13 19:04:31 2009 -0500
+@@ -277,6 +277,7 @@
+ 			targ_extra_ofiles="deffilep.o pep-dll.o" ;;
+ i[3-7]86-*-interix*)	targ_emul=i386pe_posix;
+  			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
++i[3-7]86-*-win32elf*)   targ_emul=elf_i386 ;;
+ i[3-7]86-*-beospe*)	targ_emul=i386beos ;;
+ i[3-7]86-*-beos*)	targ_emul=elf_i386_be ;;
+ i[3-7]86-*-vxworks*)	targ_emul=elf_i386_vxworks ;;
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 libiberty/configure
+--- a/libiberty/configure	Sun Dec 13 19:02:47 2009 -0500
++++ b/libiberty/configure	Sun Dec 13 19:04:31 2009 -0500
+@@ -5642,7 +5642,7 @@
+ 
+ 
+ case "${host}" in
+-  *-*-cygwin* | *-*-mingw*)
++  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
+     $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
+ 
+     $as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h
+@@ -5750,7 +5750,7 @@
+ 
+   case "${host}" in
+ 
+-  *-*-mingw32*)
++  *-*-mingw32* | *-*-win32elf*)
+     # Under mingw32, sys_nerr and sys_errlist exist, but they are
+     # macros, so the test below won't find them.
+     libiberty_cv_var_sys_nerr=yes
+@@ -6476,7 +6476,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r 2c502f8f90f4 -r 1e51c3a535f6 libiberty/configure.ac
+--- a/libiberty/configure.ac	Sun Dec 13 19:02:47 2009 -0500
++++ b/libiberty/configure.ac	Sun Dec 13 19:04:31 2009 -0500
+@@ -526,7 +526,7 @@
+ AC_SUBST(target_header_dir)
+ 
+ case "${host}" in
+-  *-*-cygwin* | *-*-mingw*)
++  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
+     AC_DEFINE(HAVE_SYS_ERRLIST)
+     AC_DEFINE(HAVE_SYS_NERR)
+     ;;
+@@ -578,7 +578,7 @@
+ 
+   case "${host}" in
+ 
+-  *-*-mingw32*)
++  *-*-mingw32* | *-*-win32elf*)
+     # Under mingw32, sys_nerr and sys_errlist exist, but they are
+     # macros, so the test below won't find them.
+     libiberty_cv_var_sys_nerr=yes
+@@ -663,7 +663,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
--- a/diffs/gcc-4.4.1-winelf.diff	Sun Dec 13 18:04:50 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,312 +0,0 @@
-diff -r bcdd72403803 -r 0f30e52c9d37 config.sub
---- a/config.sub	Thu Jul 23 13:29:57 2009 -0400
-+++ b/config.sub	Fri Jul 24 21:07:13 2009 -0400
-@@ -1267,7 +1267,7 @@
- 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- 	      | -chorusos* | -chorusrdb* | -cegcc* \
--	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
- 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- 	      | -uxpv* | -beos* | -mpeix* | -udk* \
- 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/configure
---- a/fixincludes/configure	Thu Jul 23 13:29:57 2009 -0400
-+++ b/fixincludes/configure	Fri Jul 24 21:07:13 2009 -0400
-@@ -3295,6 +3295,7 @@
-   case $host in
- 	i?86-*-msdosdjgpp* | \
- 	i?86-*-mingw32* | \
-+        i?86-*-win32elf* | \
- 	x86_64-*-mingw32* | \
- 	*-*-beos* )
- 		TARGET=twoprocess
-diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/configure.ac
---- a/fixincludes/configure.ac	Thu Jul 23 13:29:57 2009 -0400
-+++ b/fixincludes/configure.ac	Fri Jul 24 21:07:13 2009 -0400
-@@ -51,6 +51,7 @@
- [case $host in
- 	i?86-*-msdosdjgpp* | \
- 	i?86-*-mingw32* | \
-+        i?86-*-win32elf* | \
- 	x86_64-*-mingw32* | \
- 	*-*-beos* )
- 		TARGET=twoprocess
-diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/mkfixinc.sh
---- a/fixincludes/mkfixinc.sh	Thu Jul 23 13:29:57 2009 -0400
-+++ b/fixincludes/mkfixinc.sh	Fri Jul 24 21:07:13 2009 -0400
-@@ -16,6 +16,7 @@
-     i?86-*-pe | \
-     i?86-*-cygwin* | \
-     i?86-*-mingw32* | \
-+    i?86-*-win32elf* | \
-     x86_64-*-mingw32* | \
-     i?86-*-interix* | \
-     *-*-vxworks* | \
-diff -r bcdd72403803 -r 0f30e52c9d37 gcc/config.gcc
---- a/gcc/config.gcc	Thu Jul 23 13:29:57 2009 -0400
-+++ b/gcc/config.gcc	Fri Jul 24 21:07:13 2009 -0400
-@@ -1296,6 +1296,11 @@
- 			;;
- 	esac
- 	;;
-+i[34567]86-*-win32elf*)
-+	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/win32elf.h"
-+	tmake_file="i386/t-i386elf t-svr4"
-+	use_fixproto=yes
-+	;;
- i[34567]86-*-interix3*)
- 	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h"
- 	tmake_file="${tmake_file} i386/t-interix"
-diff -r bcdd72403803 -r 0f30e52c9d37 gcc/config/i386/win32elf.h
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/gcc/config/i386/win32elf.h	Fri Jul 24 21:07:13 2009 -0400
-@@ -0,0 +1,152 @@
-+/* Target definitions for GCC for Intel 80386 using ELF
-+   Copyright (C) 1988, 1991, 1995, 2000, 2001, 2002
-+   Free Software Foundation, Inc.
-+
-+   Derived from i386elf.h and mingw32.h
-+   i386elf.h was derived from sysv4.h written by Ron Guilmette (rfg@netcom.com).
-+
-+This file is part of GCC.
-+
-+GCC is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 2, or (at your option)
-+any later version.
-+
-+GCC is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with GCC; see the file COPYING.  If not, write to
-+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-+Boston, MA 02110-1301, USA.  */
-+
-+/* Use stabs instead of DWARF debug format.  */
-+#undef  PREFERRED_DEBUGGING_TYPE
-+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+#define TARGET_VERSION fprintf (stderr, " (x86 Win32 ELF)");
-+
-+/* See i386/crtdll.h for an alternative definition.  */
-+#define TARGET_OS_CPP_BUILTINS()				\
-+  do								\
-+    {								\
-+      builtin_define ("__MSVCRT__");				\
-+      builtin_define ("__MINGW32__");			   	\
-+      builtin_define ("_WIN32");				\
-+      builtin_define ("__WIN32");				\
-+      builtin_define ("__WINELF__");				\
-+      builtin_define_std ("WIN32");				\
-+      builtin_define_std ("WINNT");				\
-+    }								\
-+  while (0)
-+
-+/* By default, target has a 80387, uses IEEE compatible arithmetic,
-+   and returns float values in the 387.  */
-+
-+#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)
-+
-+/* The ELF ABI for the i386 says that records and unions are returned
-+   in memory.  */
-+
-+#undef RETURN_IN_MEMORY
-+#define RETURN_IN_MEMORY(TYPE) \
-+  (TYPE_MODE (TYPE) == BLKmode \
-+   || (VECTOR_MODE_P (TYPE_MODE (TYPE)) && int_size_in_bytes (TYPE) == 8))
-+
-+#undef CPP_SPEC
-+#define CPP_SPEC ""
-+
-+#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
-+
-+#define STARTFILE_SPEC "%{!shared: \
-+			 %{!symbolic: \
-+			  %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
-+                         crt1.o%s \
-+                          }} \
-+                        crti.o%s \
-+			crtbegin.o%s"
-+
-+#define LINK_SPEC "%{shared:-shared}"
-+
-+#undef DBX_REGISTER_NUMBER
-+#define DBX_REGISTER_NUMBER(n) \
-+  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
-+
-+/* The routine used to output sequences of byte values.  We use a special
-+   version of this for most svr4 targets because doing so makes the
-+   generated assembly code more compact (and thus faster to assemble)
-+   as well as more readable.  Note that if we find subparts of the
-+   character sequence which end with NUL (and which are shorter than
-+   STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING.  */
-+
-+#undef ASM_OUTPUT_ASCII
-+#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH)				\
-+  do									\
-+    {									\
-+      const unsigned char *_ascii_bytes =				\
-+        (const unsigned char *) (STR);					\
-+      const unsigned char *limit = _ascii_bytes + (LENGTH);		\
-+      unsigned bytes_in_chunk = 0;					\
-+      for (; _ascii_bytes < limit; _ascii_bytes++)			\
-+        {								\
-+	  const unsigned char *p;					\
-+	  if (bytes_in_chunk >= 64)					\
-+	    {								\
-+	      fputc ('\n', (FILE));					\
-+	      bytes_in_chunk = 0;					\
-+	    }								\
-+	  for (p = _ascii_bytes; p < limit && *p != '\0'; p++)		\
-+	    continue;							\
-+	  if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT)	\
-+	    {								\
-+	      if (bytes_in_chunk > 0)					\
-+		{							\
-+		  fputc ('\n', (FILE));					\
-+		  bytes_in_chunk = 0;					\
-+		}							\
-+	      ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes);		\
-+	      _ascii_bytes = p;						\
-+	    }								\
-+	  else								\
-+	    {								\
-+	      if (bytes_in_chunk == 0)					\
-+		fprintf ((FILE), "\t.byte\t");				\
-+	      else							\
-+		fputc (',', (FILE));					\
-+	      fprintf ((FILE), "0x%02x", *_ascii_bytes);		\
-+	      bytes_in_chunk += 5;					\
-+	    }								\
-+	}								\
-+      if (bytes_in_chunk > 0)						\
-+        fprintf ((FILE), "\n");						\
-+    }									\
-+  while (0)
-+
-+#define LOCAL_LABEL_PREFIX	"."
-+
-+/* Switch into a generic section.  */
-+#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
-+
-+/* If defined, a C expression whose value is a string containing the
-+   assembler operation to identify the following data as
-+   uninitialized global data.  If not defined, and neither
-+   `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
-+   uninitialized global data will be output in the data section if
-+   `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
-+   used.  */
-+#undef BSS_SECTION_ASM_OP
-+#define BSS_SECTION_ASM_OP "\t.section\t.bss"
-+
-+/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
-+   separate, explicit argument.  If you define this macro, it is used
-+   in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
-+   handling the required alignment of the variable.  The alignment is
-+   specified as the number of bits.
-+
-+   Try to use function `asm_output_aligned_bss' defined in file
-+   `varasm.c' when defining this macro.  */
-+#undef ASM_OUTPUT_ALIGNED_BSS
-+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
-+  asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-diff -r bcdd72403803 -r 0f30e52c9d37 gcc/libgcc2.c
---- a/gcc/libgcc2.c	Thu Jul 23 13:29:57 2009 -0400
-+++ b/gcc/libgcc2.c	Fri Jul 24 21:07:13 2009 -0400
-@@ -2048,7 +2048,7 @@
- 
- /* Jump to a trampoline, loading the static chain address.  */
- 
--#if defined(WINNT) && ! defined(__CYGWIN__)
-+#if defined(WINNT) && ! defined(__CYGWIN__) && ! defined(__WINELF__)
- 
- int
- getpagesize (void)
-diff -r bcdd72403803 -r 0f30e52c9d37 libgcc/config.host
---- a/libgcc/config.host	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libgcc/config.host	Fri Jul 24 21:07:13 2009 -0400
-@@ -337,7 +337,7 @@
- 	extra_parts="crtbegin.o crtend.o crtfastmath.o"
- 	tmake_file="i386/t-cygming i386/t-crtfm"
- 	;;
--x86_64-*-mingw*)
-+x86_64-*-mingw* | i[34567]86-*-win32elf*)
- 	;;
- i[34567]86-*-interix3*)
- 	;;
-diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/configure
---- a/libiberty/configure	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libiberty/configure	Fri Jul 24 21:07:13 2009 -0400
-@@ -8884,7 +8884,7 @@
- 
- # Figure out which version of pexecute to use.
- case "${host}" in
--     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-+     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
-      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-      *)				pexecute=./pex-unix.o   ;;
-diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/configure.ac
---- a/libiberty/configure.ac	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libiberty/configure.ac	Fri Jul 24 21:07:13 2009 -0400
-@@ -656,7 +656,7 @@
- 
- # Figure out which version of pexecute to use.
- case "${host}" in
--     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
-+     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
-      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
-      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
-      *)				pexecute=./pex-unix.o   ;;
-diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/getpwd.c
---- a/libiberty/getpwd.c	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libiberty/getpwd.c	Fri Jul 24 21:07:13 2009 -0400
-@@ -107,7 +107,7 @@
- 
- #else	/* VMS || _WIN32 && !__CYGWIN__ */
- 
--#ifndef MAXPATHLEN
-+#if !defined(MAXPATHLEN) || defined(__WINELF__)
- #define MAXPATHLEN 255
- #endif
- 
-diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/configure
---- a/libstdc++-v3/configure	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libstdc++-v3/configure	Fri Jul 24 21:07:13 2009 -0400
-@@ -95045,7 +95045,7 @@
-   fi
- 
-     ;;
--  *-mingw32*)
-+  *-mingw32* | *-win32elf*)
- 
-   # If we're not using GNU ld, then there's no point in even trying these
-   # tests.  Check for that first.  We should have already tested for gld
-diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/configure.host
---- a/libstdc++-v3/configure.host	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libstdc++-v3/configure.host	Fri Jul 24 21:07:13 2009 -0400
-@@ -251,7 +251,7 @@
-     atomicity_dir=os/irix
-     atomic_word_dir=os/irix
-     ;;
--  mingw32*)
-+  mingw32* | win32elf*)
-     os_include_dir="os/mingw32"
-     error_constants_dir="os/mingw32"
-     ;;
-diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/crossconfig.m4
---- a/libstdc++-v3/crossconfig.m4	Thu Jul 23 13:29:57 2009 -0400
-+++ b/libstdc++-v3/crossconfig.m4	Fri Jul 24 21:07:13 2009 -0400
-@@ -140,7 +140,7 @@
-     GCC_CHECK_TLS
-     AM_ICONV
-     ;;
--  *-mingw32*)
-+  *-mingw32* | *-win32elf*)
-     GLIBCXX_CHECK_LINKER_FEATURES
-     GLIBCXX_CHECK_MATH_SUPPORT
-     GLIBCXX_CHECK_STDLIB_SUPPORT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/diffs/gcc-4.4.2-winelf.diff	Sun Dec 13 19:28:20 2009 -0500
@@ -0,0 +1,312 @@
+diff -r f71f8978fa66 -r 3db5785d2252 config.sub
+--- a/config.sub	Sun Dec 13 19:19:48 2009 -0500
++++ b/config.sub	Sun Dec 13 19:20:43 2009 -0500
+@@ -1267,7 +1267,7 @@
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* | -cegcc* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
+ 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+diff -r f71f8978fa66 -r 3db5785d2252 fixincludes/configure
+--- a/fixincludes/configure	Sun Dec 13 19:19:48 2009 -0500
++++ b/fixincludes/configure	Sun Dec 13 19:20:43 2009 -0500
+@@ -3295,6 +3295,7 @@
+   case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
++        i?86-*-win32elf* | \
+ 	x86_64-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+diff -r f71f8978fa66 -r 3db5785d2252 fixincludes/configure.ac
+--- a/fixincludes/configure.ac	Sun Dec 13 19:19:48 2009 -0500
++++ b/fixincludes/configure.ac	Sun Dec 13 19:20:43 2009 -0500
+@@ -51,6 +51,7 @@
+ [case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
++        i?86-*-win32elf* | \
+ 	x86_64-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+diff -r f71f8978fa66 -r 3db5785d2252 fixincludes/mkfixinc.sh
+--- a/fixincludes/mkfixinc.sh	Sun Dec 13 19:19:48 2009 -0500
++++ b/fixincludes/mkfixinc.sh	Sun Dec 13 19:20:43 2009 -0500
+@@ -16,6 +16,7 @@
+     i?86-*-pe | \
+     i?86-*-cygwin* | \
+     i?86-*-mingw32* | \
++    i?86-*-win32elf* | \
+     x86_64-*-mingw32* | \
+     i?86-*-interix* | \
+     *-*-vxworks* | \
+diff -r f71f8978fa66 -r 3db5785d2252 gcc/config.gcc
+--- a/gcc/config.gcc	Sun Dec 13 19:19:48 2009 -0500
++++ b/gcc/config.gcc	Sun Dec 13 19:20:43 2009 -0500
+@@ -1303,6 +1303,11 @@
+ 			;;
+ 	esac
+ 	;;
++i[34567]86-*-win32elf*)
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/win32elf.h"
++	tmake_file="i386/t-i386elf t-svr4"
++	use_fixproto=yes
++	;;
+ i[34567]86-*-interix3*)
+ 	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h"
+ 	tmake_file="${tmake_file} i386/t-interix"
+diff -r f71f8978fa66 -r 3db5785d2252 gcc/config/i386/win32elf.h
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/gcc/config/i386/win32elf.h	Sun Dec 13 19:20:43 2009 -0500
+@@ -0,0 +1,152 @@
++/* Target definitions for GCC for Intel 80386 using ELF
++   Copyright (C) 1988, 1991, 1995, 2000, 2001, 2002
++   Free Software Foundation, Inc.
++
++   Derived from i386elf.h and mingw32.h
++   i386elf.h was derived from sysv4.h written by Ron Guilmette (rfg@netcom.com).
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++/* Use stabs instead of DWARF debug format.  */
++#undef  PREFERRED_DEBUGGING_TYPE
++#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
++
++#define TARGET_VERSION fprintf (stderr, " (x86 Win32 ELF)");
++
++/* See i386/crtdll.h for an alternative definition.  */
++#define TARGET_OS_CPP_BUILTINS()				\
++  do								\
++    {								\
++      builtin_define ("__MSVCRT__");				\
++      builtin_define ("__MINGW32__");			   	\
++      builtin_define ("_WIN32");				\
++      builtin_define ("__WIN32");				\
++      builtin_define ("__WINELF__");				\
++      builtin_define_std ("WIN32");				\
++      builtin_define_std ("WINNT");				\
++    }								\
++  while (0)
++
++/* By default, target has a 80387, uses IEEE compatible arithmetic,
++   and returns float values in the 387.  */
++
++#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)
++
++/* The ELF ABI for the i386 says that records and unions are returned
++   in memory.  */
++
++#undef RETURN_IN_MEMORY
++#define RETURN_IN_MEMORY(TYPE) \
++  (TYPE_MODE (TYPE) == BLKmode \
++   || (VECTOR_MODE_P (TYPE_MODE (TYPE)) && int_size_in_bytes (TYPE) == 8))
++
++#undef CPP_SPEC
++#define CPP_SPEC ""
++
++#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
++
++#define STARTFILE_SPEC "%{!shared: \
++			 %{!symbolic: \
++			  %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
++                         crt1.o%s \
++                          }} \
++                        crti.o%s \
++			crtbegin.o%s"
++
++#define LINK_SPEC "%{shared:-shared}"
++
++#undef DBX_REGISTER_NUMBER
++#define DBX_REGISTER_NUMBER(n) \
++  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
++
++/* The routine used to output sequences of byte values.  We use a special
++   version of this for most svr4 targets because doing so makes the
++   generated assembly code more compact (and thus faster to assemble)
++   as well as more readable.  Note that if we find subparts of the
++   character sequence which end with NUL (and which are shorter than
++   STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING.  */
++
++#undef ASM_OUTPUT_ASCII
++#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH)				\
++  do									\
++    {									\
++      const unsigned char *_ascii_bytes =				\
++        (const unsigned char *) (STR);					\
++      const unsigned char *limit = _ascii_bytes + (LENGTH);		\
++      unsigned bytes_in_chunk = 0;					\
++      for (; _ascii_bytes < limit; _ascii_bytes++)			\
++        {								\
++	  const unsigned char *p;					\
++	  if (bytes_in_chunk >= 64)					\
++	    {								\
++	      fputc ('\n', (FILE));					\
++	      bytes_in_chunk = 0;					\
++	    }								\
++	  for (p = _ascii_bytes; p < limit && *p != '\0'; p++)		\
++	    continue;							\
++	  if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT)	\
++	    {								\
++	      if (bytes_in_chunk > 0)					\
++		{							\
++		  fputc ('\n', (FILE));					\
++		  bytes_in_chunk = 0;					\
++		}							\
++	      ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes);		\
++	      _ascii_bytes = p;						\
++	    }								\
++	  else								\
++	    {								\
++	      if (bytes_in_chunk == 0)					\
++		fprintf ((FILE), "\t.byte\t");				\
++	      else							\
++		fputc (',', (FILE));					\
++	      fprintf ((FILE), "0x%02x", *_ascii_bytes);		\
++	      bytes_in_chunk += 5;					\
++	    }								\
++	}								\
++      if (bytes_in_chunk > 0)						\
++        fprintf ((FILE), "\n");						\
++    }									\
++  while (0)
++
++#define LOCAL_LABEL_PREFIX	"."
++
++/* Switch into a generic section.  */
++#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
++
++/* If defined, a C expression whose value is a string containing the
++   assembler operation to identify the following data as
++   uninitialized global data.  If not defined, and neither
++   `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
++   uninitialized global data will be output in the data section if
++   `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
++   used.  */
++#undef BSS_SECTION_ASM_OP
++#define BSS_SECTION_ASM_OP "\t.section\t.bss"
++
++/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
++   separate, explicit argument.  If you define this macro, it is used
++   in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
++   handling the required alignment of the variable.  The alignment is
++   specified as the number of bits.
++
++   Try to use function `asm_output_aligned_bss' defined in file
++   `varasm.c' when defining this macro.  */
++#undef ASM_OUTPUT_ALIGNED_BSS
++#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
++  asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+diff -r f71f8978fa66 -r 3db5785d2252 gcc/libgcc2.c
+--- a/gcc/libgcc2.c	Sun Dec 13 19:19:48 2009 -0500
++++ b/gcc/libgcc2.c	Sun Dec 13 19:20:43 2009 -0500
+@@ -2048,7 +2048,7 @@
+ 
+ /* Jump to a trampoline, loading the static chain address.  */
+ 
+-#if defined(WINNT) && ! defined(__CYGWIN__)
++#if defined(WINNT) && ! defined(__CYGWIN__) && ! defined(__WINELF__)
+ int getpagesize (void);
+ int mprotect (char *,int, int);
+ 
+diff -r f71f8978fa66 -r 3db5785d2252 libgcc/config.host
+--- a/libgcc/config.host	Sun Dec 13 19:19:48 2009 -0500
++++ b/libgcc/config.host	Sun Dec 13 19:20:43 2009 -0500
+@@ -337,7 +337,7 @@
+ 	extra_parts="crtbegin.o crtend.o crtfastmath.o"
+ 	tmake_file="i386/t-cygming i386/t-crtfm"
+ 	;;
+-x86_64-*-mingw*)
++x86_64-*-mingw* | i[34567]86-*-win32elf*)
+ 	;;
+ i[34567]86-*-interix3*)
+ 	;;
+diff -r f71f8978fa66 -r 3db5785d2252 libiberty/configure
+--- a/libiberty/configure	Sun Dec 13 19:19:48 2009 -0500
++++ b/libiberty/configure	Sun Dec 13 19:20:43 2009 -0500
+@@ -8884,7 +8884,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r f71f8978fa66 -r 3db5785d2252 libiberty/configure.ac
+--- a/libiberty/configure.ac	Sun Dec 13 19:19:48 2009 -0500
++++ b/libiberty/configure.ac	Sun Dec 13 19:20:43 2009 -0500
+@@ -656,7 +656,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r f71f8978fa66 -r 3db5785d2252 libiberty/getpwd.c
+--- a/libiberty/getpwd.c	Sun Dec 13 19:19:48 2009 -0500
++++ b/libiberty/getpwd.c	Sun Dec 13 19:20:43 2009 -0500
+@@ -107,7 +107,7 @@
+ 
+ #else	/* VMS || _WIN32 && !__CYGWIN__ */
+ 
+-#ifndef MAXPATHLEN
++#if !defined(MAXPATHLEN) || defined(__WINELF__)
+ #define MAXPATHLEN 255
+ #endif
+ 
+diff -r f71f8978fa66 -r 3db5785d2252 libstdc++-v3/configure
+--- a/libstdc++-v3/configure	Sun Dec 13 19:19:48 2009 -0500
++++ b/libstdc++-v3/configure	Sun Dec 13 19:20:43 2009 -0500
+@@ -95045,7 +95045,7 @@
+   fi
+ 
+     ;;
+-  *-mingw32*)
++  *-mingw32* | *-win32elf*)
+ 
+   # If we're not using GNU ld, then there's no point in even trying these
+   # tests.  Check for that first.  We should have already tested for gld
+diff -r f71f8978fa66 -r 3db5785d2252 libstdc++-v3/configure.host
+--- a/libstdc++-v3/configure.host	Sun Dec 13 19:19:48 2009 -0500
++++ b/libstdc++-v3/configure.host	Sun Dec 13 19:20:43 2009 -0500
+@@ -251,7 +251,7 @@
+     atomicity_dir=os/irix
+     atomic_word_dir=os/irix
+     ;;
+-  mingw32*)
++  mingw32* | win32elf*)
+     os_include_dir="os/mingw32"
+     error_constants_dir="os/mingw32"
+     ;;
+diff -r f71f8978fa66 -r 3db5785d2252 libstdc++-v3/crossconfig.m4
+--- a/libstdc++-v3/crossconfig.m4	Sun Dec 13 19:19:48 2009 -0500
++++ b/libstdc++-v3/crossconfig.m4	Sun Dec 13 19:20:43 2009 -0500
+@@ -140,7 +140,7 @@
+     GCC_CHECK_TLS
+     AM_ICONV
+     ;;
+-  *-mingw32*)
++  *-mingw32* | *-win32elf*)
+     GLIBCXX_CHECK_LINKER_FEATURES
+     GLIBCXX_CHECK_MATH_SUPPORT
+     GLIBCXX_CHECK_STDLIB_SUPPORT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/diffs/old/binutils-2.19-winelf.diff	Sun Dec 13 19:28:20 2009 -0500
@@ -0,0 +1,107 @@
+diff -r 32aece6b841a -r 2766f4462a7e bfd/config.bfd
+--- a/bfd/config.bfd	Thu Jul 23 13:16:34 2009 -0400
++++ b/bfd/config.bfd	Thu Jul 23 13:17:20 2009 -0400
+@@ -479,7 +479,8 @@
+     ;;
+   i[3-7]86-*-sysv4* | i[3-7]86-*-unixware* | \
+   i[3-7]86-*-elf | i[3-7]86-*-sco3.2v5* | \
+-  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5*)
++  i[3-7]86-*-dgux* | i[3-7]86-*-sysv5* | \
++  i[3-7]86-*-win32elf*)
+     targ_defvec=bfd_elf32_i386_vec
+     targ_selvecs=i386coff_vec
+     ;;
+diff -r 32aece6b841a -r 2766f4462a7e config.sub
+--- a/config.sub	Thu Jul 23 13:16:34 2009 -0400
++++ b/config.sub	Thu Jul 23 13:17:20 2009 -0400
+@@ -1257,7 +1257,7 @@
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
+ 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+diff -r 32aece6b841a -r 2766f4462a7e gas/configure.tgt
+--- a/gas/configure.tgt	Thu Jul 23 13:16:34 2009 -0400
++++ b/gas/configure.tgt	Thu Jul 23 13:17:20 2009 -0400
+@@ -225,6 +225,7 @@
+       x86_64*)				fmt=coff em=pep ;;
+       i*)				fmt=coff em=pe ;;
+     esac ;;
++  i386-*-win32elf*)			fmt=elf ;;
+   i386-*-nto-qnx*)			fmt=elf ;;
+   i386-*-*nt*)				fmt=coff em=pe ;;
+   i386-*-chaos)				fmt=elf ;;
+diff -r 32aece6b841a -r 2766f4462a7e ld/configure.tgt
+--- a/ld/configure.tgt	Thu Jul 23 13:16:34 2009 -0400
++++ b/ld/configure.tgt	Thu Jul 23 13:17:20 2009 -0400
+@@ -272,6 +272,7 @@
+ 			targ_extra_ofiles="deffilep.o pep-dll.o" ;;
+ i[3-7]86-*-interix*)	targ_emul=i386pe_posix;
+  			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
++i[3-7]86-*-win32elf*)   targ_emul=elf_i386 ;;
+ i[3-7]86-*-beospe*)	targ_emul=i386beos ;;
+ i[3-7]86-*-beos*)	targ_emul=elf_i386_be ;;
+ i[3-7]86-*-vxworks*)	targ_emul=elf_i386_vxworks ;;
+diff -r 32aece6b841a -r 2766f4462a7e libiberty/configure
+--- a/libiberty/configure	Thu Jul 23 13:16:34 2009 -0400
++++ b/libiberty/configure	Thu Jul 23 13:17:20 2009 -0400
+@@ -6044,7 +6044,7 @@
+ 
+ 
+ case "${host}" in
+-  *-*-cygwin* | *-*-mingw*)
++  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
+     cat >>confdefs.h <<\_ACEOF
+ #define HAVE_SYS_ERRLIST 1
+ _ACEOF
+@@ -6228,7 +6228,7 @@
+     fi
+     ;;
+ 
+-  *-*-mingw32*)
++  *-*-mingw32* | *-*-win32elf*)
+     # Under mingw32, sys_nerr and sys_errlist exist, but they are
+     # macros, so the test below won't find them.
+     libiberty_cv_var_sys_nerr=yes
+@@ -8549,7 +8549,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r 32aece6b841a -r 2766f4462a7e libiberty/configure.ac
+--- a/libiberty/configure.ac	Thu Jul 23 13:16:34 2009 -0400
++++ b/libiberty/configure.ac	Thu Jul 23 13:17:20 2009 -0400
+@@ -501,7 +501,7 @@
+ AC_SUBST(target_header_dir)
+ 
+ case "${host}" in
+-  *-*-cygwin* | *-*-mingw*)
++  *-*-cygwin* | *-*-mingw* | *-*-win32elf*)
+     AC_DEFINE(HAVE_SYS_ERRLIST)
+     AC_DEFINE(HAVE_SYS_NERR)
+     ;;
+@@ -593,7 +593,7 @@
+     fi
+     ;;
+ 
+-  *-*-mingw32*)
++  *-*-mingw32* | *-*-win32elf*)
+     # Under mingw32, sys_nerr and sys_errlist exist, but they are
+     # macros, so the test below won't find them.
+     libiberty_cv_var_sys_nerr=yes
+@@ -678,7 +678,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/diffs/old/gcc-4.4.1-winelf.diff	Sun Dec 13 19:28:20 2009 -0500
@@ -0,0 +1,312 @@
+diff -r bcdd72403803 -r 0f30e52c9d37 config.sub
+--- a/config.sub	Thu Jul 23 13:29:57 2009 -0400
++++ b/config.sub	Fri Jul 24 21:07:13 2009 -0400
+@@ -1267,7 +1267,7 @@
+ 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ 	      | -chorusos* | -chorusrdb* | -cegcc* \
+-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* | -win32elf* \
+ 	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ 	      | -uxpv* | -beos* | -mpeix* | -udk* \
+ 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/configure
+--- a/fixincludes/configure	Thu Jul 23 13:29:57 2009 -0400
++++ b/fixincludes/configure	Fri Jul 24 21:07:13 2009 -0400
+@@ -3295,6 +3295,7 @@
+   case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
++        i?86-*-win32elf* | \
+ 	x86_64-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/configure.ac
+--- a/fixincludes/configure.ac	Thu Jul 23 13:29:57 2009 -0400
++++ b/fixincludes/configure.ac	Fri Jul 24 21:07:13 2009 -0400
+@@ -51,6 +51,7 @@
+ [case $host in
+ 	i?86-*-msdosdjgpp* | \
+ 	i?86-*-mingw32* | \
++        i?86-*-win32elf* | \
+ 	x86_64-*-mingw32* | \
+ 	*-*-beos* )
+ 		TARGET=twoprocess
+diff -r bcdd72403803 -r 0f30e52c9d37 fixincludes/mkfixinc.sh
+--- a/fixincludes/mkfixinc.sh	Thu Jul 23 13:29:57 2009 -0400
++++ b/fixincludes/mkfixinc.sh	Fri Jul 24 21:07:13 2009 -0400
+@@ -16,6 +16,7 @@
+     i?86-*-pe | \
+     i?86-*-cygwin* | \
+     i?86-*-mingw32* | \
++    i?86-*-win32elf* | \
+     x86_64-*-mingw32* | \
+     i?86-*-interix* | \
+     *-*-vxworks* | \
+diff -r bcdd72403803 -r 0f30e52c9d37 gcc/config.gcc
+--- a/gcc/config.gcc	Thu Jul 23 13:29:57 2009 -0400
++++ b/gcc/config.gcc	Fri Jul 24 21:07:13 2009 -0400
+@@ -1296,6 +1296,11 @@
+ 			;;
+ 	esac
+ 	;;
++i[34567]86-*-win32elf*)
++	tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/win32elf.h"
++	tmake_file="i386/t-i386elf t-svr4"
++	use_fixproto=yes
++	;;
+ i[34567]86-*-interix3*)
+ 	tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h"
+ 	tmake_file="${tmake_file} i386/t-interix"
+diff -r bcdd72403803 -r 0f30e52c9d37 gcc/config/i386/win32elf.h
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/gcc/config/i386/win32elf.h	Fri Jul 24 21:07:13 2009 -0400
+@@ -0,0 +1,152 @@
++/* Target definitions for GCC for Intel 80386 using ELF
++   Copyright (C) 1988, 1991, 1995, 2000, 2001, 2002
++   Free Software Foundation, Inc.
++
++   Derived from i386elf.h and mingw32.h
++   i386elf.h was derived from sysv4.h written by Ron Guilmette (rfg@netcom.com).
++
++This file is part of GCC.
++
++GCC is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2, or (at your option)
++any later version.
++
++GCC is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING.  If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA.  */
++
++/* Use stabs instead of DWARF debug format.  */
++#undef  PREFERRED_DEBUGGING_TYPE
++#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
++
++#define TARGET_VERSION fprintf (stderr, " (x86 Win32 ELF)");
++
++/* See i386/crtdll.h for an alternative definition.  */
++#define TARGET_OS_CPP_BUILTINS()				\
++  do								\
++    {								\
++      builtin_define ("__MSVCRT__");				\
++      builtin_define ("__MINGW32__");			   	\
++      builtin_define ("_WIN32");				\
++      builtin_define ("__WIN32");				\
++      builtin_define ("__WINELF__");				\
++      builtin_define_std ("WIN32");				\
++      builtin_define_std ("WINNT");				\
++    }								\
++  while (0)
++
++/* By default, target has a 80387, uses IEEE compatible arithmetic,
++   and returns float values in the 387.  */
++
++#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS)
++
++/* The ELF ABI for the i386 says that records and unions are returned
++   in memory.  */
++
++#undef RETURN_IN_MEMORY
++#define RETURN_IN_MEMORY(TYPE) \
++  (TYPE_MODE (TYPE) == BLKmode \
++   || (VECTOR_MODE_P (TYPE_MODE (TYPE)) && int_size_in_bytes (TYPE) == 8))
++
++#undef CPP_SPEC
++#define CPP_SPEC ""
++
++#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
++
++#define STARTFILE_SPEC "%{!shared: \
++			 %{!symbolic: \
++			  %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} \
++                         crt1.o%s \
++                          }} \
++                        crti.o%s \
++			crtbegin.o%s"
++
++#define LINK_SPEC "%{shared:-shared}"
++
++#undef DBX_REGISTER_NUMBER
++#define DBX_REGISTER_NUMBER(n) \
++  (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
++
++/* The routine used to output sequences of byte values.  We use a special
++   version of this for most svr4 targets because doing so makes the
++   generated assembly code more compact (and thus faster to assemble)
++   as well as more readable.  Note that if we find subparts of the
++   character sequence which end with NUL (and which are shorter than
++   STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING.  */
++
++#undef ASM_OUTPUT_ASCII
++#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH)				\
++  do									\
++    {									\
++      const unsigned char *_ascii_bytes =				\
++        (const unsigned char *) (STR);					\
++      const unsigned char *limit = _ascii_bytes + (LENGTH);		\
++      unsigned bytes_in_chunk = 0;					\
++      for (; _ascii_bytes < limit; _ascii_bytes++)			\
++        {								\
++	  const unsigned char *p;					\
++	  if (bytes_in_chunk >= 64)					\
++	    {								\
++	      fputc ('\n', (FILE));					\
++	      bytes_in_chunk = 0;					\
++	    }								\
++	  for (p = _ascii_bytes; p < limit && *p != '\0'; p++)		\
++	    continue;							\
++	  if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT)	\
++	    {								\
++	      if (bytes_in_chunk > 0)					\
++		{							\
++		  fputc ('\n', (FILE));					\
++		  bytes_in_chunk = 0;					\
++		}							\
++	      ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes);		\
++	      _ascii_bytes = p;						\
++	    }								\
++	  else								\
++	    {								\
++	      if (bytes_in_chunk == 0)					\
++		fprintf ((FILE), "\t.byte\t");				\
++	      else							\
++		fputc (',', (FILE));					\
++	      fprintf ((FILE), "0x%02x", *_ascii_bytes);		\
++	      bytes_in_chunk += 5;					\
++	    }								\
++	}								\
++      if (bytes_in_chunk > 0)						\
++        fprintf ((FILE), "\n");						\
++    }									\
++  while (0)
++
++#define LOCAL_LABEL_PREFIX	"."
++
++/* Switch into a generic section.  */
++#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
++
++/* If defined, a C expression whose value is a string containing the
++   assembler operation to identify the following data as
++   uninitialized global data.  If not defined, and neither
++   `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined,
++   uninitialized global data will be output in the data section if
++   `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
++   used.  */
++#undef BSS_SECTION_ASM_OP
++#define BSS_SECTION_ASM_OP "\t.section\t.bss"
++
++/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
++   separate, explicit argument.  If you define this macro, it is used
++   in place of `ASM_OUTPUT_BSS', and gives you more flexibility in
++   handling the required alignment of the variable.  The alignment is
++   specified as the number of bits.
++
++   Try to use function `asm_output_aligned_bss' defined in file
++   `varasm.c' when defining this macro.  */
++#undef ASM_OUTPUT_ALIGNED_BSS
++#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
++  asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+diff -r bcdd72403803 -r 0f30e52c9d37 gcc/libgcc2.c
+--- a/gcc/libgcc2.c	Thu Jul 23 13:29:57 2009 -0400
++++ b/gcc/libgcc2.c	Fri Jul 24 21:07:13 2009 -0400
+@@ -2048,7 +2048,7 @@
+ 
+ /* Jump to a trampoline, loading the static chain address.  */
+ 
+-#if defined(WINNT) && ! defined(__CYGWIN__)
++#if defined(WINNT) && ! defined(__CYGWIN__) && ! defined(__WINELF__)
+ 
+ int
+ getpagesize (void)
+diff -r bcdd72403803 -r 0f30e52c9d37 libgcc/config.host
+--- a/libgcc/config.host	Thu Jul 23 13:29:57 2009 -0400
++++ b/libgcc/config.host	Fri Jul 24 21:07:13 2009 -0400
+@@ -337,7 +337,7 @@
+ 	extra_parts="crtbegin.o crtend.o crtfastmath.o"
+ 	tmake_file="i386/t-cygming i386/t-crtfm"
+ 	;;
+-x86_64-*-mingw*)
++x86_64-*-mingw* | i[34567]86-*-win32elf*)
+ 	;;
+ i[34567]86-*-interix3*)
+ 	;;
+diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/configure
+--- a/libiberty/configure	Thu Jul 23 13:29:57 2009 -0400
++++ b/libiberty/configure	Fri Jul 24 21:07:13 2009 -0400
+@@ -8884,7 +8884,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/configure.ac
+--- a/libiberty/configure.ac	Thu Jul 23 13:29:57 2009 -0400
++++ b/libiberty/configure.ac	Fri Jul 24 21:07:13 2009 -0400
+@@ -656,7 +656,7 @@
+ 
+ # Figure out which version of pexecute to use.
+ case "${host}" in
+-     *-*-mingw* | *-*-winnt*)	pexecute=./pex-win32.o  ;;
++     *-*-mingw* | *-*-winnt* | *-*-win32elf*)	pexecute=./pex-win32.o  ;;
+      *-*-msdosdjgpp*)		pexecute=./pex-djgpp.o  ;;
+      *-*-msdos*)		pexecute=./pex-msdos.o  ;;
+      *)				pexecute=./pex-unix.o   ;;
+diff -r bcdd72403803 -r 0f30e52c9d37 libiberty/getpwd.c
+--- a/libiberty/getpwd.c	Thu Jul 23 13:29:57 2009 -0400
++++ b/libiberty/getpwd.c	Fri Jul 24 21:07:13 2009 -0400
+@@ -107,7 +107,7 @@
+ 
+ #else	/* VMS || _WIN32 && !__CYGWIN__ */
+ 
+-#ifndef MAXPATHLEN
++#if !defined(MAXPATHLEN) || defined(__WINELF__)
+ #define MAXPATHLEN 255
+ #endif
+ 
+diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/configure
+--- a/libstdc++-v3/configure	Thu Jul 23 13:29:57 2009 -0400
++++ b/libstdc++-v3/configure	Fri Jul 24 21:07:13 2009 -0400
+@@ -95045,7 +95045,7 @@
+   fi
+ 
+     ;;
+-  *-mingw32*)
++  *-mingw32* | *-win32elf*)
+ 
+   # If we're not using GNU ld, then there's no point in even trying these
+   # tests.  Check for that first.  We should have already tested for gld
+diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/configure.host
+--- a/libstdc++-v3/configure.host	Thu Jul 23 13:29:57 2009 -0400
++++ b/libstdc++-v3/configure.host	Fri Jul 24 21:07:13 2009 -0400
+@@ -251,7 +251,7 @@
+     atomicity_dir=os/irix
+     atomic_word_dir=os/irix
+     ;;
+-  mingw32*)
++  mingw32* | win32elf*)
+     os_include_dir="os/mingw32"
+     error_constants_dir="os/mingw32"
+     ;;
+diff -r bcdd72403803 -r 0f30e52c9d37 libstdc++-v3/crossconfig.m4
+--- a/libstdc++-v3/crossconfig.m4	Thu Jul 23 13:29:57 2009 -0400
++++ b/libstdc++-v3/crossconfig.m4	Fri Jul 24 21:07:13 2009 -0400
+@@ -140,7 +140,7 @@
+     GCC_CHECK_TLS
+     AM_ICONV
+     ;;
+-  *-mingw32*)
++  *-mingw32* | *-win32elf*)
+     GLIBCXX_CHECK_LINKER_FEATURES
+     GLIBCXX_CHECK_MATH_SUPPORT
+     GLIBCXX_CHECK_STDLIB_SUPPORT
--- a/elfload/src/main.c	Sun Dec 13 18:04:50 2009 -0500
+++ b/elfload/src/main.c	Sun Dec 13 19:28:20 2009 -0500
@@ -1,6 +1,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#ifdef __WIN32
+#include <malloc.h>
+#endif
+
 #include "elfload.h"
 #include "elfload_exec.h"