Fix gas crash on missing seh_endproc.
authorTristan Gingold <tgingold@free.fr>
Wed, 19 Jul 2017 06:05:30 +0000 (08:05 +0200)
committerTristan Gingold <tgingold@free.fr>
Wed, 19 Jul 2017 06:05:30 +0000 (08:05 +0200)
gas/
* testsuite/gas/pe/seh-x64-err-2.s: New test.
* testsuite/gas/pe/seh-x64-err-2.l: New stderr output.
* testsuite/gas/pe/pe.exp: Add test.
* config/obj-coff-seh.c (obj_coff_seh_do_final): Don't try to end
seh part.

gas/ChangeLog
gas/config/obj-coff-seh.c
gas/testsuite/gas/pe/pe.exp
gas/testsuite/gas/pe/seh-x64-err-2.l [new file with mode: 0644]
gas/testsuite/gas/pe/seh-x64-err-2.s [new file with mode: 0644]

index bd3333b..c53ac9a 100644 (file)
@@ -1,3 +1,11 @@
+2017-07-19  Tristan Gingold  <gingold@adacore.com>
+
+       * testsuite/gas/pe/seh-x64-err-2.s: New test.
+       * testsuite/gas/pe/seh-x64-err-2.l: New stderr output.
+       * testsuite/gas/pe/pe.exp: Add test.
+       * config/obj-coff-seh.c (obj_coff_seh_do_final): Don't try to end
+       seh part.
+
 2017-07-18  Nick Clifton  <nickc@redhat.com>
 
        PR 21775
index 5c028f1..88ce0fc 100644 (file)
@@ -483,10 +483,7 @@ void
 obj_coff_seh_do_final (void)
 {
   if (seh_ctx_cur != NULL)
-    {
-      as_bad (_("open SEH entry at end of file (missing .cfi_endproc)"));
-      do_seh_endproc ();
-    }
+    as_bad (_("open SEH entry at end of file (missing .seh_endproc)"));
 }
 
 /* Enter a prologue element into current context (x64).  */
index 9293b85..8a6c0d9 100644 (file)
@@ -43,6 +43,7 @@ run_dump_test "set"
 # These tests are only for x86_64 targets
 if ([istarget "x86_64-*-mingw*"]) then {
        run_list_test "seh-x64-err-1" ""
+       run_list_test "seh-x64-err-2" ""
        run_dump_test "peseh-x64"
        run_dump_test "peseh-x64-2"
        run_dump_test "peseh-x64-3"
diff --git a/gas/testsuite/gas/pe/seh-x64-err-2.l b/gas/testsuite/gas/pe/seh-x64-err-2.l
new file mode 100644 (file)
index 0000000..48019ec
--- /dev/null
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+
+.*: Error: open SEH entry at end of file \(missing .seh_endproc\)
diff --git a/gas/testsuite/gas/pe/seh-x64-err-2.s b/gas/testsuite/gas/pe/seh-x64-err-2.s
new file mode 100644 (file)
index 0000000..2feff04
--- /dev/null
@@ -0,0 +1,9 @@
+       .file   "t2.c"
+       .text
+
+# missing endproc
+       .seh_proc test_missing_endproc
+test_missing_endproc:
+        .seh_setframe   %rbp, 0
+        .seh_endprologue
+       ret