diff --git a/gas/ChangeLog b/gas/ChangeLog
index d8d89f056a6..24a3c1510fc 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2014-03-25  Nick Clifton  <nickc@redhat.com>
+
+	* config/obj-coff-seh.c (obj_coff_seh_code): New function -
+	switches the current segment back to the code segment recorded
+	when seh_proc was last invoked.
+	* config/obj-coff-seh.h (SEH_CMDS): Add seh_code.
+
 2014-03-25  Alan Modra  <amodra@gmail.com>
 
 	* config/tc-ppc.c (ppc_is_toc_sym): Revert 2014-03-05.
diff --git a/gas/config/obj-coff-seh.c b/gas/config/obj-coff-seh.c
index 88c4a87dc38..ad3fc8757a8 100644
--- a/gas/config/obj-coff-seh.c
+++ b/gas/config/obj-coff-seh.c
@@ -169,6 +169,13 @@ seh_validate_seg (const char *directive)
   return 0;
 }
 
+/* Switch back to the code section, whatever that may be.  */
+static void
+obj_coff_seh_code (int ignored ATTRIBUTE_UNUSED)
+{
+  subseg_set (seh_ctx_cur->code_seg, 0);
+}
+
 static void
 switch_xdata (int subseg, segT code_seg)
 {
diff --git a/gas/config/obj-coff-seh.h b/gas/config/obj-coff-seh.h
index cf4d216e675..cf494851635 100644
--- a/gas/config/obj-coff-seh.h
+++ b/gas/config/obj-coff-seh.h
@@ -56,6 +56,7 @@
   .seh_savereg
   .seh_savexmm
   .seh_pushframe
+  .seh_code
 */
 
 /* architecture specific pdata/xdata handling.  */
@@ -73,6 +74,7 @@
 	{"seh_32", obj_coff_seh_32, 1}, \
 	{"seh_no32", obj_coff_seh_32, 0}, \
 	{"seh_handler", obj_coff_seh_handler, 0}, \
+	{"seh_code", obj_coff_seh_code, 0}, \
 	{"seh_handlerdata", obj_coff_seh_handlerdata, 0},
 
 /* Type definitions.  */
@@ -148,6 +150,7 @@ static void obj_coff_seh_32 (int);
 static void obj_coff_seh_proc  (int);
 static void obj_coff_seh_handler (int);
 static void obj_coff_seh_handlerdata (int);
+static void obj_coff_seh_code (int);
 
 #define UNDSEC bfd_und_section_ptr
 
@@ -201,4 +204,3 @@ static void obj_coff_seh_handlerdata (int);
    PEX64_SCOPE_ENTRY_SIZE * (IDX))
 
 #endif
-