gdb/csky: remove nullptr return from csky_pseudo_register_name
authorAndrew Burgess <aburgess@redhat.com>
Thu, 1 Sep 2022 14:39:59 +0000 (15:39 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Sun, 2 Oct 2022 13:21:24 +0000 (14:21 +0100)
Building on the previous commits, in this commit I remove two
instances of 'return NULL' from csky_pseudo_register_name, and replace
them with a return of the empty string.

These two are particularly interesting, and worth pulling into their
own commit, because these returns of NULL appear to be depended on
within other parts of the csky code.

In csky-linux-tdep.c in the register collect/supply code, GDB checks
for the register name being nullptr in order to decide if a target
supports a particular feature or not.  I've updated the code to check
for the empty string.

I have no way of testing this change.

gdb/csky-linux-tdep.c
gdb/csky-tdep.c

index 7bcc171218059fa472493d941835c746a23996fe..ea306cded09872affd3691417cf4ba8ab609ccef 100644 (file)
@@ -155,7 +155,7 @@ csky_supply_fregset (const struct regset *regset,
       /* Supply vr0~vr15.  */
       for (i = 0; i < 16; i ++)
        {
-         if (gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)))
+         if (*gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)) != '\0')
            {
              offset = 16 * i;
              regcache->raw_supply (CSKY_VR0_REGNUM + i, fregs + offset);
@@ -164,7 +164,7 @@ csky_supply_fregset (const struct regset *regset,
       /* Supply fr0~fr15.  */
       for (i = 0; i < 16; i ++)
        {
-         if (gdbarch_register_name (gdbarch, (CSKY_FR0_REGNUM + i)))
+         if (*gdbarch_register_name (gdbarch, (CSKY_FR0_REGNUM + i)) != '\0')
            {
              offset = 16 * i;
              regcache->raw_supply (CSKY_FR0_REGNUM + i, fregs + offset);
@@ -173,7 +173,7 @@ csky_supply_fregset (const struct regset *regset,
       /* Supply fr16~fr31.  */
       for (i = 0; i < 16; i ++)
        {
-         if (gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)))
+         if (*gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)) != '\0')
            {
              offset = (16 * 16) + (8 * i);
              regcache->raw_supply (CSKY_FR16_REGNUM + i, fregs + offset);
@@ -182,7 +182,7 @@ csky_supply_fregset (const struct regset *regset,
      /* Supply fcr, fesr, fid.  */
       for (i = 0; i < 3; i ++)
        {
-         if (gdbarch_register_name (gdbarch, fcr_regno[i]))
+         if (*gdbarch_register_name (gdbarch, fcr_regno[i]) != '\0')
            {
              offset = (16 * 16) + (16 * 8) + (4 * i);
              regcache->raw_supply (fcr_regno[i], fregs + offset);
@@ -245,7 +245,7 @@ csky_collect_fregset (const struct regset *regset,
       /* Supply vr0~vr15.  */
       for (i = 0; i < 16; i ++)
        {
-         if (gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)))
+         if (*gdbarch_register_name (gdbarch, (CSKY_VR0_REGNUM + i)) != '\0')
            {
              offset = 16 * i;
              regcache ->raw_collect (CSKY_VR0_REGNUM + i, fregs + offset);
@@ -254,7 +254,7 @@ csky_collect_fregset (const struct regset *regset,
       /* Supply fr16~fr31.  */
       for (i = 0; i < 16; i ++)
        {
-         if (gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)))
+         if (*gdbarch_register_name (gdbarch, (CSKY_FR16_REGNUM + i)) != '\0')
            {
              offset = (16 * 16) + (8 * i);
              regcache ->raw_collect (CSKY_FR16_REGNUM + i, fregs + offset);
@@ -263,7 +263,7 @@ csky_collect_fregset (const struct regset *regset,
       /* Supply fcr, fesr, fid.  */
       for (i = 0; i < 3; i ++)
        {
-         if (gdbarch_register_name (gdbarch, fcr_regno[i]))
+         if (*gdbarch_register_name (gdbarch, fcr_regno[i]) != '\0')
            {
              offset = (16 * 16) + (16 * 8) + (4 * i);
              regcache ->raw_collect (fcr_regno[i], fregs + offset);
index cbf12c18063fefe4972b6af822e8ef299528b2b0..17820aab6eb037dcdfc57accc7f9c8988a164cf4 100644 (file)
@@ -660,21 +660,12 @@ static const char * const csky_register_names[] =
 static const char *
 csky_register_name (struct gdbarch *gdbarch, int reg_nr)
 {
-  int num_regs = gdbarch_num_regs (gdbarch);
-  int num_pseudo_regs =  gdbarch_num_pseudo_regs (gdbarch);
-
-  if ((reg_nr >= num_regs) && (reg_nr < (num_regs + num_pseudo_regs)))
+  if (reg_nr >= gdbarch_num_regs (gdbarch))
     return csky_pseudo_register_name (gdbarch, reg_nr);
 
   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
     return tdesc_register_name (gdbarch, reg_nr);
 
-  if (reg_nr < 0)
-    return NULL;
-
-  if (reg_nr >= gdbarch_num_regs (gdbarch))
-    return NULL;
-
   return csky_register_names[reg_nr];
 }
 
@@ -2543,15 +2534,15 @@ csky_pseudo_register_name (struct gdbarch *gdbarch, int regno)
       if (regno < tdep->fv_pseudo_registers_count)
         {
           if ((regno < 64) && ((regno % 4) >= 2) && !tdep->has_vr0)
-            return NULL;
+            return "";
           else if ((regno >= 64) && ((regno % 4) >= 2))
-            return NULL;
+            return "";
           else
             return fv_pseudo_names[regno];
         }
     }
 
-  return NULL;
+  return "";
 }
 
 /* Read for csky pseudo regs.  */