From: Pedro Alves <pedro@palves.net>
To: gdb-patches@sourceware.org
Subject: [PATCH 6/7] Convert location_spec_to_string to a method
Date: Fri, 27 May 2022 19:02:47 +0100 [thread overview]
Message-ID: <20220527180248.2990723-7-pedro@palves.net> (raw)
In-Reply-To: <20220527180248.2990723-1-pedro@palves.net>
This converts location_spec_to_string to a method of location_spec,
simplifying the code using it, as it no longer has to use
std::unique_ptr::get().
Change-Id: I621bdad8ea084470a2724163f614578caf8f2dd5
---
gdb/breakpoint.c | 38 +++++++++++++++-----------------------
gdb/elfread.c | 3 +--
gdb/guile/scm-breakpoint.c | 5 ++---
gdb/linespec.c | 2 +-
gdb/location.c | 8 --------
gdb/location.h | 16 ++++++----------
gdb/python/py-breakpoint.c | 2 +-
gdb/remote.c | 2 +-
8 files changed, 27 insertions(+), 49 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 9f5514d8a1b..266866eed8d 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6007,8 +6007,7 @@ print_breakpoint_location (const breakpoint *b,
set_current_program_space (loc->pspace);
if (b->display_canonical)
- uiout->field_string ("what",
- location_spec_to_string (b->locspec.get ()));
+ uiout->field_string ("what", b->locspec->to_string ());
else if (loc && loc->symtab)
{
const struct symbol *sym = loc->symbol;
@@ -6042,8 +6041,7 @@ print_breakpoint_location (const breakpoint *b,
}
else
{
- uiout->field_string ("pending",
- location_spec_to_string (b->locspec.get ()));
+ uiout->field_string ("pending", b->locspec->to_string ());
/* If extra_string is available, it could be holding a condition
or dprintf arguments. In either case, make sure it is printed,
too, but only for non-MI streams. */
@@ -6505,7 +6503,7 @@ print_one_breakpoint_location (struct breakpoint *b,
}
else if (b->locspec != nullptr)
{
- const char *str = location_spec_to_string (b->locspec.get ());
+ const char *str = b->locspec->to_string ();
if (str != nullptr)
uiout->field_string ("original-location", str);
}
@@ -8282,7 +8280,7 @@ code_breakpoint::code_breakpoint (struct gdbarch *gdbarch_,
{
/* We already know the marker exists, otherwise, we wouldn't
see a sal for it. */
- const char *p = &location_spec_to_string (locspec_.get ())[3];
+ const char *p = &locspec_->to_string ()[3];
const char *endp;
p = skip_spaces (p);
@@ -9244,8 +9242,8 @@ void
ranged_breakpoint::print_recreate (struct ui_file *fp) const
{
gdb_printf (fp, "break-range %s, %s",
- location_spec_to_string (locspec.get ()),
- location_spec_to_string (locspec_range_end.get ()));
+ locspec->to_string (),
+ locspec_range_end->to_string ());
print_recreate_thread (fp);
}
@@ -11353,19 +11351,18 @@ say_where (const breakpoint *b)
a condition or dprintf arguments. */
if (b->extra_string == NULL)
{
- gdb_printf (_(" (%s) pending."),
- location_spec_to_string (b->locspec.get ()));
+ gdb_printf (_(" (%s) pending."), b->locspec->to_string ());
}
else if (b->type == bp_dprintf)
{
gdb_printf (_(" (%s,%s) pending."),
- location_spec_to_string (b->locspec.get ()),
+ b->locspec->to_string (),
b->extra_string.get ());
}
else
{
gdb_printf (_(" (%s %s) pending."),
- location_spec_to_string (b->locspec.get ()),
+ b->locspec->to_string (),
b->extra_string.get ());
}
}
@@ -11393,8 +11390,7 @@ say_where (const breakpoint *b)
/* This is not ideal, but each location may have a
different file name, and this at least reflects the
real situation somewhat. */
- gdb_printf (": %s.",
- location_spec_to_string (b->locspec.get ()));
+ gdb_printf (": %s.", b->locspec->to_string ());
}
if (b->loc->next)
@@ -11659,7 +11655,7 @@ ordinary_breakpoint::print_recreate (struct ui_file *fp) const
internal_error (__FILE__, __LINE__,
_("unhandled breakpoint type %d"), (int) type);
- gdb_printf (fp, " %s", location_spec_to_string (locspec.get ()));
+ gdb_printf (fp, " %s", locspec->to_string ());
/* Print out extra_string if this breakpoint is pending. It might
contain, for example, conditions that were set by the user. */
@@ -11822,8 +11818,7 @@ bkpt_probe_create_sals_from_location_spec (location_spec *locspec,
struct linespec_sals lsal;
lsal.sals = parse_probes (locspec, NULL, canonical);
- lsal.canonical
- = xstrdup (location_spec_to_string (canonical->locspec.get ()));
+ lsal.canonical = xstrdup (canonical->locspec->to_string ());
canonical->lsals.push_back (std::move (lsal));
}
@@ -11906,7 +11901,7 @@ tracepoint::print_recreate (struct ui_file *fp) const
internal_error (__FILE__, __LINE__,
_("unhandled tracepoint type %d"), (int) type);
- gdb_printf (fp, " %s", location_spec_to_string (locspec.get ()));
+ gdb_printf (fp, " %s", locspec->to_string ());
print_recreate_thread (fp);
if (pass_count)
@@ -11951,9 +11946,7 @@ dprintf_breakpoint::re_set ()
void
dprintf_breakpoint::print_recreate (struct ui_file *fp) const
{
- gdb_printf (fp, "dprintf %s,%s",
- location_spec_to_string (locspec.get ()),
- extra_string.get ());
+ gdb_printf (fp, "dprintf %s,%s", locspec->to_string (), extra_string.get ());
print_recreate_thread (fp);
}
@@ -12001,8 +11994,7 @@ strace_marker_create_sals_from_location_spec (location_spec *locspec,
canonical->locspec
= new_linespec_location_spec (&ptr, symbol_name_match_type::FULL);
- lsal.canonical
- = xstrdup (location_spec_to_string (canonical->locspec.get ()));
+ lsal.canonical = xstrdup (canonical->locspec->to_string ());
canonical->lsals.push_back (std::move (lsal));
}
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 2fe02805d01..8ff62a1fed5 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -1026,8 +1026,7 @@ elf_gnu_ifunc_resolver_return_stop (code_breakpoint *b)
resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
- const char *locspec_str = location_spec_to_string (b->locspec.get ());
- elf_gnu_ifunc_record_cache (locspec_str, resolved_pc);
+ elf_gnu_ifunc_record_cache (b->locspec->to_string (), resolved_pc);
b->type = bp_breakpoint;
update_breakpoint_locations (b, current_program_space,
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c
index c358f0ba99d..5406b74a389 100644
--- a/gdb/guile/scm-breakpoint.c
+++ b/gdb/guile/scm-breakpoint.c
@@ -189,7 +189,7 @@ bpscm_print_breakpoint_smob (SCM self, SCM port, scm_print_state *pstate)
if (b->locspec != nullptr)
{
- const char *str = location_spec_to_string (b->locspec.get ());
+ const char *str = b->locspec->to_string ();
if (str != nullptr)
gdbscm_printf (port, " @%s", str);
}
@@ -859,8 +859,7 @@ gdbscm_breakpoint_location (SCM self)
if (bp_smob->bp->type != bp_breakpoint)
return SCM_BOOL_F;
- const char *str
- = location_spec_to_string (bp_smob->bp->locspec.get ());
+ const char *str = bp_smob->bp->locspec->to_string ();
if (str == nullptr)
str = "";
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 976e728a301..5c75e2ec979 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -3149,7 +3149,7 @@ decode_line_full (struct location_spec *locspec, int flags,
if (result.size () == 0)
throw_error (NOT_SUPPORTED_ERROR, _("Location %s not available"),
- location_spec_to_string (locspec));
+ locspec->to_string ());
gdb_assert (result.size () == 1 || canonical->pre_expanded);
canonical->pre_expanded = 1;
diff --git a/gdb/location.c b/gdb/location.c
index 9643ea857a3..e22ee414070 100644
--- a/gdb/location.c
+++ b/gdb/location.c
@@ -345,14 +345,6 @@ explicit_location_spec::to_linespec () const
return explicit_to_string_internal (true, this);
}
-/* See description in location.h. */
-
-const char *
-location_spec_to_string (struct location_spec *locspec)
-{
- return locspec->to_string ();
-}
-
/* Find an instance of the quote character C in the string S that is
outside of all single- and double-quoted strings (i.e., any quoting
other than C). */
diff --git a/gdb/location.h b/gdb/location.h
index 9783daadac6..69524713402 100644
--- a/gdb/location.h
+++ b/gdb/location.h
@@ -83,7 +83,12 @@ struct location_spec
/* Return true if this location spec is empty, false otherwise. */
virtual bool empty_p () const = 0;
- /* Return a string representation of this location. */
+ /* Return a string representation of this location.
+
+ This function may return NULL for unspecified linespecs, e.g,
+ LINESPEC_LOCATION_SPEC and spec_string is NULL.
+
+ The result is cached in the locspec. */
const char *to_string () const
{
if (as_string.empty ())
@@ -233,15 +238,6 @@ struct probe_location_spec : public location_spec
std::string compute_string () const override;
};
-/* Return a string representation of LOCSPEC.
- This function may return NULL for unspecified linespecs,
- e.g, LINESPEC_LOCATION_SPEC and spec_string is NULL.
-
- The result is cached in LOCSPEC. */
-
-extern const char *
- location_spec_to_string (location_spec *locspec);
-
/* Create a new linespec location spec. */
extern location_spec_up new_linespec_location_spec
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index bab1c60a43e..2b9f6f33cff 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -412,7 +412,7 @@ bppy_get_location (PyObject *self, void *closure)
&& obj->bp->type != bp_hardware_breakpoint)
Py_RETURN_NONE;
- const char *str = location_spec_to_string (obj->bp->locspec.get ());
+ const char *str = obj->bp->locspec->to_string ();
if (str == nullptr)
str = "";
return host_string_to_python_string (str).release ();
diff --git a/gdb/remote.c b/gdb/remote.c
index 7bcd6e3e336..ed834228829 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -13375,7 +13375,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
if (ret < 0 || ret >= buf.size ())
error ("%s", err_msg);
- const char *str = location_spec_to_string (b->locspec.get ());
+ const char *str = b->locspec->to_string ();
encode_source_string (b->number, loc->address, "at", str,
buf.data () + strlen (buf.data ()),
buf.size () - strlen (buf.data ()));
--
2.36.0
next prev parent reply other threads:[~2022-05-27 18:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-27 18:02 [PATCH 0/7] location -> location spec Pedro Alves
2022-05-27 18:02 ` [PATCH 1/7] event_location -> location_spec Pedro Alves
2022-05-28 10:08 ` Philippe Waroquiers
2022-05-30 15:02 ` Pedro Alves
2022-05-27 18:02 ` [PATCH 2/7] Eliminate the two-level data structures behind location_specs Pedro Alves
2022-05-30 15:09 ` Pedro Alves
2022-05-27 18:02 ` [PATCH 3/7] Eliminate copy_location_spec Pedro Alves
2022-05-27 18:02 ` [PATCH 4/7] Convert location_spec_empty_p to a method Pedro Alves
2022-05-27 18:02 ` [PATCH 5/7] Convert location_spec_type " Pedro Alves
2022-05-27 18:02 ` Pedro Alves [this message]
2022-05-27 18:02 ` [PATCH 7/7] Convert set_location_spec_string " Pedro Alves
2022-05-30 15:20 ` Pedro Alves
2022-06-15 19:47 ` [PATCH 0/7] location -> location spec Tom Tromey
2022-06-17 9:24 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220527180248.2990723-7-pedro@palves.net \
--to=pedro@palves.net \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).