public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom Tromey <tromey@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Add bp_static_marker_tracepoint Date: Fri, 29 Apr 2022 22:23:51 +0000 (GMT) [thread overview] Message-ID: <20220429222351.366C3385781D@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7b572efb48e6193149b803eac6256f3e423b7060 commit 7b572efb48e6193149b803eac6256f3e423b7060 Author: Tom Tromey <tom@tromey.com> Date: Sat Jan 15 20:01:41 2022 -0700 Add bp_static_marker_tracepoint Because the actual construction of a breakpoint is buried deep in create_breakpoint, at present it's necessary to have a new bp_ enumerator constant any time a new subclass is needed. Static marker tracepoints are one such case, so this patch introduces bp_static_marker_tracepoint and updates various spots to recognize it. Diff: --- gdb/breakpoint.c | 32 +++++++++++++++++++++++--------- gdb/breakpoint.h | 2 ++ gdb/remote.c | 3 ++- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index aea6b994ae8..fc8892501c0 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1180,7 +1180,8 @@ is_tracepoint_type (bptype type) { return (type == bp_tracepoint || type == bp_fast_tracepoint - || type == bp_static_tracepoint); + || type == bp_static_tracepoint + || type == bp_static_marker_tracepoint); } /* See breakpoint.h. */ @@ -1208,6 +1209,7 @@ new_breakpoint_from_type (bptype type) case bp_fast_tracepoint: case bp_static_tracepoint: + case bp_static_marker_tracepoint: case bp_tracepoint: b = new tracepoint (); break; @@ -1288,7 +1290,8 @@ validate_commands_for_breakpoint (struct breakpoint *b, if (b->type == bp_fast_tracepoint) error (_("The 'while-stepping' command " "cannot be used for fast tracepoint")); - else if (b->type == bp_static_tracepoint) + else if (b->type == bp_static_tracepoint + || b->type == bp_static_marker_tracepoint) error (_("The 'while-stepping' command " "cannot be used for static tracepoint")); @@ -1329,7 +1332,8 @@ static_tracepoints_here (CORE_ADDR addr) std::vector<breakpoint *> found; for (breakpoint *b : all_breakpoints ()) - if (b->type == bp_static_tracepoint) + if (b->type == bp_static_tracepoint + || b->type == bp_static_marker_tracepoint) { for (bp_location *loc : b->locations ()) if (loc->address == addr) @@ -5794,6 +5798,7 @@ bpstat_what (bpstat *bs_head) case bp_tracepoint: case bp_fast_tracepoint: case bp_static_tracepoint: + case bp_static_marker_tracepoint: /* Tracepoint hits should not be reported back to GDB, and if one got through somehow, it should have been filtered out already. */ @@ -6078,6 +6083,7 @@ bptype_string (enum bptype type) {bp_tracepoint, "tracepoint"}, {bp_fast_tracepoint, "fast tracepoint"}, {bp_static_tracepoint, "static tracepoint"}, + {bp_static_marker_tracepoint, "static marker tracepoint"}, {bp_dprintf, "dprintf"}, {bp_jit_event, "jit events"}, {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"}, @@ -7139,6 +7145,7 @@ bp_location_from_bp_type (bptype type) case bp_tracepoint: case bp_fast_tracepoint: case bp_static_tracepoint: + case bp_static_marker_tracepoint: return bp_loc_other; default: internal_error (__FILE__, __LINE__, _("unknown breakpoint type")); @@ -8350,7 +8357,8 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch, if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0) b->loc->inserted = 1; - if (type == bp_static_tracepoint) + if (type == bp_static_tracepoint + || type == bp_static_marker_tracepoint) { struct tracepoint *t = (struct tracepoint *) b; struct static_tracepoint_marker marker; @@ -12199,7 +12207,8 @@ tracepoint::print_one_detail (struct ui_out *uiout) const { if (!static_trace_marker_id.empty ()) { - gdb_assert (type == bp_static_tracepoint); + gdb_assert (type == bp_static_tracepoint + || type == bp_static_marker_tracepoint); uiout->message ("\tmarker id is %pF\n", string_field ("static-tracepoint-marker-string-id", @@ -12224,6 +12233,7 @@ tracepoint::print_mention () gdb_printf (_(" %d"), number); break; case bp_static_tracepoint: + case bp_static_marker_tracepoint: gdb_printf (_("Static tracepoint")); gdb_printf (_(" %d"), number); break; @@ -12240,7 +12250,8 @@ tracepoint::print_recreate (struct ui_file *fp) { if (type == bp_fast_tracepoint) gdb_printf (fp, "ftrace"); - else if (type == bp_static_tracepoint) + else if (type == bp_static_tracepoint + || type == bp_static_marker_tracepoint) gdb_printf (fp, "strace"); else if (type == bp_tracepoint) gdb_printf (fp, "trace"); @@ -12438,7 +12449,7 @@ static struct breakpoint_ops strace_marker_breakpoint_ops; static int strace_marker_p (struct breakpoint *b) { - return b->ops == &strace_marker_breakpoint_ops; + return b->type == bp_static_marker_tracepoint; } /* Delete a breakpoint and clean up all traces of it in the data @@ -13044,7 +13055,7 @@ location_to_sals (struct breakpoint *b, struct event_location *location, b->condition_not_parsed = 0; } - if (b->type == bp_static_tracepoint && !strace_marker_p (b)) + if (b->type == bp_static_tracepoint) sals[0] = update_static_tracepoint (b, sals[0]); *found = 1; @@ -13921,6 +13932,7 @@ strace_command (const char *arg, int from_tty) { struct breakpoint_ops *ops; event_location_up location; + enum bptype type; /* Decide if we are dealing with a static tracepoint marker (`-m'), or with a normal static tracepoint. */ @@ -13928,18 +13940,20 @@ strace_command (const char *arg, int from_tty) { ops = &strace_marker_breakpoint_ops; location = new_linespec_location (&arg, symbol_name_match_type::FULL); + type = bp_static_marker_tracepoint; } else { ops = &vtable_breakpoint_ops; location = string_to_event_location (&arg, current_language); + type = bp_static_tracepoint; } create_breakpoint (get_current_arch (), location.get (), NULL, 0, arg, false, 1 /* parse arg */, 0 /* tempflag */, - bp_static_tracepoint /* type_wanted */, + type /* type_wanted */, 0 /* Ignore count */, pending_break_support, ops, diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index 7d8c4f3bc3a..4e52656dc7c 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -183,6 +183,8 @@ enum bptype bp_tracepoint, bp_fast_tracepoint, bp_static_tracepoint, + /* Like bp_static_tracepoint but for static markers. */ + bp_static_marker_tracepoint, /* A dynamic printf stops at the given location, does a formatted print, then automatically continues. (Although this is sort of diff --git a/gdb/remote.c b/gdb/remote.c index ff98024cd78..6914947c172 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -13224,7 +13224,8 @@ remote_target::download_tracepoint (struct bp_location *loc) warning (_("Target does not support fast tracepoints, " "downloading %d as regular tracepoint"), b->number); } - else if (b->type == bp_static_tracepoint) + else if (b->type == bp_static_tracepoint + || b->type == bp_static_marker_tracepoint) { /* Only test for support at download time; we may not know target capabilities at definition time. */
reply other threads:[~2022-04-29 22:23 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20220429222351.366C3385781D@sourceware.org \ --to=tromey@sourceware.org \ --cc=gdb-cvs@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: linkBe 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).