maint_print_c_tdesc_cmd: Use type for TYPE_CODE_FLAGS instead of field_type.
[deliverable/binutils-gdb.git] / gdb / target-descriptions.c
index 44ad40122f606b041d1e8e86120dbff40a0554e4..5ba167fc87f941ccf87a8706c377bb20b383b9f9 100644 (file)
@@ -1,6 +1,6 @@
 /* Target description support for GDB.
 
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2016 Free Software Foundation, Inc.
 
    Contributed by CodeSourcery.
 
@@ -31,7 +31,6 @@
 #include "xml-tdesc.h"
 #include "osabi.h"
 
-#include "gdb_assert.h"
 #include "gdb_obstack.h"
 #include "hashtab.h"
 #include "inferior.h"
@@ -102,38 +101,40 @@ typedef struct tdesc_type_flag
 } tdesc_type_flag;
 DEF_VEC_O(tdesc_type_flag);
 
+enum tdesc_type_kind
+{
+  /* Predefined types.  */
+  TDESC_TYPE_INT8,
+  TDESC_TYPE_INT16,
+  TDESC_TYPE_INT32,
+  TDESC_TYPE_INT64,
+  TDESC_TYPE_INT128,
+  TDESC_TYPE_UINT8,
+  TDESC_TYPE_UINT16,
+  TDESC_TYPE_UINT32,
+  TDESC_TYPE_UINT64,
+  TDESC_TYPE_UINT128,
+  TDESC_TYPE_CODE_PTR,
+  TDESC_TYPE_DATA_PTR,
+  TDESC_TYPE_IEEE_SINGLE,
+  TDESC_TYPE_IEEE_DOUBLE,
+  TDESC_TYPE_ARM_FPA_EXT,
+  TDESC_TYPE_I387_EXT,
+
+  /* Types defined by a target feature.  */
+  TDESC_TYPE_VECTOR,
+  TDESC_TYPE_STRUCT,
+  TDESC_TYPE_UNION,
+  TDESC_TYPE_FLAGS
+};
+
 typedef struct tdesc_type
 {
   /* The name of this type.  */
   char *name;
 
   /* Identify the kind of this type.  */
-  enum
-  {
-    /* Predefined types.  */
-    TDESC_TYPE_INT8,
-    TDESC_TYPE_INT16,
-    TDESC_TYPE_INT32,
-    TDESC_TYPE_INT64,
-    TDESC_TYPE_INT128,
-    TDESC_TYPE_UINT8,
-    TDESC_TYPE_UINT16,
-    TDESC_TYPE_UINT32,
-    TDESC_TYPE_UINT64,
-    TDESC_TYPE_UINT128,
-    TDESC_TYPE_CODE_PTR,
-    TDESC_TYPE_DATA_PTR,
-    TDESC_TYPE_IEEE_SINGLE,
-    TDESC_TYPE_IEEE_DOUBLE,
-    TDESC_TYPE_ARM_FPA_EXT,
-    TDESC_TYPE_I387_EXT,
-
-    /* Types defined by a target feature.  */
-    TDESC_TYPE_VECTOR,
-    TDESC_TYPE_STRUCT,
-    TDESC_TYPE_UNION,
-    TDESC_TYPE_FLAGS
-  } kind;
+  enum tdesc_type_kind kind;
 
   /* Kind-specific data.  */
   union
@@ -367,7 +368,8 @@ target_find_description (void)
        {
          struct tdesc_arch_data *data;
 
-         data = gdbarch_data (target_gdbarch (), tdesc_data);
+         data = ((struct tdesc_arch_data *)
+                 gdbarch_data (target_gdbarch (), tdesc_data));
          if (tdesc_has_registers (current_target_desc)
              && data->arch_regs == NULL)
            warning (_("Target-supplied registers are not supported "
@@ -574,7 +576,7 @@ tdesc_find_type (struct gdbarch *gdbarch, const char *id)
   struct tdesc_arch_data *data;
   int i, num_regs;
 
-  data = gdbarch_data (gdbarch, tdesc_data);
+  data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
   num_regs = VEC_length (tdesc_arch_reg, data->arch_regs);
   for (i = 0; i < num_regs; i++)
     {
@@ -804,7 +806,7 @@ tdesc_data_init (struct obstack *obstack)
 struct tdesc_arch_data *
 tdesc_data_alloc (void)
 {
-  return XZALLOC (struct tdesc_arch_data);
+  return XCNEW (struct tdesc_arch_data);
 }
 
 /* Free something allocated by tdesc_data_alloc, if it is not going
@@ -814,7 +816,7 @@ tdesc_data_alloc (void)
 void
 tdesc_data_cleanup (void *data_untyped)
 {
-  struct tdesc_arch_data *data = data_untyped;
+  struct tdesc_arch_data *data = (struct tdesc_arch_data *) data_untyped;
 
   VEC_free (tdesc_arch_reg, data->arch_regs);
   xfree (data);
@@ -912,7 +914,7 @@ tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
 {
   struct tdesc_arch_data *data;
 
-  data = gdbarch_data (gdbarch, tdesc_data);
+  data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
   if (regno < VEC_length (tdesc_arch_reg, data->arch_regs))
     return VEC_index (tdesc_arch_reg, data->arch_regs, regno);
   else
@@ -942,7 +944,8 @@ tdesc_register_name (struct gdbarch *gdbarch, int regno)
 
   if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
     {
-      struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+      struct tdesc_arch_data *data
+       = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
       gdb_assert (data->pseudo_register_name != NULL);
       return data->pseudo_register_name (gdbarch, regno);
@@ -961,7 +964,8 @@ tdesc_register_type (struct gdbarch *gdbarch, int regno)
 
   if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
     {
-      struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+      struct tdesc_arch_data *data
+       = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
       gdb_assert (data->pseudo_register_type != NULL);
       return data->pseudo_register_type (gdbarch, regno);
@@ -1099,7 +1103,8 @@ tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
 
   if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
     {
-      struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+      struct tdesc_arch_data *data
+       = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
       if (data->pseudo_register_reggroup_p != NULL)
        return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
@@ -1120,7 +1125,8 @@ void
 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
                                gdbarch_register_name_ftype *pseudo_name)
 {
-  struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+  struct tdesc_arch_data *data
+    = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
   data->pseudo_register_name = pseudo_name;
 }
@@ -1129,7 +1135,8 @@ void
 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
                                gdbarch_register_type_ftype *pseudo_type)
 {
-  struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+  struct tdesc_arch_data *data
+    = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
   data->pseudo_register_type = pseudo_type;
 }
@@ -1139,7 +1146,8 @@ set_tdesc_pseudo_register_reggroup_p
   (struct gdbarch *gdbarch,
    gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
 {
-  struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
+  struct tdesc_arch_data *data
+    = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
 
   data->pseudo_register_reggroup_p = pseudo_reggroup_p;
 }
@@ -1165,7 +1173,7 @@ tdesc_use_registers (struct gdbarch *gdbarch,
      included.  */
   gdb_assert (tdesc_has_registers (target_desc));
 
-  data = gdbarch_data (gdbarch, tdesc_data);
+  data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
   data->arch_regs = early_data->arch_regs;
   xfree (early_data);
 
@@ -1242,7 +1250,7 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name,
                  int regnum, int save_restore, const char *group,
                  int bitsize, const char *type)
 {
-  struct tdesc_reg *reg = XZALLOC (struct tdesc_reg);
+  struct tdesc_reg *reg = XCNEW (struct tdesc_reg);
 
   reg->name = xstrdup (name);
   reg->target_regnum = regnum;
@@ -1304,7 +1312,7 @@ struct tdesc_type *
 tdesc_create_vector (struct tdesc_feature *feature, const char *name,
                     struct tdesc_type *field_type, int count)
 {
-  struct tdesc_type *type = XZALLOC (struct tdesc_type);
+  struct tdesc_type *type = XCNEW (struct tdesc_type);
 
   type->name = xstrdup (name);
   type->kind = TDESC_TYPE_VECTOR;
@@ -1318,7 +1326,7 @@ tdesc_create_vector (struct tdesc_feature *feature, const char *name,
 struct tdesc_type *
 tdesc_create_struct (struct tdesc_feature *feature, const char *name)
 {
-  struct tdesc_type *type = XZALLOC (struct tdesc_type);
+  struct tdesc_type *type = XCNEW (struct tdesc_type);
 
   type->name = xstrdup (name);
   type->kind = TDESC_TYPE_STRUCT;
@@ -1341,7 +1349,7 @@ tdesc_set_struct_size (struct tdesc_type *type, LONGEST size)
 struct tdesc_type *
 tdesc_create_union (struct tdesc_feature *feature, const char *name)
 {
-  struct tdesc_type *type = XZALLOC (struct tdesc_type);
+  struct tdesc_type *type = XCNEW (struct tdesc_type);
 
   type->name = xstrdup (name);
   type->kind = TDESC_TYPE_UNION;
@@ -1354,7 +1362,7 @@ struct tdesc_type *
 tdesc_create_flags (struct tdesc_feature *feature, const char *name,
                    LONGEST size)
 {
-  struct tdesc_type *type = XZALLOC (struct tdesc_type);
+  struct tdesc_type *type = XCNEW (struct tdesc_type);
 
   type->name = xstrdup (name);
   type->kind = TDESC_TYPE_FLAGS;
@@ -1436,7 +1444,7 @@ tdesc_free_feature (struct tdesc_feature *feature)
 struct tdesc_feature *
 tdesc_create_feature (struct target_desc *tdesc, const char *name)
 {
-  struct tdesc_feature *new_feature = XZALLOC (struct tdesc_feature);
+  struct tdesc_feature *new_feature = XCNEW (struct tdesc_feature);
 
   new_feature->name = xstrdup (name);
 
@@ -1447,13 +1455,13 @@ tdesc_create_feature (struct target_desc *tdesc, const char *name)
 struct target_desc *
 allocate_target_description (void)
 {
-  return XZALLOC (struct target_desc);
+  return XCNEW (struct target_desc);
 }
 
 static void
 free_target_description (void *arg)
 {
-  struct target_desc *target_desc = arg;
+  struct target_desc *target_desc = (struct target_desc *) arg;
   struct tdesc_feature *feature;
   struct property *prop;
   int ix;
@@ -1550,7 +1558,7 @@ static struct cmd_list_element *tdesc_unset_cmdlist;
 static void
 set_tdesc_cmd (char *args, int from_tty)
 {
-  help_list (tdesc_set_cmdlist, "set tdesc ", -1, gdb_stdout);
+  help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout);
 }
 
 static void
@@ -1562,7 +1570,7 @@ show_tdesc_cmd (char *args, int from_tty)
 static void
 unset_tdesc_cmd (char *args, int from_tty)
 {
-  help_list (tdesc_unset_cmdlist, "unset tdesc ", -1, gdb_stdout);
+  help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout);
 }
 
 static void
@@ -1628,7 +1636,7 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
     error (_("The current target description did not come from an XML file."));
 
   filename = lbasename (target_description_filename);
-  function = alloca (strlen (filename) + 1);
+  function = (char *) alloca (strlen (filename) + 1);
   for (inp = filename, outp = function; *inp != '\0'; inp++)
     if (*inp == '.')
       break;
@@ -1675,9 +1683,11 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
              printed_field_type = 1;
            }
 
-         if ((type->kind == TDESC_TYPE_UNION
-             || type->kind == TDESC_TYPE_STRUCT)
-             && VEC_length (tdesc_type_field, type->u.u.fields) > 0)
+         if (((type->kind == TDESC_TYPE_UNION
+               || type->kind == TDESC_TYPE_STRUCT)
+              && VEC_length (tdesc_type_field, type->u.u.fields) > 0)
+             || (type->kind == TDESC_TYPE_FLAGS
+                 && VEC_length (tdesc_type_flag, type->u.f.flags) > 0))
            {
              printf_unfiltered ("  struct tdesc_type *type;\n");
              printed_desc_type = 1;
@@ -1762,7 +1772,7 @@ feature = tdesc_create_feature (result, \"%s\");\n",
                  /* Going first for implicitly sized types, else part handles
                     bitfields.  As reported on xml-tdesc.c implicitly sized types
                     cannot contain a bitfield.  */
-                 if (f->start == 0 && f->end == 0)
+                 if (f->type != NULL)
                    {
                      printf_unfiltered
                        ("  field_type = tdesc_named_type (feature, \"%s\");\n",
@@ -1795,14 +1805,14 @@ feature = tdesc_create_feature (result, \"%s\");\n",
              break;
            case TDESC_TYPE_FLAGS:
              printf_unfiltered
-               ("  field_type = tdesc_create_flags (feature, \"%s\", %d);\n",
+               ("  type = tdesc_create_flags (feature, \"%s\", %d);\n",
                 type->name, (int) type->u.f.size);
              for (ix3 = 0;
                   VEC_iterate (tdesc_type_flag, type->u.f.flags, ix3,
                                flag);
                   ix3++)
                printf_unfiltered
-                 ("  tdesc_add_flag (field_type, %d, \"%s\");\n",
+                 ("  tdesc_add_flag (type, %d, \"%s\");\n",
                   flag->start, flag->name);
              break;
            default:
This page took 0.03094 seconds and 4 git commands to generate.