midipix / build / midipix_build

Forked from build/midipix_build 4 years ago
Clone

Blame patches/binutils-2.24.51.local.patch

Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/bfd/midipix.h b/bfd/midipix.h
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/bfd/midipix.h	1969-12-31 19:00:00.000000000 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/bfd/midipix.h	2015-03-11 17:23:18.492453732 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -0,0 +1,10 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#ifndef MIDIPIX_H
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define MIDIPIX_H
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_TARGET_MIDIPIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_DSO_SUFFIX		".so"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_DSOLIB_SUFFIX	".dso.a"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_IMPLIB_SUFFIX	".lib.a"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/configure	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/configure	2015-03-11 20:01:08.888756786 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -19773,3 +19773,23 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+sed -i -e 's/@pe_executable_name@/'$PE_EXECUTABLE_NAME'/g' Makefile
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+sed -i -e 's/@pe_crt_section@/'$PE_CRT_SECTION'/g' Makefile
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+sed -i -e 's/@pe_cygwin_fork_support@/'$PE_CYGWIN_FORK_SUPPORT'/g' Makefile
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#PE custom import library support
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ -f peimplib.h ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	echo 'build directory is not clean (peimplib.h already exists)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	exit 2
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+touch peimplib.h || exit 2
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+case $target_os in
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	*midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		cat >> peimplib.h << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+/* midipix supersystem support */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#include "midipix.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+esac
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/emultempl/pe.em b/ld/emultempl/pe.em
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/emultempl/pe.em	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/emultempl/pe.em	2015-11-25 09:02:09.729144140 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -35,6 +35,18 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
    only determine if the subsystem is console or windows in order to select
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
    the correct entry point by default. */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#include "peimplib.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#ifndef PE_IMPLIB_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_IMPLIB_SUFFIX	".dll.a"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#ifndef PE_DSO_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_DSO_SUFFIX		".dll"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #define TARGET_IS_${EMULATION_NAME}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 /* Do this before including bfd.h, so we prototype the right functions.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -132,7 +144,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static char * thumb_entry_symbol = NULL;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static lang_assignment_statement_type *image_base_statement = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static unsigned short pe_dll_characteristics = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-static bfd_boolean insert_timestamp = TRUE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+static bfd_boolean insert_timestamp = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static const char *emit_build_id;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #ifdef DLL_SUPPORT
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -471,8 +483,8 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
                                        specifically set with --image-base\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --disable-auto-image-base          Do not auto-choose image base. (default)\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --dll-search-prefix=<string>       When linking dynamically to a dll without\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-                                       an importlib, use <string><basename>.dll\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-                                       in preference to lib<basename>.dll \n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+                                       an importlib, use <string><basename>"PE_DSO_SUFFIX"\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+                                       in preference to lib<basename>"PE_DSO_SUFFIX" \n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --enable-auto-import               Do sophisticated linking of _sym to\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
                                        __imp_sym for DATA references\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --disable-auto-import              Do not auto-import DATA items from DLLs\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1698,7 +1710,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		       extension, and use that for the remainder of the
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		       comparisons.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    pnt = strrchr (is3->the_bfd->filename, '.');
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-		    if (pnt != NULL && filename_cmp (pnt, ".dll") == 0)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		    if (pnt != NULL && filename_cmp (pnt, PE_DSO_SUFFIX) == 0)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		      break;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		  }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1733,7 +1745,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	       then leave the filename alone.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    pnt = strrchr (is->the_bfd->filename, '.');
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	    if (is_ms_arch && (filename_cmp (pnt, ".dll") == 0))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    if (is_ms_arch && (filename_cmp (pnt, PE_DSO_SUFFIX) == 0))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		int idata2 = 0, reloc_count=0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		asection *sec;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -2298,10 +2310,14 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   libname_fmt [] =
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      /* optionally support ldso-specific import libraries */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      #ifdef PE_DSOLIB_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "lib%s"PE_DSOLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Preferred explicit import library for dll's.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      { "lib%s.dll.a", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "lib%s"PE_IMPLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Alternate explicit import library for dll's.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      { "%s.dll.a", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "%s"PE_IMPLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* "libfoo.a" could be either an import lib or a static lib.
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
           For backwards compatibility, libfoo.a needs to precede
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
           libfoo.dll and foo.dll in the search.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -2310,10 +2326,10 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       { "%s.lib", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #ifdef DLL_SUPPORT
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Try "<prefix>foo.dll" (preferred dll name, if specified).  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      {	"%s%s.dll", TRUE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      {	"%s%s"PE_DSO_SUFFIX, TRUE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Try "libfoo.dll" (default preferred dll name).  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      {	"lib%s.dll", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      {	"lib%s"PE_DSO_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Finally try 'native' dll name "foo.dll".  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       {  "%s.dll", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Note: If adding more formats to this table, make sure to check to
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/emultempl/pep.em b/ld/emultempl/pep.em
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/emultempl/pep.em	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/emultempl/pep.em	2015-11-25 09:02:21.153143987 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -42,6 +42,18 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 /* For WINDOWS_XP64 and higher */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 /* Based on pe.em, but modified for 64 bit support.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#include "peimplib.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#ifndef PE_IMPLIB_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_IMPLIB_SUFFIX	".dll.a"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#ifndef PE_DSO_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#define PE_DSO_SUFFIX		".dll"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #define TARGET_IS_${EMULATION_NAME}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #define COFF_IMAGE_WITH_PE
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -147,7 +159,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static int support_old_code = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static lang_assignment_statement_type *image_base_statement = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static unsigned short pe_dll_characteristics = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-static bfd_boolean insert_timestamp = TRUE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+static bfd_boolean insert_timestamp = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static const char *emit_build_id;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #ifdef DLL_SUPPORT
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -434,8 +446,8 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
                                        unless user specifies one\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --disable-auto-image-base          Do not auto-choose image base. (default)\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --dll-search-prefix=<string>       When linking dynamically to a dll without\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-                                       an importlib, use <string><basename>.dll\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-                                       in preference to lib<basename>.dll \n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+                                       an importlib, use <string><basename>"PE_DSO_SUFFIX"\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+                                       in preference to lib<basename>"PE_DSO_SUFFIX" \n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --enable-auto-import               Do sophisticated linking of _sym to\n\
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
                                        __imp_sym for DATA references\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   fprintf (file, _("  --disable-auto-import              Do not auto-import DATA items from DLLs\n"));
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1635,7 +1647,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		       extension, and use that for the remainder of the
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		       comparisons.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    pnt = strrchr (is3->the_bfd->filename, '.');
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-		    if (pnt != NULL && filename_cmp (pnt, ".dll") == 0)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		    if (pnt != NULL && filename_cmp (pnt, PE_DSO_SUFFIX) == 0)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		      break;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		  }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1670,7 +1682,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	       then leave the filename alone.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    pnt = strrchr (is->the_bfd->filename, '.');
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	    if (is_ms_arch && (filename_cmp (pnt, ".dll") == 0))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    if (is_ms_arch && (filename_cmp (pnt, PE_DSO_SUFFIX) == 0))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		int idata2 = 0, reloc_count=0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		asection *sec;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -2062,10 +2074,14 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   libname_fmt [] =
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      /* optionally support ldso-specific import libraries */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      #ifdef PE_DSOLIB_SUFFIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "lib%s"PE_DSOLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Preferred explicit import library for dll's.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      { "lib%s.dll.a", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "lib%s"PE_IMPLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Alternate explicit import library for dll's.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      { "%s.dll.a", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      { "%s"PE_IMPLIB_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* "libfoo.a" could be either an import lib or a static lib.
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
           For backwards compatibility, libfoo.a needs to precede
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
           libfoo.dll and foo.dll in the search.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -2074,10 +2090,10 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       { "%s.lib", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #ifdef DLL_SUPPORT
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Try "<prefix>foo.dll" (preferred dll name, if specified).  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      {	"%s%s.dll", TRUE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      {	"%s%s"PE_DSO_SUFFIX, TRUE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Try "libfoo.dll" (default preferred dll name).  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      {	"lib%s.dll", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      {	"lib%s"PE_DSO_SUFFIX, FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Finally try 'native' dll name "foo.dll".  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       {  "%s.dll", FALSE },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Note: If adding more formats to this table, make sure to check to
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/configure.tgt b/ld/configure.tgt
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/configure.tgt	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/configure.tgt	2015-03-11 20:09:20.564772519 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -319,6 +319,11 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			test "$targ" != "$host" && LIB_PATH='${tooldir}/lib/w32api' ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 i[3-7]86-*-mingw32*)	targ_emul=i386pe ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+i[3-7]86-*-midipix*)	targ_emul=i386pe ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			targ_extra_ofiles="deffilep.o pe-dll.o" ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_EXECUTABLE_NAME=a.out ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_CRT_SECTION=no ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_CYGWIN_FORK_SUPPORT=no ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 x86_64-*-pe | x86_64-*-pep) targ_emul=i386pep ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			targ_extra_emuls=i386pe ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -329,7 +333,13 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 x86_64-*-mingw*)	targ_emul=i386pep ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			targ_extra_emuls=i386pe
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-i[3-7]86-*-interix*)	targ_emul=i386pe_posix;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+x86_64-*-midipix*)	targ_emul=i386pep ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			targ_extra_emuls=i386pe ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			targ_extra_ofiles="deffilep.o pep-dll.o pe-dll.o" ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_EXECUTABLE_NAME=a.out ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_CRT_SECTION=no ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			PE_CYGWIN_FORK_SUPPORT=no ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+i[3-7]86-*-interix*)	targ_emul=i386pe_posix ;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
  			targ_extra_ofiles="deffilep.o pe-dll.o" ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 i[3-7]86-*-beospe*)	targ_emul=i386beos ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 i[3-7]86-*-beos*)	targ_emul=elf_i386_be ;;
4c074e
@@ -825,6 +836,10 @@
4c074e
 *-*-linux*)
4c074e
   ;;
4c074e
 
4c074e
+*-*-midipix*)
4c074e
+  NATIVE_LIB_DIRS=
4c074e
+  ;;
4c074e
+
4c074e
 *-*-netbsd*)
