]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Use string_view in user_reg_map_name_to_regnum
authorTom Tromey <tom@tromey.com>
Fri, 19 Dec 2025 14:40:05 +0000 (07:40 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 22 Dec 2025 20:24:38 +0000 (13:24 -0700)
This changes user_reg_map_name_to_regnum to use std::string_view.
This pointed out some dead code in that function: the "len < 0" test
in the loop can never be true, because earlier code changes 'len' in
this case.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
19 files changed:
gdb/aarch64-linux-tdep.c
gdb/arm-linux-tdep.c
gdb/arm-tdep.c
gdb/ax-gdb.c
gdb/csky-tdep.c
gdb/eval.c
gdb/guile/scm-frame.c
gdb/i386-tdep.c
gdb/infcmd.c
gdb/nds32-tdep.c
gdb/parse.c
gdb/ppc-linux-tdep.c
gdb/python/py-registers.c
gdb/riscv-none-tdep.c
gdb/rs6000-tdep.c
gdb/stap-probe.c
gdb/tracepoint.c
gdb/user-regs.c
gdb/user-regs.h

index 6966dc1ab0f84ed39dfb031347c44a65c009a6db..d370e1825b8a402cb0d4cdf3f7227e36dea8fc72 100644 (file)
@@ -1842,7 +1842,7 @@ aarch64_stap_parse_special_token (struct gdbarch *gdbarch,
       len = tmp - start;
       std::string regname (start, len);
 
-      if (user_reg_map_name_to_regnum (gdbarch, regname.c_str (), len) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, regname) == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               regname.c_str (), p->saved_arg);
 
index 91db7b2eb4261c13a908c5664469c0e32dfaa292..8501356afd4b18d06fdadf2e14dce0c4297752a9 100644 (file)
@@ -1193,7 +1193,7 @@ arm_stap_parse_special_token (struct gdbarch *gdbarch,
       /* Used to save the register name.  */
       const char *start;
       char *regname;
-      int len, offset;
+      int offset;
       int got_minus = 0;
       long displacement;
 
@@ -1207,7 +1207,7 @@ arm_stap_parse_special_token (struct gdbarch *gdbarch,
       if (*tmp != ',')
        return {};
 
-      len = tmp - start;
+      size_t len = tmp - start;
       regname = (char *) alloca (len + 2);
 
       offset = 0;
@@ -1226,7 +1226,8 @@ arm_stap_parse_special_token (struct gdbarch *gdbarch,
       len += offset;
       regname[len] = '\0';
 
-      if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, { regname, len })
+         == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               regname, p->saved_arg);
 
index f98d766dbf797c49b4ac02d3394a09170ec367ce..c247a77217fcc5428b61ee0b5000d2655cb88bb2 100644 (file)
@@ -4757,8 +4757,7 @@ arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
                    {
                      xsnprintf (name_buf, sizeof (name_buf), "%c%d",
                                 reg_char, reg_scaled + i);
-                     regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                                           strlen (name_buf));
+                     regnum = user_reg_map_name_to_regnum (gdbarch, name_buf);
                      regcache->cooked_write (regnum, val + i * unit_length);
                    }
                }
@@ -5183,8 +5182,7 @@ arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
       char name_buf[4];
 
       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
