From: Tom Tromey Date: Fri, 19 Dec 2025 14:40:05 +0000 (-0700) Subject: Use string_view in user_reg_map_name_to_regnum X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7bc2ad4178b753f0a406fb274a437d11771bf1b;p=thirdparty%2Fbinutils-gdb.git Use string_view in user_reg_map_name_to_regnum 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 --- diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index 6966dc1ab0f..d370e1825b8 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 91db7b2eb42..8501356afd4 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 f98d766dbf7..c247a77217f 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 6317afdf65a..3ef7b35e283 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 2d365a4479c..0262ce53ecf 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 530d5871a9c..899303870d2 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 c77633cb59a..2c186955919 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 a4eee1e9869..7782fda7443 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 246dadffcd9..3e19bb8c1d5 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 80a2e1c706d..ede9fc69241 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 d76768f41d7..f59d3e0f2d0 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 922aa06034c..336d654777c 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 a3f8357e075..fb82e164187 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 ad3205774b5..57263f11073 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 3184952b848..0c322541f36 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 5679553f516..2a553c567b9 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 6dc2f36c938..5f42547b448 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 7170cda8e2a..097d27a310d 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 ca972990961..3cd5a4f6ad9 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);