diff -udr /home/src_v4/binutils-2.23.2/bfd/coffcode.h ./binutils/bfd/coffcode.h
--- /home/src_v4/binutils-2.23.2/bfd/coffcode.h	2011-09-27 11:03:49.000000000 -0500
+++ ./binutils/bfd/coffcode.h	2013-08-28 23:19:52.229731378 -0500
@@ -372,6 +372,7 @@
 #define STRING_SIZE_SIZE 4
 
 #define DOT_DEBUG	".debug"
+#define DOT_ZDEBUG	".zdebug"
 #define GNU_LINKONCE_WI ".gnu.linkonce.wi."
 #define GNU_LINKONCE_WT ".gnu.linkonce.wt."
 #define DOT_RELOC	".reloc"
@@ -545,7 +546,8 @@
       styp_flags = STYP_LIT;
 #endif /* _LIT */
     }
-  else if (CONST_STRNEQ (sec_name, DOT_DEBUG))
+  else if (CONST_STRNEQ (sec_name, DOT_DEBUG)
+           || CONST_STRNEQ (sec_name, DOT_ZDEBUG))
     {
       /* Handle the XCOFF debug section and DWARF2 debug sections.  */
       if (!sec_name[6])
@@ -652,6 +654,7 @@
   bfd_boolean is_dbg = FALSE;
 
   if (CONST_STRNEQ (sec_name, DOT_DEBUG)
+      || CONST_STRNEQ (sec_name, DOT_ZDEBUG)
 #ifdef COFF_LONG_SECTION_NAMES
       || CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)
       || CONST_STRNEQ (sec_name, GNU_LINKONCE_WT)
@@ -821,6 +824,7 @@
 	sec_flags |= SEC_ALLOC;
     }
   else if (CONST_STRNEQ (name, DOT_DEBUG)
+          || CONST_STRNEQ (name, DOT_ZDEBUG)
 #ifdef _COMMENT
 	   || strcmp (name, _COMMENT) == 0
 #endif
@@ -1158,6 +1162,7 @@
   bfd_boolean is_dbg = FALSE;
 
   if (CONST_STRNEQ (name, DOT_DEBUG)
+      || CONST_STRNEQ (name, DOT_ZDEBUG)
 #ifdef COFF_LONG_SECTION_NAMES
       || CONST_STRNEQ (name, GNU_LINKONCE_WI)
       || CONST_STRNEQ (name, GNU_LINKONCE_WT)
diff -udr /home/src_v4/binutils-2.23.2/bfd/coffgen.c ./binutils/bfd/coffgen.c
--- /home/src_v4/binutils-2.23.2/bfd/coffgen.c	2012-07-24 16:06:57.000000000 -0500
+++ ./binutils/bfd/coffgen.c	2013-08-29 00:25:14.663970355 -0500
@@ -145,6 +145,75 @@
   /* FIXME: should this check 'hdr->s_size > 0'.  */
   if (hdr->s_scnptr != 0)
     return_section->flags |= SEC_HAS_CONTENTS;
+  /* Compress/decompress DWARF debug sections with names: .debug_* and
+     .zdebug_*, after the section flags is set.  */
+  if ((flags & SEC_DEBUGGING)
+      && ((name[1] == 'd' && name[6] == '_')
+	  || (name[1] == 'z' && name[7] == '_')))
+    {
+      enum { nothing, compress, decompress } action = nothing;
+      char *new_name = NULL;
+
+      if (bfd_is_section_compressed (abfd, return_section))
+	{
+	  /* Compressed section.  Check if we should decompress.  */
+	  if ((abfd->flags & BFD_DECOMPRESS))
+	    action = decompress;
+	}
+      else if (!bfd_is_section_compressed (abfd, return_section))
+	{
+	  /* Normal section.  Check if we should compress.  */
+	  if ((abfd->flags & BFD_COMPRESS) && return_section->size != 0)
+	    action = compress;
+	}
+
+      switch (action)
+	{
+	case nothing:
+	  break;
+	case compress:
+	  if (!bfd_init_section_compress_status (abfd, return_section))
+	    {
+	      (*_bfd_error_handler)
+		(_("%B: unable to initialize compress status for section %s"),
+		 abfd, name);
+	      return FALSE;
+	    }
+	  if (name[1] != 'z')
+	    {
+	      unsigned int len = strlen (name);
+
+	      new_name = bfd_alloc (abfd, len + 2);
+	      if (new_name == NULL)
+		return FALSE;
+	      new_name[0] = '.';
+	      new_name[1] = 'z';
+	      memcpy (new_name + 2, name + 1, len);
+	    }
+	  break;
+	case decompress:
+	  if (!bfd_init_section_decompress_status (abfd, return_section))
+	    {
+	      (*_bfd_error_handler)
+		(_("%B: unable to initialize decompress status for section %s"),
+		 abfd, name);
+	      return FALSE;
+	    }
+	  if (name[1] == 'z')
+	    {
+	      unsigned int len = strlen (name);
+
+	      new_name = bfd_alloc (abfd, len);
+	      if (new_name == NULL)
+		return FALSE;
+	      new_name[0] = '.';
+	      memcpy (new_name + 1, name + 2, len - 1);
+	    }
+	  break;
+	}
+      if (new_name != NULL)
+	bfd_rename_section (abfd, return_section, new_name);
+    }
 
   return result;
 }
@@ -2349,6 +2418,24 @@
 }
 
 bfd_boolean
