Index: src/ld/emultempl/pep.em
===================================================================
--- src.orig/ld/emultempl/pep.em	2010-02-03 13:42:16.000000000 +0100
+++ src/ld/emultempl/pep.em	2010-03-22 16:13:14.750280200 +0100
@@ -97,8 +97,6 @@ fragment <<EOF
 #define PE_DEF_SECTION_ALIGNMENT	0x00000400
 #endif
 
-#define U(S) ${INITIAL_SYMBOL_CHAR} S
-
 static struct internal_extra_pe_aouthdr pep;
 static int dll;
 static int pep_subsystem = ${SUBSYSTEM};
@@ -175,6 +173,8 @@ enum options
   OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2,
   OPTION_EXCLUDE_MODULES_FOR_IMPLIB,
   OPTION_USE_NUL_PREFIXED_IMPORT_TABLES,
+  OPTION_NO_LEADING_UNDERSCORE,
+  OPTION_LEADING_UNDERSCORE,
   OPTION_ENABLE_LONG_SECTION_NAMES,
   OPTION_DISABLE_LONG_SECTION_NAMES,
   OPTION_DYNAMIC_BASE,
@@ -216,6 +216,8 @@ gld${EMULATION_NAME}_add_options
     {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
     {"use-nul-prefixed-import-tables", no_argument, NULL,
      OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
+    {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
+    {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
 #ifdef DLL_SUPPORT
     /* getopt allows abbreviations, so we do this to stop it
        from treating -o as an abbreviation for this option.  */
@@ -276,35 +278,36 @@ typedef struct
   bfd_vma value;
   char *symbol;
   int inited;
+  bfd_boolean is_lead_underscore;
 } definfo;
 
-#define D(field,symbol,def)  {&pep.field,sizeof(pep.field), def, symbol,0}
+#define D(field,symbol,def,usc)  {&pep.field,sizeof(pep.field), def, symbol,0, usc}
 
 static definfo init[] =
 {
   /* imagebase must be first */
 #define IMAGEBASEOFF 0
-  D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE),
+  D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE, FALSE),
 #define DLLOFF 1
-  {&dll, sizeof(dll), 0, "__dll__", 0},
+  {&dll, sizeof(dll), 0, "__dll__", 0, FALSE},
 #define MSIMAGEBASEOFF	2
-  D(ImageBase, U("__ImageBase"), NT_EXE_IMAGE_BASE),
-  D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT),
-  D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT),
-  D(MajorOperatingSystemVersion,"__major_os_version__", 4),
-  D(MinorOperatingSystemVersion,"__minor_os_version__", 0),
-  D(MajorImageVersion,"__major_image_version__", 0),
-  D(MinorImageVersion,"__minor_image_version__", 0),
-  D(MajorSubsystemVersion,"__major_subsystem_version__", 5),
-  D(MinorSubsystemVersion,"__minor_subsystem_version__", 2),
-  D(Subsystem,"__subsystem__", ${SUBSYSTEM}),
-  D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000),
-  D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000),
-  D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000),
-  D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000),
-  D(LoaderFlags,"__loader_flags__", 0x0),
-  D(DllCharacteristics, "__dll_characteristics__", 0x0), 
-  { NULL, 0, 0, NULL, 0 }
+  D(ImageBase, "___ImageBase", NT_EXE_IMAGE_BASE, TRUE),
+  D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT, FALSE),
+  D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT, FALSE),
+  D(MajorOperatingSystemVersion,"__major_os_version__", 4, FALSE),
+  D(MinorOperatingSystemVersion,"__minor_os_version__", 0, FALSE),
+  D(MajorImageVersion,"__major_image_version__", 0, FALSE),
+  D(MinorImageVersion,"__minor_image_version__", 0, FALSE),
+  D(MajorSubsystemVersion,"__major_subsystem_version__", 5, FALSE),
+  D(MinorSubsystemVersion,"__minor_subsystem_version__", 2, FALSE),
+  D(Subsystem,"__subsystem__", ${SUBSYSTEM}, FALSE),
+  D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000, FALSE),
+  D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000, FALSE),
+  D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE),
+  D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE),
+  D(LoaderFlags,"__loader_flags__", 0x0, FALSE),
+  D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE),
+  { NULL, 0, 0, NULL, 0, FALSE}
 };
 
 
