]> Git Repo - binutils.git/blobdiff - gdb/gdbserver/tdesc.c
Commonise tdesc_reg and makes use of it in gdbserver tdesc
[binutils.git] / gdb / gdbserver / tdesc.c
index 9f00ecf9386bcbf874b5a2f4df456d73a41943f6..afe0187aeb2a628991d0c168bbfb8800e13fb8f7 100644 (file)
@@ -54,10 +54,19 @@ init_target_desc (struct target_desc *tdesc)
 {
   int offset = 0;
 
-  for (reg &reg : tdesc->reg_defs)
+  /* Go through all the features and populate reg_defs.  */
+  for (const tdesc_reg_up &treg : tdesc->registers)
     {
-      reg.offset = offset;
-      offset += reg.size;
+      int regnum = treg->target_regnum;
+
+      /* Register number will increase (possibly with gaps) or be zero.  */
+      gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ());
+
+      if (regnum != 0)
+       tdesc->reg_defs.resize (regnum, reg (offset));
+
+      tdesc->reg_defs.emplace_back (treg->name.c_str (), offset, treg->bitsize);
+      offset += treg->bitsize;
     }
 
   tdesc->registers_size = offset / 8;
@@ -222,12 +231,10 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name,
 {
   struct target_desc *tdesc = (struct target_desc *) feature;
 
-  gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ());
-
-  if (regnum != 0)
-    tdesc->reg_defs.resize (regnum);
+  tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
+                                 group, bitsize, type);
 
-  tdesc->reg_defs.emplace_back (name, bitsize);
+  tdesc->registers.emplace_back (reg);
 }
 
 /* See common/tdesc.h.  */
This page took 0.033824 seconds and 4 git commands to generate.