Don't write to inferior_ptid in tracectf.c
[deliverable/binutils-gdb.git] / gas / cond.c
index d6c32acc2532f5de48f65f15fb06b2a1cb60cef2..9753369e1882cf4f8a244b7720f0c3e3ca2adacd 100644 (file)
@@ -1,12 +1,11 @@
 /* cond.c - conditional assembly pseudo-ops, and .include
 /* cond.c - conditional assembly pseudo-ops, and .include
-   Copyright 1990, 1991, 1992, 1993, 1995, 1997, 1998, 2000, 2001, 2002,
-   2003 Free Software Foundation, Inc.
+   Copyright (C) 1990-2020 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
@@ -20,6 +19,7 @@
    02110-1301, USA.  */
 
 #include "as.h"
    02110-1301, USA.  */
 
 #include "as.h"
+#include "sb.h"
 #include "macro.h"
 
 #include "obstack.h"
 #include "macro.h"
 
 #include "obstack.h"
    scanned.  */
 struct obstack cond_obstack;
 
    scanned.  */
 struct obstack cond_obstack;
 
-struct file_line {
-  char *file;
+struct file_line
+{
+  const char *file;
   unsigned int line;
 };
 
 /* We push one of these structures for each .if, and pop it at the
    .endif.  */
 
   unsigned int line;
 };
 
 /* We push one of these structures for each .if, and pop it at the
    .endif.  */
 
-struct conditional_frame {
+struct conditional_frame
+{
   /* The source file & line number of the "if".  */
   struct file_line if_file_line;
   /* The source file & line of the "else".  */
   /* The source file & line number of the "if".  */
   struct file_line if_file_line;
   /* The source file & line of the "else".  */
@@ -77,7 +79,7 @@ s_ifdef (int test_defined)
   SKIP_WHITESPACE ();
   name = input_line_pointer;
 
   SKIP_WHITESPACE ();
   name = input_line_pointer;
 
-  if (!is_name_beginner (*name))
+  if (!is_name_beginner (*name) && *name != '"')
     {
       as_bad (_("invalid identifier for \".ifdef\""));
       obstack_1grow (&cond_obstack, 0);
     {
       as_bad (_("invalid identifier for \".ifdef\""));
       obstack_1grow (&cond_obstack, 0);
@@ -85,12 +87,12 @@ s_ifdef (int test_defined)
       return;
     }
 
       return;
     }
 
-  c = get_symbol_end ();
+  c = get_symbol_name (& name);
   symbolP = symbol_find (name);
   symbolP = symbol_find (name);
-  *input_line_pointer = c;
+  (void) restore_line_pointer (c);
 
   initialize_cframe (&cframe);
 
   initialize_cframe (&cframe);
-  
+
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
@@ -108,9 +110,9 @@ s_ifdef (int test_defined)
       cframe.ignoring = ! (test_defined ^ is_defined);
     }
 
       cframe.ignoring = ! (test_defined ^ is_defined);
     }
 
-  current_cframe = ((struct conditional_frame *)
-                   obstack_copy (&cond_obstack, &cframe,
-                                 sizeof (cframe)));
+  current_cframe =
+    (struct conditional_frame *) obstack_alloc (&cond_obstack, sizeof cframe);
+  memcpy (current_cframe, &cframe, sizeof cframe);
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
@@ -128,7 +130,7 @@ s_if (int arg)
   struct conditional_frame cframe;
   int t;
   char *stop = NULL;
   struct conditional_frame cframe;
   int t;
   char *stop = NULL;
-  char stopc;
+  char stopc = 0;
 
   if (flag_mri)
     stop = mri_comment_field (&stopc);
 
   if (flag_mri)
     stop = mri_comment_field (&stopc);
@@ -166,8 +168,9 @@ s_if (int arg)
      using an undefined result.  No big deal.  */
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! t;
      using an undefined result.  No big deal.  */
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! t;
-  current_cframe = ((struct conditional_frame *)
-                   obstack_copy (&cond_obstack, &cframe, sizeof (cframe)));
+  current_cframe =
+    (struct conditional_frame *) obstack_alloc (&cond_obstack, sizeof cframe);
+  memcpy (current_cframe, & cframe, sizeof cframe);
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
@@ -190,7 +193,7 @@ s_ifb (int test_blank)
   struct conditional_frame cframe;
 
   initialize_cframe (&cframe);
   struct conditional_frame cframe;
 
   initialize_cframe (&cframe);
-  
+
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
   if (cframe.dead_tree)
     cframe.ignoring = 1;
   else
@@ -202,9 +205,9 @@ s_ifb (int test_blank)
       cframe.ignoring = (test_blank == !is_eol);
     }
 
       cframe.ignoring = (test_blank == !is_eol);
     }
 