-      return user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                         strlen (name_buf));
+      return user_reg_map_name_to_regnum (gdbarch, name_buf);
     }
 
   /* VFP v3 / Neon registers.  This range is also used for VFP v2
@@ -5194,8 +5192,7 @@ arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
       char name_buf[4];
 
       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
-      return user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                         strlen (name_buf));
+      return user_reg_map_name_to_regnum (gdbarch, name_buf);
     }
 
   return -1;
@@ -9272,8 +9269,7 @@ arm_return_value (struct gdbarch *gdbarch, struct value *function,
              int regnum;
 
              xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
-             regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                                   strlen (name_buf));
+             regnum = user_reg_map_name_to_regnum (gdbarch, name_buf);
              if (writebuf)
                regcache->cooked_write (regnum, writebuf + i * unit_length);
              if (readbuf)
@@ -9799,8 +9795,7 @@ arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
   enum register_status status;
 
   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
-  double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                              strlen (name_buf));
+  double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf);
 
   status = regcache->raw_read (double_regnum, reg_buf);
   if (status != REG_VALID)
@@ -9825,8 +9820,7 @@ arm_neon_quad_read_value (gdbarch *gdbarch, const frame_info_ptr &next_frame,
 {
   std::string raw_reg_name = string_printf ("d%d", quad_reg_index << 1);
   int double_regnum
-    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
-                                  raw_reg_name.length ());
+    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name);
 
   return pseudo_from_concat_raw (next_frame, pseudo_reg_num, double_regnum,
                                 double_regnum + 1);
@@ -9877,8 +9871,7 @@ arm_pseudo_read_value (gdbarch *gdbarch, const frame_info_ptr &next_frame,
 
       std::string raw_reg_name = string_printf ("d%d", s_reg_index >> 1);
       int double_regnum
-       = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
-                                      raw_reg_name.length ());
+       = user_reg_map_name_to_regnum (gdbarch, raw_reg_name);
 
       return pseudo_from_raw_part (next_frame, pseudo_reg_num, double_regnum,
                                   offset);
@@ -9900,8 +9893,7 @@ arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
   int double_regnum;
 
   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
-  double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                              strlen (name_buf));
+  double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf);
 
   regcache->raw_write (double_regnum, buf);
   regcache->raw_write (double_regnum + 1, buf + 8);
@@ -9913,8 +9905,7 @@ arm_neon_quad_write (gdbarch *gdbarch, const frame_info_ptr &next_frame,
 {
   std::string raw_reg_name = string_printf ("d%d", quad_reg_index << 1);
   int double_regnum
-    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.data (),
-                                  raw_reg_name.length ());
+    = user_reg_map_name_to_regnum (gdbarch, raw_reg_name);
 
   pseudo_to_concat_raw (next_frame, buf, double_regnum, double_regnum + 1);
 }
@@ -9964,8 +9955,7 @@ arm_pseudo_write (gdbarch *gdbarch, const frame_info_ptr &next_frame,
 
       std::string raw_reg_name = string_printf ("d%d", s_reg_index >> 1);
       int double_regnum
-       = user_reg_map_name_to_regnum (gdbarch, raw_reg_name.c_str (),
-                                      raw_reg_name.length ());
+       = user_reg_map_name_to_regnum (gdbarch, raw_reg_name);
 
       pseudo_to_raw_part (next_frame, buf, double_regnum, offset);
     }
index 6317afdf65aec8951a698acbd7ef9ca44bdc4502..3ef7b35e283e5f8c6d53c49785e75af47e17e28d 100644 (file)
@@ -1650,18 +1650,17 @@ register_operation::do_generate_ax (struct expression *exp,
                                    struct axs_value *value,
                                    struct type *cast_type)
 {
-  const char *name = std::get<0> (m_storage).c_str ();
-  int len = std::get<0> (m_storage).size ();
+  const std::string &name = std::get<0> (m_storage);
   int reg;
 
-  reg = user_reg_map_name_to_regnum (ax->gdbarch, name, len);
+  reg = user_reg_map_name_to_regnum (ax->gdbarch, name);
   if (reg == -1)
-    internal_error (_("Register $%s not available"), name);
+    internal_error (_("Register $%s not available"), name.c_str ());
   /* No support for tracing user registers yet.  */
   if (reg >= gdbarch_num_cooked_regs (ax->gdbarch))
     error (_("'%s' is a user-register; "
             "GDB cannot yet trace user-register contents."),
-          name);
+          name.c_str ());
   value->kind = axs_lvalue_register;
   value->u.reg = reg;
   value->type = register_type (ax->gdbarch, reg);
