[1/3] Use string_view in user_reg_map_name_to_regnum

Message ID 20251221-rust-no-stoken-v1-1-1b883978202a@tromey.com
State New
Headers
Series Minor cleanups involving string_view |

Commit Message

Tom Tromey Dec. 21, 2025, 7:12 p.m. UTC
  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.
---
 gdb/aarch64-linux-tdep.c  |  2 +-
 gdb/arm-linux-tdep.c      |  7 ++++---
 gdb/arm-tdep.c            | 30 ++++++++++--------------------
 gdb/ax-gdb.c              |  9 ++++-----
 gdb/csky-tdep.c           |  3 +--
 gdb/eval.c                |  3 +--
 gdb/guile/scm-frame.c     |  3 +--
 gdb/i386-tdep.c           |  7 +++----
 gdb/infcmd.c              |  4 +++-
 gdb/nds32-tdep.c          |  2 +-
 gdb/parse.c               |  2 +-
 gdb/ppc-linux-tdep.c      |  5 ++---
 gdb/python/py-registers.c |  6 ++----
 gdb/riscv-none-tdep.c     |  3 +--
 gdb/rs6000-tdep.c         |  4 ++--
 gdb/stap-probe.c          |  6 ++----
 gdb/tracepoint.c          |  3 +--
 gdb/user-regs.c           | 13 +++----------
 gdb/user-regs.h           |  2 +-
 19 files changed, 44 insertions(+), 70 deletions(-)
  

Comments

Simon Marchi Dec. 21, 2025, 7:50 p.m. UTC | #1
On 2025-12-21 14:12, Tom Tromey wrote:
> 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.

LGTM.

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Simon
  

Patch

diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index 6966dc1ab0f84ed39dfb031347c44a65c009a6db..d370e1825b8a402cb0d4cdf3f7227e36dea8fc72 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -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);
 
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index 91db7b2eb4261c13a908c5664469c0e32dfaa292..8501356afd4b18d06fdadf2e14dce0c4297752a9 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -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);
 
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index f98d766dbf797c49b4ac02d3394a09170ec367ce..c247a77217fcc5428b61ee0b5000d2655cb88bb2 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -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);
     }
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 6317afdf65aec8951a698acbd7ef9ca44bdc4502..3ef7b35e283e5f8c6d53c49785e75af47e17e28d 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -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);
diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
index 2d365a4479c5aeb1c16f0f009f7fe3943f5794d1..0262ce53ecf633fb6bf7d065bc489929b5dbf594 100644
--- a/gdb/csky-tdep.c
+++ b/gdb/csky-tdep.c
@@ -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.  */
diff --git a/gdb/eval.c b/gdb/eval.c
index 530d5871a9c02e3f2516ef9f4ed928ce7a8813d3..899303870d222b7db5d50278d6474516d95a08f0 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -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);
 
diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c
index c77633cb59aa2e9b3f499b8b96b63689ecf9bda7..2c18695591974c9ec057a94fa429842f2aca6838 100644
--- a/gdb/guile/scm-frame.c
+++ b/gdb/guile/scm-frame.c
@@ -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));
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index a4eee1e9869f0afdfbee15f7a8cf2196d5b412bd..7782fda7443775ac1472a89c7494b22766e28fb7 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -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);
 
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 246dadffcd9b6f6cc23907ea442a50f0278f474c..3e19bb8c1d521def3f6ba64e004173441e1316f9 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -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)
 	  {
diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
index 80a2e1c706d532f4ae873865a3ee8628bf0c1887..ede9fc692413bbac61430503aea7b8c29c54a2cf 100644
--- a/gdb/nds32-tdep.c
+++ b/gdb/nds32-tdep.c
@@ -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.  */
diff --git a/gdb/parse.c b/gdb/parse.c
index d76768f41d78ee906e31adacbec78a14edc46dd5..f59d3e0f2d05d18ee98df5f7f63a090831b69b1d 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -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--;
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 922aa06034cddb7cbd45987280d95ceedcec34ac..336d654777cc838228e93ad97de2b734091747a7 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -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);
 
diff --git a/gdb/python/py-registers.c b/gdb/python/py-registers.c
index a3f8357e075371c22871049b6f2b60c4622fe271..fb82e164187d268dfda9d13d586f14442e9f3756 100644
--- a/gdb/python/py-registers.c
+++ b/gdb/python/py-registers.c
@@ -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");
diff --git a/gdb/riscv-none-tdep.c b/gdb/riscv-none-tdep.c
index ad3205774b5893edbd06f69946d59c4dbe25313a..57263f11073bbdcb9cb75818083d2cde87848634 100644
--- a/gdb/riscv-none-tdep.c
+++ b/gdb/riscv-none-tdep.c
@@ -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};
     }
 
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 3184952b84868de3b2eb60edf7f3e9f4289b45dc..0c322541f3640e6800cd1a22e421a248dfcdce5a 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -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);
diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c
index 5679553f516ced5af848ae4d3329f6a5100863d7..2a553c567b93ab72d1287820bd6a47ca47eb8dc3 100644
--- a/gdb/stap-probe.c
+++ b/gdb/stap-probe.c
@@ -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"
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 6dc2f36c938a0548aaae3ac9a258c9665eede454..5f42547b448576deb9b7b2dfe4eca72b12e08ce7 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -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);
diff --git a/gdb/user-regs.c b/gdb/user-regs.c
index 7170cda8e2af07c33ed4e7996c573a233b49e775..097d27a310dabdb9f2213a02306c40b1fa95dc35 100644
--- a/gdb/user-regs.c
+++ b/gdb/user-regs.c
@@ -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;
       }
   }
diff --git a/gdb/user-regs.h b/gdb/user-regs.h
index ca9729909613de18275f0314128c6c97c1b07c59..3cd5a4f6ad94eac122375c92fb299ebb324164be 100644
--- a/gdb/user-regs.h
+++ b/gdb/user-regs.h
@@ -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);