@@ -326,6 +329,7 @@ gld_${EMULATION_NAME}_list_options (FILE
   fprintf (file, _("  --stack <size>                     Set size of the initial stack\n"));
   fprintf (file, _("  --subsystem <name>[:<version>]     Set required OS subsystem [& version]\n"));
   fprintf (file, _("  --support-old-code                 Support interworking with old code\n"));
+  fprintf (file, _("  --[no-]leading-underscore          Set explicit symbol underscore prefix mode\n"));
 #ifdef DLL_SUPPORT
   fprintf (file, _("  --add-stdcall-alias                Export symbols with and without @nn\n"));
   fprintf (file, _("  --disable-stdcall-fixup            Don't link _sym to _sym@nn\n"));
@@ -385,12 +389,16 @@ set_pep_name (char *name, bfd_vma val)
   /* Find the name and set it.  */
   for (i = 0; init[i].ptr; i++)
     {
-      if (strcmp (name, init[i].symbol) == 0)
+      if (strcmp (name, init[i].symbol
+		  + ((!init[i].is_lead_underscore
+		      || pep_leading_underscore) ? 0 : 1)) == 0)
 	{
 	  init[i].value = val;
 	  init[i].inited = 1;
 	  if (strcmp (name,"__image_base__") == 0)
-	    set_pep_name ("___ImageBase", val);
+	    set_pep_name ((pep_leading_underscore == 0 ? "__ImageBase"
+	    					       : "___ImageBase"),
+	    		  val);
 	  return;
 	}
     }
@@ -402,7 +410,7 @@ set_entry_point (void)
 {
   const char *entry;
   const char *initial_symbol_char;
-  int i;
+  int i, u = -1;
 
   static const struct
     {
@@ -440,7 +448,19 @@ set_entry_point (void)
         entry = default_entry;
     }
 
-  initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
+  /* Now we check target's default for getting proper symbol_char.  */
+  u = pep_leading_underscore;
+  if (u == -1 && !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
+    bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
+
+  if (u == 0)
+    initial_symbol_char = "";
+  else if (u != -1)
+    initial_symbol_char = "_";
+  else
+    abort ();
+  pep_leading_underscore = u;
+
   if (*initial_symbol_char != '\0')
     {
       char *alc_entry;
@@ -627,6 +647,12 @@ gld${EMULATION_NAME}_handle_option (int 
     case OPTION_USE_NUL_PREFIXED_IMPORT_TABLES:
       pep_use_nul_prefixed_import_tables = TRUE;
       break;
+    case OPTION_NO_LEADING_UNDERSCORE:
+      pep_leading_underscore = 0;
+      break;
+    case OPTION_LEADING_UNDERSCORE:
+      pep_leading_underscore = 1;
+      break;
 #ifdef DLL_SUPPORT
     case OPTION_OUT_DEF:
       pep_out_def_filename = xstrdup (optarg);
@@ -814,8 +840,11 @@ gld_${EMULATION_NAME}_set_symbols (void)
   for (j = 0; init[j].ptr; j++)
     {
       bfd_vma val = init[j].value;
+      const char *sy = init[j].symbol;
       lang_assignment_statement_type *rv;
-      rv = lang_add_assignment (exp_assop ('=', init[j].symbol,
+
+      sy += ((!init[j].is_lead_underscore || pep_leading_underscore) ? 0 : 1);
+      rv = lang_add_assignment (exp_assop ('=', sy,
 					   exp_intop (val)));
       if (init[j].size == sizeof (short))
 	*(short *) init[j].ptr = (short) val;
@@ -1076,14 +1105,18 @@ This should work unless it involves cons
 
 	      for (i = 0; i < nsyms; i++)
 		{
-		  if (! CONST_STRNEQ (symbols[i]->name, "__head_"))
+		  if (! CONST_STRNEQ (symbols[i]->name,
+		  		      (pep_leading_underscore == 0 ? "_head_"
+		  		      				   : "__head_")))
 		    continue;
 
 		  if (pep_dll_extra_pe_debug)
 		    printf ("->%s\n", symbols[i]->name);
 
 		  pep_data_import_dll = (char*) (symbols[i]->name +
-						sizeof ("__head_") - 1);
+						(pep_leading_underscore == 0 ? sizeof ("_head_")
+									     : sizeof ("__head_"))
+						- 1);
 		  break;
 		}
 
@@ -1431,7 +1464,10 @@ saw_option (char *option)
   int i;
 
   for (i = 0; init[i].ptr; i++)
-    if (strcmp (init[i].symbol, option) == 0)
+    if (strcmp (init[i].symbol
+		+ ((!init[i].is_lead_underscore
+		    || pep_leading_underscore) ? 0 : 1),
+		option) == 0)
       return init[i].inited;
   return 0;
 }
@@ -1465,7 +1501,8 @@ gld_${EMULATION_NAME}_unrecognized_file 
 	    {
 	      struct bfd_link_hash_entry *h;
 
-	      sprintf (buf, "_%s", pep_def_file->exports[i].internal_name);
+	      sprintf (buf, "%s%s", (pep_leading_underscore == 0 ? "" : "_"),
+	      	       pep_def_file->exports[i].internal_name);
 
 	      h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
 	      if (h == (struct bfd_link_hash_entry *) NULL)
Index: src/ld/pe-dll.c
===================================================================
--- src.orig/ld/pe-dll.c	2010-03-22 12:44:34.000000000 +0100
+++ src/ld/pe-dll.c	2010-03-22 14:13:15.338819000 +0100
@@ -158,6 +158,7 @@ int pe_dll_compat_implib = 0;
 int pe_dll_extra_pe_debug = 0;
 int pe_use_nul_prefixed_import_tables = 0;
 int pe_use_coff_long_section_names = -1;
+int pe_leading_underscore = -1;
 
 /* Static variables and types.  */
 
@@ -244,7 +245,9 @@ static const autofilter_entry_type autof
 #define PE_ARCH_arm_epoc 5
 #define PE_ARCH_arm_wince 6
 
-static const pe_details_type pe_detail_list[] =
+/* Don't make it constant as underscore mode gets possibly overriden
+   by target or -(no-)leading-underscore option.  */
+static pe_details_type pe_detail_list[] =
 {
   {
 #ifdef pe_use_x86_64
@@ -410,6 +413,11 @@ pe_dll_id_target (const char *target)
     if (strcmp (pe_detail_list[i].target_name, target) == 0
 	|| strcmp (pe_detail_list[i].object_target, target) == 0)
       {
+	int u = pe_leading_underscore; /* Underscoring mode. -1 for use default.  */
+	if (u == -1)
+	  bfd_get_target_info (target, NULL, NULL, &u, NULL);
+	if (u != -1)
+	  pe_detail_list[i].underscored = (u != 0 ? TRUE : FALSE);
 	pe_details = pe_detail_list + i;
 	return;
       }
Index: src/ld/emultempl/pe.em
===================================================================
--- src.orig/ld/emultempl/pe.em	2010-02-03 13:42:16.000000000 +0100
+++ src/ld/emultempl/pe.em	2010-03-22 16:17:03.940118000 +0100
@@ -123,8 +123,6 @@ fragment <<EOF
 #define PE_DEF_FILE_ALIGNMENT		0x00000200
 #endif
 
-#define U(S) ${INITIAL_SYMBOL_CHAR} S
-
 static struct internal_extra_pe_aouthdr pe;
 static int dll;
 static int pe_subsystem = ${SUBSYSTEM};
@@ -224,8 +222,12 @@ fragment <<EOF
 					(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
 #define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
 					(OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
-#define OPTION_ENABLE_LONG_SECTION_NAMES \
+#define OPTION_NO_LEADING_UNDERSCORE \
 					(OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
+#define OPTION_LEADING_UNDERSCORE \
+					(OPTION_NO_LEADING_UNDERSCORE + 1)
+#define OPTION_ENABLE_LONG_SECTION_NAMES \
+					(OPTION_LEADING_UNDERSCORE + 1)
 #define OPTION_DISABLE_LONG_SECTION_NAMES \
 					(OPTION_ENABLE_LONG_SECTION_NAMES + 1)
 /* DLLCharacteristics flags */
@@ -267,6 +269,8 @@ gld${EMULATION_NAME}_add_options
     {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
     {"use-nul-prefixed-import-tables", no_argument, NULL,
      OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
+    {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
+    {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
 #ifdef DLL_SUPPORT
     /* getopt allows abbreviations, so we do this to stop it
        from treating -o as an abbreviation for this option.  */
@@ -328,39 +332,40 @@ typedef struct
   int value;
   char *symbol;
   int inited;
+  bfd_boolean is_lead_underscore;
 } definfo;
 
-#define D(field,symbol,def)  {&pe.field,sizeof(pe.field), def, symbol,0}
+#define D(field,symbol,def,usc)  {&pe.field,sizeof(pe.field), def, symbol, 0, usc}
 
 static definfo init[] =
 {
   /* imagebase must be first */
 #define IMAGEBASEOFF 0
-  D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE),
+  D(ImageBase,"__image_base__", NT_EXE_IMAGE_BASE, FALSE),
 #define DLLOFF 1
-  {&dll, sizeof(dll), 0, "__dll__", 0},
+  {&dll, sizeof(dll), 0, "__dll__", 0, FALSE},
 #define MSIMAGEBASEOFF	2
-  D(ImageBase, U ("__ImageBase"), NT_EXE_IMAGE_BASE),
-  D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT),
-  D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT),
-  D(MajorOperatingSystemVersion,"__major_os_version__", 4),
-  D(MinorOperatingSystemVersion,"__minor_os_version__", 0),
-  D(MajorImageVersion,"__major_image_version__", 1),
-  D(MinorImageVersion,"__minor_image_version__", 0),
+  D(ImageBase, "___ImageBase", NT_EXE_IMAGE_BASE, TRUE),
+  D(SectionAlignment,"__section_alignment__", PE_DEF_SECTION_ALIGNMENT, FALSE),
+  D(FileAlignment,"__file_alignment__", PE_DEF_FILE_ALIGNMENT, FALSE),
+  D(MajorOperatingSystemVersion,"__major_os_version__", 4, FALSE),
+  D(MinorOperatingSystemVersion,"__minor_os_version__", 0, FALSE),
+  D(MajorImageVersion,"__major_image_version__", 1, FALSE),
+  D(MinorImageVersion,"__minor_image_version__", 0, FALSE),
 #if defined(TARGET_IS_armpe)  || defined(TARGET_IS_arm_wince_pe)
-  D(MajorSubsystemVersion,"__major_subsystem_version__", 3),
+  D(MajorSubsystemVersion,"__major_subsystem_version__", 3, FALSE),
 #else
-  D(MajorSubsystemVersion,"__major_subsystem_version__", 4),
+  D(MajorSubsystemVersion,"__major_subsystem_version__", 4, FALSE),
 #endif
-  D(MinorSubsystemVersion,"__minor_subsystem_version__", 0),
-  D(Subsystem,"__subsystem__", ${SUBSYSTEM}),
-  D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000),
-  D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000),
-  D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000),
-  D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000),
-  D(LoaderFlags,"__loader_flags__", 0x0),
-  D(DllCharacteristics, "__dll_characteristics__", 0x0), 
-  { NULL, 0, 0, NULL, 0 }
+  D(MinorSubsystemVersion,"__minor_subsystem_version__", 0, FALSE),
+  D(Subsystem,"__subsystem__", ${SUBSYSTEM}, FALSE),
+  D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000, FALSE),
+  D(SizeOfStackCommit,"__size_of_stack_commit__", 0x1000, FALSE),
+  D(SizeOfHeapReserve,"__size_of_heap_reserve__", 0x100000, FALSE),
+  D(SizeOfHeapCommit,"__size_of_heap_commit__", 0x1000, FALSE),
+  D(LoaderFlags,"__loader_flags__", 0x0, FALSE),
+  D(DllCharacteristics, "__dll_characteristics__", 0x0, FALSE),
+  { NULL, 0, 0, NULL, 0 , FALSE}
 };
 
 
@@ -382,6 +387,7 @@ gld_${EMULATION_NAME}_list_options (FILE
   fprintf (file, _("  --stack <size>                     Set size of the initial stack\n"));
   fprintf (file, _("  --subsystem <name>[:<version>]     Set required OS subsystem [& version]\n"));
   fprintf (file, _("  --support-old-code                 Support interworking with old code\n"));
+  fprintf (file, _("  --[no-]leading-underscore          Set explicit symbol underscore prefix mode\n"));
   fprintf (file, _("  --thumb-entry=<symbol>             Set the entry point to be Thumb <symbol>\n"));
 #ifdef DLL_SUPPORT
   fprintf (file, _("  --add-stdcall-alias                Export symbols with and without @nn\n"));
@@ -444,12 +450,16 @@ set_pe_name (char *name, long val)
   /* Find the name and set it.  */
   for (i = 0; init[i].ptr; i++)
     {
-      if (strcmp (name, init[i].symbol) == 0)
+      if (strcmp (name, init[i].symbol
+      		  + ((!init[i].is_lead_underscore
+      		      || pe_leading_underscore) ? 0 : 1)) == 0)
 	{
 	  init[i].value = val;
 	  init[i].inited = 1;
 	  if (strcmp (name,"__image_base__") == 0)
-	    set_pe_name (U ("__ImageBase"), val);
+	    set_pe_name ((pe_leading_underscore == 0 ? "__ImageBase"
+	    					     : "___ImageBase"),
+	    		 val);
 	  return;
 	}
     }
@@ -461,7 +471,7 @@ set_entry_point (void)
 {
   const char *entry;
   const char *initial_symbol_char;
-  int i;
+  int i, u = -1;
 
   static const struct
     {
@@ -504,7 +514,19 @@ set_entry_point (void)
         entry = default_entry;
     }
 
-  initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
+  /* Now we check target's default for getting proper symbol_char.  */
+  u = pe_leading_underscore;
+  if (u == -1 && !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
+    bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
+
+  if (u == 0)
+    initial_symbol_char = "";
+  else if (u != -1)
+    initial_symbol_char = "_";
+  else
+    abort ();
+  pe_leading_underscore = u;
+
   if (*initial_symbol_char != '\0')
     {
       char *alc_entry;
@@ -694,6 +716,12 @@ gld${EMULATION_NAME}_handle_option (int 
     case OPTION_USE_NUL_PREFIXED_IMPORT_TABLES:
       pe_use_nul_prefixed_import_tables = TRUE;
       break;
+    case OPTION_NO_LEADING_UNDERSCORE:
+      pe_leading_underscore = 0;
+      break;
+    case OPTION_LEADING_UNDERSCORE:
+      pe_leading_underscore = 1;
+      break;
 #ifdef DLL_SUPPORT
     case OPTION_OUT_DEF:
       pe_out_def_filename = xstrdup (optarg);
@@ -885,8 +913,11 @@ gld_${EMULATION_NAME}_set_symbols (void)
   for (j = 0; init[j].ptr; j++)
     {
       long val = init[j].value;
+      const char *sy = init[j].symbol;
       lang_assignment_statement_type *rv;
-      rv = lang_add_assignment (exp_assop ('=', init[j].symbol,
+
+      sy += ((!init[j].is_lead_underscore || pe_leading_underscore) ? 0 : 1);
+      rv = lang_add_assignment (exp_assop ('=', sy,
 					   exp_intop (val)));
       if (init[j].size == sizeof (short))
 	*(short *) init[j].ptr = val;
@@ -1110,14 +1141,18 @@ This should work unless it involves cons
 
 	      for (i = 0; i < nsyms; i++)
 		{
-		  if (! CONST_STRNEQ (symbols[i]->name, U ("_head_")))
+		  if (! CONST_STRNEQ (symbols[i]->name,
+		  		      (pe_leading_underscore == 0 ? "_head_"
+		  		      				  : "__head_")))
 		    continue;
 
 		  if (pe_dll_extra_pe_debug)
 		    printf ("->%s\n", symbols[i]->name);
 
 		  pe_data_import_dll = (char*) (symbols[i]->name +
-						sizeof (U ("_head_")) - 1);
+		  				(pe_leading_underscore == 0 ? sizeof ("_head_")
+		  							    : sizeof ("__head_"))
+						- 1);
 		  break;
 		}
 
@@ -1598,7 +1633,10 @@ saw_option (char *option)
   int i;
 
   for (i = 0; init[i].ptr; i++)
-    if (strcmp (init[i].symbol, option) == 0)
+    if (strcmp (init[i].symbol
+    		+ ((!init[i].is_lead_underscore
+    		    || pe_leading_underscore) ? 0 : 1),
+    		option) == 0)
       return init[i].inited;
   return 0;
 }
@@ -1632,7 +1670,8 @@ gld_${EMULATION_NAME}_unrecognized_file 
 	    {
 	      struct bfd_link_hash_entry *h;
 
-	      sprintf (buf, "%s%s", U (""), pe_def_file->exports[i].internal_name);
+	      sprintf (buf, "%s%s", (pe_leading_underscore == 0 ? "" : "_"),
+	               pe_def_file->exports[i].internal_name);
 
 	      h = bfd_link_hash_lookup (link_info.hash, buf, TRUE, TRUE, TRUE);
 	      if (h == (struct bfd_link_hash_entry *) NULL)
Index: src/ld/pe-dll.h
===================================================================
--- src.orig/ld/pe-dll.h	2009-10-26 11:20:26.000000000 +0100
+++ src/ld/pe-dll.h	2010-03-22 14:04:24.099766400 +0100
@@ -38,6 +38,7 @@ extern int pe_dll_compat_implib;
 extern int pe_dll_extra_pe_debug;
 extern int pe_use_nul_prefixed_import_tables;
 extern int pe_use_coff_long_section_names;
+extern int pe_leading_underscore;
 
 typedef enum { EXCLUDESYMS, EXCLUDELIBS, EXCLUDEFORIMPLIB } exclude_type;
 
Index: src/ld/pep-dll.c
===================================================================
--- src.orig/ld/pep-dll.c	2009-10-26 11:20:26.000000000 +0100
+++ src/ld/pep-dll.c	2010-03-22 14:05:46.898449000 +0100
@@ -38,6 +38,7 @@
 				    pep_use_nul_prefixed_import_tables
 #define pe_use_coff_long_section_names \
 				    pep_use_coff_long_section_names
+#define pe_leading_underscore	    pep_leading_underscore
 
 /* External globals.  */
 #define pe_data_import_dll          pep_data_import_dll
Index: src/ld/pep-dll.h
===================================================================
--- src.orig/ld/pep-dll.h	2009-10-26 11:20:27.000000000 +0100
+++ src/ld/pep-dll.h	2010-03-22 14:06:47.305085600 +0100
@@ -38,6 +38,7 @@ extern int pep_dll_compat_implib;
 extern int pep_dll_extra_pe_debug;
 extern int pep_use_nul_prefixed_import_tables;
 extern int pep_use_coff_long_section_names;
+extern int pep_leading_underscore;
 
 typedef enum { EXCLUDESYMS, EXCLUDELIBS, EXCLUDEFORIMPLIB } exclude_type;
 
