Allow .seh_pushframe to take an optional [code] parameter
authorJ?r?me Gardou <jerome.gardou@gmail.com>
Fri, 23 Apr 2021 15:33:47 +0000 (16:33 +0100)
committerNick Clifton <nickc@redhat.com>
Fri, 23 Apr 2021 15:33:47 +0000 (16:33 +0100)
* config/obj-coff-seh.c (obj_coff_seh_pushframe): Allow an
optional "code" argument.

gas/ChangeLog
gas/config/obj-coff-seh.c

index 7fe07770b61a6815c2d4bc8825f9126d4db75d5a..aedc6ea48a9eafcc2702e0956dd0fc650f75f734 100644 (file)
@@ -1,3 +1,8 @@
+2021-04-23  Jérôme Gardou  <jerome.gardou@gmail.com>
+
+       * config/obj-coff-seh.c (obj_coff_seh_pushframe): Allow an
+       optional "code" argument.
+
 2021-04-23  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (want_disp32): New.
index 964fe87e0ac1b5d3987ac2503386d1c24c29b8e9..f907e729bcf08176710daf185e71028af8f76e48 100644 (file)
@@ -582,12 +582,31 @@ obj_coff_seh_pushreg (int what ATTRIBUTE_UNUSED)
 static void
 obj_coff_seh_pushframe (int what ATTRIBUTE_UNUSED)
 {
+  int code = 0;
+  
   if (!verify_context_and_target (".seh_pushframe", seh_kind_x64)
       || !seh_validate_seg (".seh_pushframe"))
     return;
+  
+  SKIP_WHITESPACE();
+  
+  if (is_name_beginner (*input_line_pointer))
+    {
+      char* identifier;
+
+      get_symbol_name (&identifier);
+      if (strcmp (identifier, "code") != 0)
+       {
+         as_bad(_("invalid argument \"%s\" for .seh_pushframe. Expected \"code\" or nothing"),
+                identifier);
+         return;
+       }
+      code = 1;
+    }
+  
   demand_empty_rest_of_line ();
 
-  seh_x64_make_prologue_element (UWOP_PUSH_MACHFRAME, 0, 0);
+  seh_x64_make_prologue_element (UWOP_PUSH_MACHFRAME, code, 0);
 }
 
 /* Add a register save-unwind token to current context.  */