+coff_find_nearest_line_discriminator (bfd *abfd,
+				      asection *section,
+				      asymbol **symbols,
+				      bfd_vma offset,
+				      const char **filename_ptr,
+				      const char **functionname_ptr,
+				      unsigned int *line_ptr,
+				      unsigned int *discriminator)
+{
+  *discriminator = 0;
+  return coff_find_nearest_line_with_names (abfd, dwarf_debug_sections,
+                                            section, symbols, offset,
+                                            filename_ptr, functionname_ptr,
+                                            line_ptr);
+}
+
+
+bfd_boolean
 coff_find_inliner_info (bfd *abfd,
 			const char **filename_ptr,
 			const char **functionname_ptr,
diff -udr /home/src_v4/binutils-2.23.2/bfd/coff-i386.c ./binutils/bfd/coff-i386.c
--- /home/src_v4/binutils-2.23.2/bfd/coff-i386.c	2012-07-13 09:22:43.000000000 -0500
+++ ./binutils/bfd/coff-i386.c	2013-08-29 00:25:14.662970362 -0500
@@ -607,6 +607,9 @@
 
 #include "coffcode.h"
 
+#define _bfd_generic_find_nearest_line_discriminator \
+	coff_find_nearest_line_discriminator
+
 const bfd_target
 #ifdef TARGET_SYM
   TARGET_SYM =
@@ -625,13 +628,13 @@
 
   (HAS_RELOC | EXEC_P |		/* object flags */
    HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS ),
 
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */
 #ifdef COFF_WITH_PE
-   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
 #endif
-   | SEC_CODE | SEC_DATA),
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
 
 #ifdef TARGET_UNDERSCORE
   TARGET_UNDERSCORE,		/* leading underscore */
diff -udr /home/src_v4/binutils-2.23.2/bfd/cofflink.c ./binutils/bfd/cofflink.c
--- /home/src_v4/binutils-2.23.2/bfd/cofflink.c	2012-07-13 09:22:45.000000000 -0500
+++ ./binutils/bfd/cofflink.c	2013-08-28 23:23:31.308612451 -0500
@@ -1424,7 +1424,8 @@
       struct internal_reloc *	irel;
       struct internal_reloc *	irelend;
 
-      if ((a->flags & SEC_RELOC) == 0 || a->reloc_count  < 1)
+      if ((a->flags & SEC_RELOC) == 0 || a->reloc_count  < 1
+	  || a->linker_mark == 0)
 	continue;
       /* Don't mark relocs in excluded sections.  */
       if (a->output_section == bfd_abs_section_ptr)
@@ -2426,10 +2427,9 @@
 	contents = secdata->contents;
       else
 	{
-	  bfd_size_type x = o->rawsize ? o->rawsize : o->size;
-	  if (! bfd_get_section_contents (input_bfd, o, flaginfo->contents, 0, x))
-	    return FALSE;
 	  contents = flaginfo->contents;
+	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
+	    return FALSE;
 	}
 
       if ((o->flags & SEC_RELOC) != 0)
@@ -2447,7 +2447,8 @@
 			       ? (flaginfo->section_info[target_index].relocs
 				  + o->output_section->reloc_count)
 			       : flaginfo->internal_relocs)));