-  current_cframe = ((struct conditional_frame *)
-                   obstack_copy (&cond_obstack, &cframe,
-                                 sizeof (cframe)));
+  current_cframe =
+    (struct conditional_frame *) obstack_alloc (&cond_obstack, sizeof cframe);
+  memcpy (current_cframe, &cframe, sizeof cframe);
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
@@ -261,7 +264,7 @@ void
 s_ifc (int arg)
 {
   char *stop = NULL;
 s_ifc (int arg)
 {
   char *stop = NULL;
-  char stopc;
+  char stopc = 0;
   char *s1, *s2;
   int len1, len2;
   int res;
   char *s1, *s2;
   int len1, len2;
   int res;
@@ -283,10 +286,11 @@ s_ifc (int arg)
 
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! (res ^ arg);
 
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! (res ^ arg);
-  current_cframe = ((struct conditional_frame *)
-                   obstack_copy (&cond_obstack, &cframe, sizeof (cframe)));
-
-  if (LISTING_SKIP_COND ()
+  current_cframe =
+    (struct conditional_frame *) obstack_alloc (&cond_obstack, sizeof cframe);
+  memcpy (current_cframe, &cframe, sizeof cframe);
+  
+ if (LISTING_SKIP_COND ()
       && cframe.ignoring
       && (cframe.previous_cframe == NULL
          || ! cframe.previous_cframe->ignoring))
       && cframe.ignoring
       && (cframe.previous_cframe == NULL
          || ! cframe.previous_cframe->ignoring))
@@ -310,15 +314,15 @@ s_elseif (int arg)
       as_bad (_("\".elseif\" after \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
       as_bad (_("\".elseif\" after \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
-                   _("here is the previous \"else\""));
+                   _("here is the previous \".else\""));
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
-                   _("here is the previous \"if\""));
+                   _("here is the previous \".if\""));
     }
   else
     {
     }
   else
     {
-      as_where (&current_cframe->else_file_line.file,
-               &current_cframe->else_file_line.line);
+      current_cframe->else_file_line.file
+               = as_where (&current_cframe->else_file_line.line);
 
       current_cframe->dead_tree |= !current_cframe->ignoring;
       current_cframe->ignoring = current_cframe->dead_tree;
 
       current_cframe->dead_tree |= !current_cframe->ignoring;
       current_cframe->ignoring = current_cframe->dead_tree;
@@ -413,18 +417,18 @@ s_else (int arg ATTRIBUTE_UNUSED)
     }
   else if (current_cframe->else_seen)
     {
     }
   else if (current_cframe->else_seen)
     {
-      as_bad (_("duplicate \"else\""));
+      as_bad (_("duplicate \".else\""));
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
       as_bad_where (current_cframe->else_file_line.file,
                    current_cframe->else_file_line.line,
-                   _("here is the previous \"else\""));
+                   _("here is the previous \".else\""));
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
-                   _("here is the previous \"if\""));
+                   _("here is the previous \".if\""));
     }
   else
     {
     }
   else
     {
-      as_where (&current_cframe->else_file_line.file,
-               &current_cframe->else_file_line.line);
+      current_cframe->else_file_line.file
+               = as_where (&current_cframe->else_file_line.line);
 
       current_cframe->ignoring =
        current_cframe->dead_tree | !current_cframe->ignoring;
 
       current_cframe->ignoring =
        current_cframe->dead_tree | !current_cframe->ignoring;
@@ -477,8 +481,9 @@ s_ifeqs (int arg)
 
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! (res ^ arg);
 
   initialize_cframe (&cframe);
   cframe.ignoring = cframe.dead_tree || ! (res ^ arg);
-  current_cframe = ((struct conditional_frame *)
-                   obstack_copy (&cond_obstack, &cframe, sizeof (cframe)));
+  current_cframe =
+    (struct conditional_frame *) obstack_alloc (&cond_obstack, sizeof cframe);
+  memcpy (current_cframe, &cframe, sizeof cframe);
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
 
   if (LISTING_SKIP_COND ()
       && cframe.ignoring
@@ -527,8 +532,8 @@ static void
 initialize_cframe (struct conditional_frame *cframe)
 {
   memset (cframe, 0, sizeof (*cframe));
 initialize_cframe (struct conditional_frame *cframe)
 {
   memset (cframe, 0, sizeof (*cframe));
-  as_where (&cframe->if_file_line.file,
-           &cframe->if_file_line.line);
+  cframe->if_file_line.file
+           = as_where (&cframe->if_file_line.line);
   cframe->previous_cframe = current_cframe;
   cframe->dead_tree = current_cframe != NULL && current_cframe->ignoring;
   cframe->macro_nest = macro_nest;
   cframe->previous_cframe = current_cframe;
   cframe->dead_tree = current_cframe != NULL && current_cframe->ignoring;
   cframe->macro_nest = macro_nest;
@@ -548,6 +553,7 @@ cond_finish_check (int nest)
        as_bad (_("end of macro inside conditional"));
       else
        as_bad (_("end of file inside conditional"));
        as_bad (_("end of macro inside conditional"));
       else
        as_bad (_("end of file inside conditional"));
+
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
                    _("here is the start of the unterminated conditional"));
       as_bad_where (current_cframe->if_file_line.file,
                    current_cframe->if_file_line.line,
                    _("here is the start of the unterminated conditional"));
This page took 0.026858 seconds and 4 git commands to generate.