gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gas / itbl-ops.c
index 41fa0335e1b83c4b90a0655e64ab94222b275399..e5d48e48ddc9d4c6d5951351562b4533af307af3 100644 (file)
@@ -1,12 +1,11 @@
 /* itbl-ops.c
-   Copyright 1997, 1999, 2000, 2001, 2002, 2003, 2005, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1997-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
-   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,
@@ -97,7 +96,7 @@
 
 #ifdef DEBUG
 #include <assert.h>
-#define ASSERT(x) assert(x)
+#define ASSERT(x) gas_assert (x)
 #define DBG(x) printf x
 #else
 #define ASSERT(x)
@@ -133,7 +132,7 @@ struct itbl_field {
 struct itbl_entry {
   e_processor processor;       /* processor number */
   e_type type;                 /* dreg/creg/greg/insn */
-  char *name;                  /* mnemionic name for insn/register */
+  char *name;                  /* mnemonic name for insn/register */
   unsigned long value;         /* opcode/instruction mask/register number */
   unsigned long flags;         /* effects of the instruction */
   struct itbl_range range;     /* bit range within instruction for value */
@@ -300,7 +299,10 @@ append_insns_as_macros (void)
 {
   struct ITBL_OPCODE_STRUCT *new_opcodes, *o;
   struct itbl_entry *e, **es;
-  int n, id, size, new_size, new_num_opcodes;
+  int n, size, new_num_opcodes;
+#ifdef USE_MACROS
+  int id;
+#endif
 
   if (!itbl_have_entries)
     return;
@@ -318,12 +320,9 @@ append_insns_as_macros (void)
   ASSERT (size >= 0);
   DBG (("I get=%d\n", size / sizeof (ITBL_OPCODES[0])));
 
-  new_size = sizeof (struct ITBL_OPCODE_STRUCT) * new_num_opcodes;
-  ASSERT (new_size > size);
-
-  /* FIXME since ITBL_OPCODES culd be a static table,
+  /* FIXME since ITBL_OPCODES could be a static table,
                we can't realloc or delete the old memory.  */
-  new_opcodes = (struct ITBL_OPCODE_STRUCT *) malloc (new_size);
+  new_opcodes = XNEWVEC (struct ITBL_OPCODE_STRUCT, new_num_opcodes);
   if (!new_opcodes)
     {
       printf (_("Unable to allocate memory for new instructions\n"));
@@ -335,7 +334,9 @@ append_insns_as_macros (void)
   /* FIXME! some NUMOPCODES are calculated expressions.
                These need to be changed before itbls can be supported.  */
 
+#ifdef USE_MACROS
   id = ITBL_NUM_MACROS;                /* begin the next macro id after the last */
+#endif
   o = &new_opcodes[ITBL_NUM_OPCODES];  /* append macro to opcodes list */
   for (n = e_p0; n < e_nprocs; n++)
     {
@@ -539,7 +540,7 @@ itbl_assemble (char *name, char *s)
                                return 0;       /-* error; invalid operand *-/
                                break;
                        */
-         /* If not a symbol, fall thru to IMMED */
+         /* If not a symbol, fallthru to IMMED */
        case e_immed:
          if (*n == '0' && *(n + 1) == 'x')     /* hex begins 0x...  */
            {
@@ -593,6 +594,7 @@ itbl_disassemble (char *s, unsigned long insn)
     {
       struct itbl_entry *r;
       unsigned long value;
+      char s_value[20];
 
       if (f == e->fields)      /* First operand is preceded by tab.  */
        strcat (s, "\t");
@@ -611,14 +613,18 @@ itbl_disassemble (char *s, unsigned long insn)
          if (r)
            strcat (s, r->name);
          else
-           sprintf (s, "%s$%lu", s, value);
+           {
+             sprintf (s_value, "$%lu", value);
+             strcat (s, s_value);
+           }
          break;
        case e_addr:
          /* Use assembler's symbol table to find symbol.  */
          /* FIXME!! Do we need this?  If so, what about relocs??  */
          /* If not a symbol, fall through to IMMED.  */
        case e_immed:
-         sprintf (s, "%s0x%lx", s, value);
+         sprintf (s_value, "0x%lx", value);
+         strcat (s, s_value);
          break;
        default:
          return 0;             /* error; invalid field spec */
@@ -844,13 +850,11 @@ alloc_entry (e_processor processor, e_type type,
   struct itbl_entry *e, **es;
   if (!name)
     return 0;
-  e = (struct itbl_entry *) malloc (sizeof (struct itbl_entry));
+  e = XNEW (struct itbl_entry);
   if (e)
     {
       memset (e, 0, sizeof (struct itbl_entry));
-      e->name = (char *) malloc (sizeof (strlen (name)) + 1);
-      if (e->name)
-       strcpy (e->name, name);
+      e->name = xstrdup (name);
       e->processor = processor;
       e->type = type;
       e->value = value;
@@ -868,7 +872,7 @@ alloc_field (e_type type, int sbit, int ebit,
             unsigned long flags)
 {
   struct itbl_field *f;
-  f = (struct itbl_field *) malloc (sizeof (struct itbl_field));
+  f = XNEW (struct itbl_field);
   if (f)
     {
       memset (f, 0, sizeof (struct itbl_field));
This page took 0.027053 seconds and 4 git commands to generate.