-	  if (internal_relocs == NULL)
+	  if (internal_relocs == NULL
+	      && o->reloc_count > 0)
 	    return FALSE;
 
 	  /* Run through the relocs looking for relocs against symbols
diff -udr /home/src_v4/binutils-2.23.2/bfd/coff-x86_64.c ./binutils/bfd/coff-x86_64.c
--- /home/src_v4/binutils-2.23.2/bfd/coff-x86_64.c	2012-01-16 02:30:18.000000000 -0600
+++ ./binutils/bfd/coff-x86_64.c	2013-08-29 00:25:14.661970369 -0500
@@ -731,6 +731,9 @@
 #define amd64coff_object_p coff_object_p
 #endif
 
+#define _bfd_generic_find_nearest_line_discriminator \
+	coff_find_nearest_line_discriminator
+
 const bfd_target
 #ifdef TARGET_SYM
   TARGET_SYM =
@@ -749,13 +752,13 @@
 
   (HAS_RELOC | EXEC_P |		/* Object flags.  */
    HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
+   HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
 
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags.  */
 #if defined(COFF_WITH_PE)
-   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY
+   | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
 #endif
-   | SEC_CODE | SEC_DATA),
+   | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
 
 #ifdef TARGET_UNDERSCORE
   TARGET_UNDERSCORE,		/* Leading underscore.  */
diff -udr /home/src_v4/binutils-2.23.2/bfd/compress.c ./binutils/bfd/compress.c
--- /home/src_v4/binutils-2.23.2/bfd/compress.c	2012-05-17 10:13:19.000000000 -0500
+++ ./binutils/bfd/compress.c	2013-08-28 23:23:31.329612343 -0500
@@ -46,7 +46,7 @@
   strm.avail_out = uncompressed_size;
 
   rc = inflateInit (&strm);
-  while (strm.avail_in > 0)
+  while (strm.avail_in > 0 && strm.avail_out > 0)
     {
       if (rc != Z_OK)
 	return FALSE;
diff -udr /home/src_v4/binutils-2.23.2/bfd/libcoff.h ./binutils/bfd/libcoff.h
--- /home/src_v4/binutils-2.23.2/bfd/libcoff.h	2011-11-02 09:53:04.000000000 -0500
+++ ./binutils/bfd/libcoff.h	2013-08-29 00:46:58.260767443 -0500
@@ -354,6 +354,9 @@
 extern bfd_boolean coff_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **,
    const char **, unsigned int *);