index 2d365a4479c5aeb1c16f0f009f7fe3943f5794d1..0262ce53ecf633fb6bf7d065bc489929b5dbf594 100644 (file)
@@ -2443,8 +2443,7 @@ csky_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dw_reg)
 
       xsnprintf (name_buf, sizeof (name_buf), "s%d",
                 dw_reg - FV_PSEUDO_REGNO_FIRST);
-      return user_reg_map_name_to_regnum (gdbarch, name_buf,
-                                         strlen (name_buf));
+      return user_reg_map_name_to_regnum (gdbarch, name_buf);
     }
 
   /* Others, unknown.  */
index 530d5871a9c02e3f2516ef9f4ed928ce7a8813d3..899303870d222b7db5d50278d6474516d95a08f0 100644 (file)
@@ -1132,8 +1132,7 @@ eval_op_register (struct type *expect_type, struct expression *exp,
   int regno;
   struct value *val;
 
-  regno = user_reg_map_name_to_regnum (exp->gdbarch,
-                                      name, strlen (name));
+  regno = user_reg_map_name_to_regnum (exp->gdbarch, name);
   if (regno == -1)
     error (_("Register $%s not available."), name);
 
index c77633cb59aa2e9b3f499b8b96b63689ecf9bda7..2c18695591974c9ec057a94fa429842f2aca6838 100644 (file)
@@ -831,8 +831,7 @@ gdbscm_frame_read_register (SCM self, SCM register_scm)
        {
          found = true;
          regnum = user_reg_map_name_to_regnum (get_frame_arch (frame),
-                                               register_str,
-                                               strlen (register_str));
+                                               register_str);
          if (regnum >= 0)
            value = value_of_register (regnum,
                                       get_next_frame_sentinel_okay (frame));
index a4eee1e9869f0afdfbee15f7a8cf2196d5b412bd..7782fda7443775ac1472a89c7494b22766e28fb7 100644 (file)
@@ -3983,7 +3983,7 @@ i386_stap_parse_special_token_triplet (struct gdbarch *gdbarch,
       len = s - start - 1;
       std::string regname (start, len);
 
-      if (user_reg_map_name_to_regnum (gdbarch, regname.c_str (), len) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, regname) == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               regname.c_str (), p->saved_arg);
 
@@ -4079,7 +4079,7 @@ i386_stap_parse_special_token_three_arg_disp (struct gdbarch *gdbarch,
       len_base = s - start;
       std::string base (start, len_base);
 
-      if (user_reg_map_name_to_regnum (gdbarch, base.c_str (), len_base) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, base) == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               base.c_str (), p->saved_arg);
 
@@ -4092,8 +4092,7 @@ i386_stap_parse_special_token_three_arg_disp (struct gdbarch *gdbarch,
       len_index = s - start;
       std::string index (start, len_index);
 
-      if (user_reg_map_name_to_regnum (gdbarch, index.c_str (),
-                                      len_index) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, index) == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               index.c_str (), p->saved_arg);
 
index 246dadffcd9b6f6cc23907ea442a50f0278f474c..3e19bb8c1d521def3f6ba64e004173441e1316f9 100644 (file)
@@ -2399,7 +2399,9 @@ registers_info (const char *addr_exp, int fpregs)
 
       /* A register name?  */
       {
-       int regnum = user_reg_map_name_to_regnum (gdbarch, start, end - start);
+       int regnum
+         = user_reg_map_name_to_regnum (gdbarch,
+                                        { start, size_t (end - start) });
 
        if (regnum >= 0)
          {
index 80a2e1c706d532f4ae873865a3ee8628bf0c1887..ede9fc692413bbac61430503aea7b8c29c54a2cf 100644 (file)
@@ -2016,7 +2016,7 @@ nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
   /* Cache the register number of fs0.  */
   if (fpu_freg != -1)
-    tdep->fs0_regnum = user_reg_map_name_to_regnum (gdbarch, "fs0", -1);
+    tdep->fs0_regnum = user_reg_map_name_to_regnum (gdbarch, "fs0");
 
   /* Add NDS32 register aliases.  To avoid search in user register name space,
      user_reg_map_name_to_regnum is not used.  */
index d76768f41d78ee906e31adacbec78a14edc46dd5..f59d3e0f2d05d18ee98df5f7f63a090831b69b1d 100644 (file)
@@ -200,7 +200,7 @@ parser_state::push_dollar (struct stoken str)
   /* Handle tokens that refer to machine registers:
      $ followed by a register name.  */
   i = user_reg_map_name_to_regnum (gdbarch (),
-                                  str.ptr + 1, str.length - 1);
+                                  { str.ptr + 1, size_t (str.length - 1) });
   if (i >= 0)
     {
       str.length--;
index 922aa06034cddb7cbd45987280d95ceedcec34ac..336d654777cc838228e93ad97de2b734091747a7 100644 (file)
@@ -1731,7 +1731,6 @@ ppc_stap_parse_special_token (struct gdbarch *gdbarch,
          we would not need to do anything.  */
       const char *s = p->arg;
       char *regname;
-      int len;
 
       while (c_isdigit (*s))
        ++s;
@@ -1743,7 +1742,7 @@ ppc_stap_parse_special_token (struct gdbarch *gdbarch,
          return {};
        }
 
-      len = s - p->arg;
+      size_t len = s - p->arg;
       regname = (char *) alloca (len + 2);
       regname[0] = 'r';
 
@@ -1751,7 +1750,7 @@ ppc_stap_parse_special_token (struct gdbarch *gdbarch,
       ++len;
       regname[len] = '\0';
 
-      if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
+      if (user_reg_map_name_to_regnum (gdbarch, { regname, len }) == -1)
        error (_("Invalid register name `%s' on expression `%s'."),
               regname, p->saved_arg);
 
index a3f8357e075371c22871049b6f2b60c4622fe271..fb82e164187d268dfda9d13d586f14442e9f3756 100644 (file)
@@ -350,8 +350,7 @@ register_descriptor_iter_find (PyObject *self, PyObject *args, PyObject *kw)
 
   if (register_name != NULL && *register_name != '\0')
     {
-      int regnum = user_reg_map_name_to_regnum (gdbarch, register_name,
-                                               strlen (register_name));
+      int regnum = user_reg_map_name_to_regnum (gdbarch, register_name);
       if (regnum >= 0)
        return gdbpy_get_register_descriptor (gdbarch, regnum).release ();
     }
@@ -374,8 +373,7 @@ gdbpy_parse_register_id (struct gdbarch *gdbarch, PyObject *pyo_reg_id,
 
       if (reg_name != NULL)
        {
-         *reg_num = user_reg_map_name_to_regnum (gdbarch, reg_name.get (),
-                                                 strlen (reg_name.get ()));
+         *reg_num = user_reg_map_name_to_regnum (gdbarch, reg_name.get ());
          if (*reg_num >= 0)
            return true;
          PyErr_SetString (PyExc_ValueError, "Bad register");
index ad3205774b5893edbd06f69946d59c4dbe25313a..57263f11073bbdcb9cb75818083d2cde87848634 100644 (file)
@@ -92,8 +92,7 @@ riscv_update_csrmap (struct gdbarch *gdbarch,
     = new struct regcache_map_entry[feature_csr->registers.size() + 1];
   for (auto &csr : feature_csr->registers)
     {
-      int regnum = user_reg_map_name_to_regnum (gdbarch, csr->name.c_str(),
-                                               csr->name.length());
+      int regnum = user_reg_map_name_to_regnum (gdbarch, csr->name);
       riscv_csrmap[i++] = {1, regnum, 0};
     }
 
index 3184952b84868de3b2eb60edf7f3e9f4289b45dc..0c322541f3640e6800cd1a22e421a248dfcdce5a 100644 (file)
@@ -333,7 +333,7 @@ init_sim_regno_table (struct gdbarch *arch)
     {
       int gdb_regno;
 
-      gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i], -1);
+      gdb_regno = user_reg_map_name_to_regnum (arch, segment_regs[i]);
       if (gdb_regno >= 0)
        set_sim_regno (sim_regno, gdb_regno, sim_ppc_sr0_regnum + i);
     }
@@ -374,7 +374,7 @@ init_sim_regno_table (struct gdbarch *arch)
       int gdb_regno = -1;
 
       if (spr_name != NULL)
-       gdb_regno = user_reg_map_name_to_regnum (arch, spr_name, -1);
+       gdb_regno = user_reg_map_name_to_regnum (arch, spr_name);
 
       if (gdb_regno != -1)
        set_sim_regno (sim_regno, gdb_regno, sim_ppc_spr0_regnum + i);
index 5679553f516ced5af848ae4d3329f6a5100863d7..2a553c567b93ab72d1287820bd6a47ca47eb8dc3 100644 (file)
@@ -782,8 +782,7 @@ stap_parse_register_operand (struct stap_parse_info *p)
        regname += gdb_reg_suffix;
     }
 
-  int regnum = user_reg_map_name_to_regnum (gdbarch, regname.c_str (),
-                                           regname.size ());
+  int regnum = user_reg_map_name_to_regnum (gdbarch, regname);
 
   /* Is this a valid register name?  */
   if (regnum == -1)
@@ -802,8 +801,7 @@ stap_parse_register_operand (struct stap_parse_info *p)
          /* This is just a check we perform to make sure that the
             arch-dependent code has provided us with a valid
             register name.  */
-         regnum = user_reg_map_name_to_regnum (gdbarch, newregname.c_str (),
-                                               newregname.size ());
+         regnum = user_reg_map_name_to_regnum (gdbarch, newregname);
 
          if (regnum == -1)
            internal_error (_("Invalid register name '%s' after replacing it"
index 6dc2f36c938a0548aaae3ac9a258c9665eede454..5f42547b448576deb9b7b2dfe4eca72b12e08ce7 100644 (file)
@@ -1355,8 +1355,7 @@ encode_actions_1 (struct command_line *action,
                             (exp->op.get ()));
                        const char *name = regop->get_name ();
 
-                       i = user_reg_map_name_to_regnum (arch,
-                                                        name, strlen (name));
+                       i = user_reg_map_name_to_regnum (arch, name);
                        if (i == -1)
                          internal_error (_("Register $%s not available"),
                                          name);
index 7170cda8e2af07c33ed4e7996c573a233b49e775..097d27a310dabdb9f2213a02306c40b1fa95dc35 100644 (file)
@@ -128,13 +128,8 @@ user_reg_add (struct gdbarch *gdbarch, const char *name,
 }
 
 int
-user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
-                            int len)
+user_reg_map_name_to_regnum (struct gdbarch *gdbarch, std::string_view name)
 {
-  /* Make life easy, set the len to something reasonable.  */
-  if (len < 0)
-    len = strlen (name);
-
   /* Search register name space first - always let an architecture
      specific register override the user registers.  */
   {
@@ -144,7 +139,7 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
       {
        const char *regname = gdbarch_register_name (gdbarch, i);
 
-       if (len == strlen (regname) && strncmp (regname, name, len) == 0)
+       if (regname == name)
          return i;
       }
   }
@@ -157,9 +152,7 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
 
     for (nr = 0, reg = regs->first; reg != NULL; reg = reg->next, nr++)
       {
-       if ((len < 0 && strcmp (reg->name, name))
-           || (len == strlen (reg->name)
-               && strncmp (reg->name, name, len) == 0))
+       if (reg->name == name)
          return gdbarch_num_cooked_regs (gdbarch) + nr;
       }
   }
index ca9729909613de18275f0314128c6c97c1b07c59..3cd5a4f6ad94eac122375c92fb299ebb324164be 100644 (file)
@@ -45,7 +45,7 @@ struct gdbarch;
    index.  */
 
 extern int user_reg_map_name_to_regnum (struct gdbarch *gdbarch,
-                                       const char *str, int len);
+                                       std::string_view str);
 
 extern const char *user_reg_map_regnum_to_name (struct gdbarch *gdbarch,
                                                int regnum);