diff --git a/ld/ChangeLog b/ld/ChangeLog
index 0d1bcc78b39..7b9a1f84cd2 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2007-07-12  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* scripttempl/pe.sc: Don't include .gcc_except_table and
+	.eh_frame on partial links.
+	* scripttempl/pep.sc: Likewise.
+
 2007-07-12  Alan Modra  <amodra@bigpond.net.au>
 
 	PR 4782
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
index c9931b51489..c9eb16f6dc2 100644
--- a/ld/scripttempl/pe.sc
+++ b/ld/scripttempl/pe.sc
@@ -71,7 +71,7 @@ SECTIONS
     /* ??? Why is .gcc_exc here?  */
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+PROVIDE (etext = .);}
-    *(.gcc_except_table)
+    ${RELOCATING+ *(.gcc_except_table)}
   }
 
   /* The Cygwin32 library uses a section to avoid copying certain data
@@ -95,7 +95,7 @@ SECTIONS
   {
     *(.rdata)
     ${R_RDATA}
-    *(.eh_frame)
+    ${RELOCATING+ *(.eh_frame)}
     ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;}
     ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;}
     *(.rdata_runtime_pseudo_reloc)
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
index edad5ee8ecc..7237832e72b 100644
--- a/ld/scripttempl/pep.sc
+++ b/ld/scripttempl/pep.sc
@@ -71,7 +71,7 @@ SECTIONS
     /* ??? Why is .gcc_exc here?  */
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+PROVIDE (etext = .);}
-    *(.gcc_except_table)
+    ${RELOCATING+ *(.gcc_except_table)}
   }
 
   /* The Cygwin32 library uses a section to avoid copying certain data
@@ -95,7 +95,7 @@ SECTIONS
   {
     *(.rdata)
     ${R_RDATA}
-    *(.eh_frame)
+    ${RELOCATING+ *(.eh_frame)}
     ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;}
     ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;}
     *(.rdata_runtime_pseudo_reloc)