+extern bfd_boolean coff_find_nearest_line_discriminator
+  (bfd *, asection *, asymbol **, bfd_vma, const char **,
+   const char **, unsigned int *, unsigned int *);
 struct dwarf_debug_section;
 extern bfd_boolean coff_find_nearest_line_with_names
   (bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
diff -udr /home/src_v4/binutils-2.23.2/bfd/libcoff-in.h ./binutils/bfd/libcoff-in.h
--- /home/src_v4/binutils-2.23.2/bfd/libcoff-in.h	2011-11-02 09:53:04.000000000 -0500
+++ ./binutils/bfd/libcoff-in.h	2013-08-29 00:25:14.684970289 -0500
@@ -350,6 +350,9 @@
 extern bfd_boolean coff_find_nearest_line
   (bfd *, asection *, asymbol **, bfd_vma, const char **,
    const char **, unsigned int *);
+extern bfd_boolean coff_find_nearest_line_discriminator
+  (bfd *, asection *, asymbol **, bfd_vma, const char **,
+   const char **, unsigned int *, unsigned int *);
 struct dwarf_debug_section;
 extern bfd_boolean coff_find_nearest_line_with_names
   (bfd *, const struct dwarf_debug_section *, asection *, asymbol **,
diff -udr /home/src_v4/binutils-2.23.2/bfd/pe-arm.c ./binutils/bfd/pe-arm.c
--- /home/src_v4/binutils-2.23.2/bfd/pe-arm.c	2009-09-02 02:18:37.000000000 -0500
+++ ./binutils/bfd/pe-arm.c	2013-08-28 23:23:31.333612322 -0500
@@ -60,6 +60,8 @@
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".zdebug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
diff -udr /home/src_v4/binutils-2.23.2/bfd/pe-i386.c ./binutils/bfd/pe-i386.c
--- /home/src_v4/binutils-2.23.2/bfd/pe-i386.c	2009-09-02 02:18:37.000000000 -0500
+++ ./binutils/bfd/pe-i386.c	2013-08-28 23:23:31.338612296 -0500
@@ -38,6 +38,8 @@
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".zdebug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
diff -udr /home/src_v4/binutils-2.23.2/bfd/pe-x86_64.c ./binutils/bfd/pe-x86_64.c
--- /home/src_v4/binutils-2.23.2/bfd/pe-x86_64.c	2010-09-14 15:40:39.000000000 -0500
+++ ./binutils/bfd/pe-x86_64.c	2013-08-28 23:23:31.349612240 -0500
@@ -52,6 +52,8 @@
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".zdebug"), \
+  COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
 { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
   COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
 
diff -udr /home/src_v4/binutils-2.23.2/bfd/peXXigen.c ./binutils/bfd/peXXigen.c
--- /home/src_v4/binutils-2.23.2/bfd/peXXigen.c	2011-04-09 11:06:00.000000000 -0500
+++ ./binutils/bfd/peXXigen.c	2013-08-28 23:23:31.358612193 -0500
@@ -591,9 +591,6 @@
 
   extra->NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
 
-  /* First null out all data directory entries.  */
-  memset (extra->DataDirectory, 0, sizeof (extra->DataDirectory));
-
   add_data_entry (abfd, extra, 0, ".edata", ib);
   add_data_entry (abfd, extra, 2, ".rsrc", ib);
   add_data_entry (abfd, extra, 3, ".pdata", ib);
diff -udr /home/src_v4/binutils-2.23.2/binutils/objdump.c ./binutils/binutils/objdump.c
--- /home/src_v4/binutils-2.23.2/binutils/objdump.c	2012-10-22 05:25:11.000000000 -0500
+++ ./binutils/binutils/objdump.c	2013-08-28 23:24:48.006215180 -0500
@@ -3217,8 +3217,6 @@
     dump_target_specific (abfd);
   if (! dump_debugging_tags && ! suppress_bfd_header)
     putchar ('\n');
-  if (dump_section_headers)
-    dump_headers (abfd);
 
   if (dump_symtab
       || dump_reloc_info
@@ -3226,6 +3224,10 @@
       || dump_debugging
       || dump_dwarf_section_info)
     syms = slurp_symtab (abfd);
+
+  if (dump_section_headers)
+    dump_headers (abfd);
+
   if (dump_dynamic_symtab || dump_dynamic_reloc_info
       || (disassemble && bfd_get_dynamic_symtab_upper_bound (abfd) > 0))
     dynsyms = slurp_dynamic_symtab (abfd);
diff -udr /home/src_v4/binutils-2.23.2/binutils/winduni.c ./binutils/binutils/winduni.c
--- /home/src_v4/binutils-2.23.2/binutils/winduni.c	2011-10-25 03:03:17.000000000 -0500
+++ ./binutils/binutils/winduni.c	2013-08-28 23:12:16.663090400 -0500
@@ -85,7 +85,7 @@
   { 1258, "WINDOWS-1258" },
   { CP_UTF7, "UTF-7" },
   { CP_UTF8, "UTF-8" },
-  { CP_UTF16, "UTF-16" },
+  { CP_UTF16, "UTF-16LE" },
   { (rc_uint_type) -1, NULL }
 };
 
@@ -770,7 +770,7 @@
 
   if (!mb || !iconv_name)
     return 0;
-  iconv_t cd = iconv_open ("UTF-16", iconv_name);
+  iconv_t cd = iconv_open ("UTF-16LE", iconv_name);
 
   while (1)
     {
@@ -843,7 +843,7 @@
 
   if (!u || !iconv_name)
     return 0;
-  iconv_t cd = iconv_open (iconv_name, "UTF-16");
+  iconv_t cd = iconv_open (iconv_name, "UTF-16LE");
 
   while (1)
     {
diff -udr /home/src_v4/binutils-2.23.2/ld/pe-dll.c ./binutils/ld/pe-dll.c
--- /home/src_v4/binutils-2.23.2/ld/pe-dll.c	2012-07-13 08:20:26.000000000 -0500
+++ ./binutils/ld/pe-dll.c	2013-08-28 23:10:02.274816844 -0500
@@ -782,14 +782,18 @@
     {
       for (i = 0; i < NE; i++)
 	{
-	  if (strchr (pe_def_file->exports[i].name, '@'))
+//	  if (strchr (pe_def_file->exports[i].name, '@'))
+ /* Check for stdcall/fastcall decoration, ignore C++ mangled names */
+       if (strchr (pe_def_file->exports[i].name, '@') &&
+           pe_def_file->exports[i].name[0] != '?')
 	    {
 	      /* This will preserve internal_name, which may have been
 		 pointing to the same memory as name, or might not
 		 have.  */
 	      int lead_at = (*pe_def_file->exports[i].name == '@');
 	      char *tmp = xstrdup (pe_def_file->exports[i].name + lead_at);
-	      char *tmp_at = strchr (tmp, '@');
+//	      char *tmp_at = strchr (tmp, '@');
+              char *tmp_at = strrchr (tmp, '@');
 
 	      if (tmp_at)
 	        *tmp_at = 0;
diff -udr /home/src_v4/binutils-2.23.2/ld/scripttempl/pep.sc ./binutils/ld/scripttempl/pep.sc
--- /home/src_v4/binutils-2.23.2/ld/scripttempl/pep.sc	2011-09-27 10:59:55.000000000 -0500
+++ ./binutils/ld/scripttempl/pep.sc	2013-08-29 00:22:28.429462143 -0500
@@ -231,89 +231,157 @@
   {
     *(.debug_aranges)
   }
+  .zdebug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_aranges)
+  }
 
   .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_pubnames)
   }
+  .zdebug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_pubnames)
+  }
 
   .debug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_pubtypes)
   }