4c074e
   ;;
4c074e
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/Makefile.in b/ld/Makefile.in
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/Makefile.in	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/Makefile.in	2015-03-11 20:09:38.972773108 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -54,6 +54,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 host_triplet = @host@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 target_triplet = @target@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 bin_PROGRAMS = ld-new$(EXEEXT)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+PE_EXECUTABLE_NAME = @pe_executable_name@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+PE_CRT_SECTION = @pe_crt_section@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+PE_CYGWIN_FORK_SUPPORT = @pe_cygwin_fork_support@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 # Automake 1.9 will only build info files in the objdir if they are
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 # mentioned in DISTCLEANFILES.  It doesn't have to be unconditional,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -831,7 +833,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 POTFILES = $(CFILES) $(HFILES) $(EMULATION_FILES)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 # These all start with e so 'make clean' can find them.
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-GENSCRIPTS = LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@ @enable_initfini_array@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+GENSCRIPTS = EXECUTABLE_NAME='${PE_EXECUTABLE_NAME}' PE_CRT_SECTION='${PE_CRT_SECTION}' PE_CYGWIN_FORK_SUPPORT='${PE_CYGWIN_FORK_SUPPORT}' LIB_PATH='${LIB_PATH}' $(SHELL) $(srcdir)/genscripts.sh "${srcdir}" "${libdir}" "${prefix}" "${exec_prefix}" @host@ @target@ @target_alias@ "@EMULATION_LIBPATH@" "@NATIVE_LIB_DIRS@" @use_sysroot@ @enable_initfini_array@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 GEN_DEPENDS = $(srcdir)/genscripts.sh stringify.sed
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 ELF_DEPS = $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/scripttempl/DWARF.sc
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 ELF_GEN_DEPS = $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/elf-generic.em $(srcdir)/emultempl/genelf.em $(srcdir)/scripttempl/DWARF.sc
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/scripttempl/pep.sc	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/scripttempl/pep.sc	2015-03-11 20:10:05.324773952 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -92,12 +92,17 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+ *(.gcc_except_table)}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   /* The Cygwin32 library uses a section to avoid copying certain data
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      on fork.  This used to be named ".data$nocopy".  The linker used
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      to include this between __data_start__ and __data_end__, but that
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      breaks building the cygwin32 dll.  Instead, we name the section
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .data ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__data_start__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -106,7 +111,12 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_DATA}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     *(.jcr)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__data_end__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+*(.data_cygwin_nocopy)}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -170,6 +180,8 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__IAT_end__ = .;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_IDATA67}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CRT_SECTION" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { 					
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+___crt_xc_start__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -188,6 +200,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_CRT_XT}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+___crt_xt_end__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   /* Windows TLS expects .tls\$AAA to be at the start and .tls\$ZZZ to be
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      at the end of the .tls section.  This is important because _tls_start MUST
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/scripttempl/pe.sc	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/scripttempl/pe.sc	2015-03-11 20:10:10.036774102 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -92,12 +92,17 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+ *(.gcc_except_table)}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   /* The Cygwin32 library uses a section to avoid copying certain data
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      on fork.  This used to be named ".data$nocopy".  The linker used
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      to include this between __data_start__ and __data_end__, but that
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      breaks building the cygwin32 dll.  Instead, we name the section
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .data ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__data_start__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -106,7 +111,12 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_DATA}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     *(.jcr)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__data_end__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CYGWIN_FORK_SUPPORT" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+*(.data_cygwin_nocopy)}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -165,6 +175,8 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+__IAT_end__ = .;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_IDATA67}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+if [ x"$PE_CRT_SECTION" != xno ]; then cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { 					
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+___crt_xc_start__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -183,6 +195,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${R_CRT_XT}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ${RELOCATING+___crt_xt_end__ = . ;}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+fi
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+cat << EOF
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   /* Windows TLS expects .tls\$AAA to be at the start and .tls\$ZZZ to be
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      at the end of section.  This is important because _tls_start MUST
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/binutils/winduni.c b/binutils/winduni.c
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/binutils/winduni.c	2014-07-03 01:37:23.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/binutils/winduni.c	2015-02-14 11:18:32.987163288 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -57,7 +57,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 /* Codepages mapped.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 static local_iconv_map codepages[] =
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  { 0, "MS-ANSI" },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  { 0, "cp1252" },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { 1, "WINDOWS-1252" },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { 437, "MS-ANSI" },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { 737, "MS-GREEK" },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/ld/pe-dll.c	2014-07-03 01:37:48.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/ld/pe-dll.c	2015-06-13 20:08:00.160401506 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -40,6 +40,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #include "coff/internal.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #include "../bfd/libcoff.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #include "deffile.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+#include "peimplib.h"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #ifdef pe_use_x86_64
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -234,7 +235,11 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { STRING_COMMA_LEN ("impure_ptr") },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { STRING_COMMA_LEN ("_impure_ptr") },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { STRING_COMMA_LEN ("_fmode") },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  #ifdef PE_TARGET_MIDIPIX
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  /* (default) excluded symbols are defined by the caller (specs, etc.) */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  #else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { STRING_COMMA_LEN ("environ") },
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   { NULL, 0 }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 };
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -644,10 +649,13 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   int i, j;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   struct bfd_link_hash_entry *blhe;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  struct bfd_link_hash_entry *blhew;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd *b;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   struct bfd_section *s;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   def_file_export *e = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_boolean resort_needed;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  char *weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  char *objsym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   if (!pe_def_file)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     pe_def_file = def_file_empty ();
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -737,6 +745,16 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    if (is_import (sn))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 			  continue;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		    if (!strncmp (sn, ".weak.", 6) && strchr (sn + 6, '.'))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		        objsym = strdup (sn);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		        weaksym = strdup (sn + 6);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		        *(strchr (weaksym, '.')) = '\0';
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		        sn = weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		    else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      weaksym = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    name = xmalloc (strlen ("__imp_") + strlen (sn) + 1);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    sprintf (name, "%s%s", "__imp_", sn);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -745,7 +763,8 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    free (name);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    if (blhe && blhe->type == bfd_link_hash_defined)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-		      continue;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      if (strncmp (blhe->u.def.section->name, ".got$", 5))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			continue;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		  }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		  if (pe_details->underscored && *sn == '_')
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -761,7 +780,20 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		      /* Fill data flag properly, from dlltool.c.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		      if (!is_dup)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		        p->flag_data = !(symbols[j]->flags & BSF_FUNCTION);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      if (weaksym)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			blhew = bfd_link_hash_lookup (info->hash, weaksym,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+						 FALSE, FALSE, FALSE);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			if (blhew->type != bfd_link_hash_defined)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			  {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			    free (p->internal_name);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			    p->internal_name = objsym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+			  }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		    if (weaksym)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      free (weaksym);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -910,6 +942,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       if (blhe
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  && (blhe->type == bfd_link_hash_defined
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      || (blhe->type == bfd_link_hash_defweak)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      || (blhe->type == bfd_link_hash_common)))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	{
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  count_exported++;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -919,7 +952,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  /* Only fill in the sections. The actual offsets are computed
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	     in fill_exported_offsets() after common symbols are laid
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	     out.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	  if (blhe->type == bfd_link_hash_defined)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  if ((blhe->type == bfd_link_hash_defined) || (blhe->type == bfd_link_hash_defweak))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    exported_symbol_sections[i] = blhe->u.def.section;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    exported_symbol_sections[i] = blhe->u.c.p->section;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/bfd/config.bfd b/bfd/config.bfd
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/bfd/config.bfd	2014-07-03 01:37:20.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/bfd/config.bfd	2015-02-14 11:27:08.199179775 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -679,7 +679,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_archs="$targ_archs bfd_arm_arch"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     want64=true
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin | x86_64-*-midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_defvec=x86_64_pe_vec
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_be_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     want64=true
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -731,7 +731,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_defvec=i386_elf32_vec
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_selvecs=i386_coff_vec
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe | i[3-7]86-*-midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_defvec=i386_pe_vec
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     targ_underscore=yes
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/binutils/configure b/binutils/configure
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/binutils/configure	2014-07-03 01:37:22.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/binutils/configure	2015-09-13 21:35:09.738957435 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -14015,7 +14015,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	x86_64-*-mingw* | x86_64-*-cygwin*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	x86_64-*-mingw* | x86_64-*-midipix* | x86_64-*-cygwin*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  if test -z "$DLLTOOL_DEFAULT"; then
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -14025,7 +14025,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	i[3-7]86-*-pe* | i[3-7]86-*-cygwin* | i[3-7]86-*-midipix* | i[3-7]86-*-mingw32** | i[3-7]86-*-netbsdpe*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   	  BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  if test -z "$DLLTOOL_DEFAULT"; then
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/configure b/configure
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/configure	2014-07-03 01:37:23.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/configure	2015-03-11 17:07:15.820422926 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -3428,6 +3428,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   x86_64-*-mingw*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     noconfigdirs="$noconfigdirs ${libgcj}"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  *-midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+    noconfigdirs="$noconfigdirs ${libgcj}"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+    ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   mmix-*-*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     noconfigdirs="$noconfigdirs target-libffi target-boehm-gc"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -3549,6 +3552,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   *-*-mingw*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  *-*-midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+    noconfigdirs="$noconfigdirs target-newlib target-libgloss"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+    ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   *-*-netbsd*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     noconfigdirs="$noconfigdirs target-newlib target-libgloss"
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -6257,7 +6263,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 target_elf=no
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 case $target in
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  *-darwin* | *-aix* | *-cygwin* | *-mingw* | *-aout* | *-*coff* | \
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  *-darwin* | *-aix* | *-cygwin* | *-mingw* | *-midipix* | *-aout* | *-*coff* | \
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   *-msdosdjgpp* | *-vms* | *-wince* | *-*-pe* | \
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   alpha*-dec-osf* | *-interix* | hppa[12]*-*-hpux*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     target_elf=no
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru --new-file a/gas/configure.tgt b/gas/configure.tgt
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/gas/configure.tgt	2014-07-03 01:37:25.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/gas/configure.tgt	2015-02-14 11:27:08.223179776 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -262,7 +262,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      i*)				fmt=coff em=pe ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
    esac ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   i386-*-interix*)			fmt=coff em=interix ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  i386-*-mingw*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  i386-*-mingw* | i386-*-midipix*)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     case ${cpu} in
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       x86_64*)				fmt=coff em=pep ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       i*)				fmt=coff em=pe ;;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru a/bfd/cofflink.c b/bfd/cofflink.c
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/bfd/cofflink.c	2014-07-03 01:37:20.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/bfd/cofflink.c	2015-06-13 20:22:46.000389638 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -202,6 +202,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_size_type symesz;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_byte *esym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_byte *esym_end;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  char *weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   *pneeded = FALSE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -236,6 +237,16 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      && CONST_STRNEQ (name, "__imp_"))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    h = bfd_link_hash_lookup (info->hash, name + 6, FALSE, FALSE, TRUE);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  if (!h && !strncmp (name, ".weak.", 6) && strchr (name + 6, '.'))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      weaksym = strdup (name + 6);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      *(strchr (weaksym, '.')) = '\0';
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      h = bfd_link_hash_lookup (info->hash, weaksym, FALSE, FALSE, TRUE);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      name = weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    weaksym = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  /* We are only interested in symbols that are currently
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	     undefined.  If a symbol is currently known to be common,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	     COFF linkers do not bring in an object file which defines
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -249,6 +260,9 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      *pneeded = TRUE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      return TRUE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  if (weaksym)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    free (weaksym);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       esym += (sym.n_numaux + 1) * symesz;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -320,6 +334,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_byte *esym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_byte *esym_end;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   bfd_size_type amt;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  char *weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   symcount = obj_raw_syment_count (abfd);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -476,6 +491,20 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 		addit = FALSE;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  if (!strncmp (name, ".weak.", 6) && strchr (name + 6, '.'))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      if (! (bfd_coff_link_add_one_symbol
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		     (info, abfd, name, flags, section, value,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      (const char *) NULL, copy, FALSE,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		      (struct bfd_link_hash_entry **) sym_hash)))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+		goto error_return;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      weaksym = strdup (name + 6);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      *(strchr(weaksym, '.')) = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      name = weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	      flags |= BSF_WEAK;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  if (addit)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	    {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	      if (! (bfd_coff_link_add_one_symbol
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru a/bfd/linker.c b/bfd/linker.c
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/bfd/linker.c	2014-07-03 01:37:21.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/bfd/linker.c	2015-06-06 17:51:24.148275212 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1050,6 +1050,7 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   struct archive_hash_table arsym_hash;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   unsigned int indx;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   struct bfd_link_hash_entry **pundef;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+  char *weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   if (! bfd_has_map (abfd))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -1073,6 +1074,13 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       struct archive_hash_entry *arh;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       struct archive_list *l, **pp;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      if (!strncmp (arsym->name, ".weak.", 6) && strchr (arsym->name + 6, '.'))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	{
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  weaksym = strdup (arsym->name + 6);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  *(strchr (weaksym, '.')) = '\0';
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  arsym->name = weaksym;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	}
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       arh = archive_hash_lookup (&arsym_hash, arsym->name, TRUE, FALSE);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       if (arh == NULL)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	goto error_return;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
diff -ru a/gas/config/tc-i386.c b/gas/config/tc-i386.c
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/gas/config/tc-i386.c	2014-07-03 01:37:25.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/gas/config/tc-i386.c	2015-06-12 22:40:37.100250091 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -9148,25 +9148,6 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	value += md_pcrel_from (fixP);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-#if defined (OBJ_COFF) && defined (TE_PE)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-  if (fixP->fx_addsy != NULL
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      && S_IS_WEAK (fixP->fx_addsy)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      /* PR 16858: Do not modify weak function references.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      && ! fixP->fx_pcrel)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-    {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-#if !defined (TE_PEP)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      /* For x86 PE weak function symbols are neither PC-relative
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	 nor do they set S_IS_FUNCTION.  So the only reliable way
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	 to detect them is to check the flags of their containing
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	 section.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      if (S_GET_SEGMENT (fixP->fx_addsy) != NULL
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	  && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-	;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      value -= S_GET_VALUE (fixP->fx_addsy);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-    }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-#endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   /* Fix a few things - the dynamic linker expects certain values here,
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
      and we must not disappoint it.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -9237,8 +9218,11 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       fixP->fx_done = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       /* Remember value for tc_gen_reloc.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       fixP->fx_addnumber = value;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      /* Clear out the frag for now.  */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      value = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      /* for data symbols, cancel the effect of the relocation */
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      if (!((S_GET_SEGMENT (fixP->fx_addsy)->flags) & SEC_CODE))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+        value = -S_GET_VALUE (fixP->fx_addsy);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      else
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+        value = 0;
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     }
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 #endif
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
   else if (use_rela_relocations)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
--- a/binutils/rename.c	2014-07-03 01:37:22.000000000 -0400
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+++ b/binutils/rename.c	2015-11-25 23:13:38.086948592 -0500
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
@@ -167,7 +167,10 @@
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  && s.st_nlink == 1)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       )
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
     {
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
-      ret = rename (from, to);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+      if ((ret = rename (from, to)))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	if (!(ret = simple_copy (from, to)))
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+	  unlink (from);
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
+
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
       if (ret == 0)
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	{
Lucio Andrés Illanes Albornoz (arab, vxp) cddeef
 	  if (exists)