+  .zdebug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_pubtypes)
+  }
 
   /* DWARF 2.  */
   .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*})
   }
+  .zdebug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_info${RELOCATING+ .zdebug.gnu.linkonce.wi.*})
+  }
 
   .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_abbrev)
   }
+  .zdebug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_abbrev)
+  }
 
   .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_line)
   }
+  .zdebug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_line)
+  }
 
   .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_frame*)
   }
+  .zdebug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_frame*)
+  }
 
   .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_str)
   }
+  .zdebug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_str)
+  }
 
   .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_loc)
   }
+  .zdebug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_loc)
+  }
 
   .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_macinfo)
   }
+  .zdebug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_macinfo)
+  }
 
   /* SGI/MIPS DWARF 2 extensions.  */
   .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_weaknames)
   }
+  .zdebug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_weaknames)
+  }
 
   .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_funcnames)
   }
+  .zdebug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_funcnames)
+  }
 
   .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_typenames)
   }
+  .zdebug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_typenames)
+  }
 
   .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_varnames)
   }
+  .zdebug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_varnames)
+  }
 
   .debug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_macro)
   }
+  .zdebug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_macro)
+  }
 
   /* DWARF 3.  */
   .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_ranges)
   }
+  .zdebug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_ranges)
+  }
 
   /* DWARF 4.  */
   .debug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_types${RELOCATING+ .gnu.linkonce.wt.*})
   }
+  .zdebug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_types${RELOCATING+ .zdebug.gnu.linkonce.wt.*})
+  }
 }
 EOF
diff -udr /home/src_v4/binutils-2.23.2/ld/scripttempl/pe.sc ./binutils/ld/scripttempl/pe.sc
--- /home/src_v4/binutils-2.23.2/ld/scripttempl/pe.sc	2011-09-27 10:59:55.000000000 -0500
+++ ./binutils/ld/scripttempl/pe.sc	2013-08-29 00:24:25.118128574 -0500
@@ -225,89 +225,157 @@
   {
     *(.debug_aranges)
   }
+  .zdebug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_aranges)
+  }
 
   .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_pubnames)
   }
+  .zdebug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_pubnames)
+  }
 
   .debug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_pubtypes)
   }
+  .zdebug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_pubtypes)
+  }
 
   /* DWARF 2.  */
   .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*})
   }
+  .zdebug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_info${RELOCATING+ .zdebug.gnu.linkonce.wi.*})
+  }
 
   .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_abbrev)
   }
+  .zdebug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_abbrev)
+  }
 
   .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_line)
   }
+  .zdebug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_line)
+  }
 
   .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_frame*)
   }
+  .zdebug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_frame*)
+  }
 
   .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_str)
   }
+  .zdebug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_str)
+  }
 
   .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_loc)
   }
+  .zdebug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_loc)
+  }
 
   .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_macinfo)
   }
+  .zdebug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_macinfo)
+  }
 
   /* SGI/MIPS DWARF 2 extensions.  */
   .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_weaknames)
   }
+  .zdebug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_weaknames)
+  }
 
   .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_funcnames)
   }
+  .zdebug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_funcnames)
+  }
 
   .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_typenames)
   }
+  .zdebug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_typenames)
+  }
 
   .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_varnames)
   }
+  .zdebug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_varnames)
+  }
 
   .debug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_macro)
   }
+  .zdebug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_macro)
+  }
 
   /* DWARF 3.  */
   .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_ranges)
   }
+  .zdebug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_ranges)
+  }
 
   /* DWARF 4.  */
   .debug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
   {
     *(.debug_types${RELOCATING+ .gnu.linkonce.wt.*})
   }
+  .zdebug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
+  {
+    *(.zdebug_types${RELOCATING+ .gnu.linkonce.wt.*})
+  }
 }
 EOF
