RE: [PATCH 2/2] new tracepoint downloaded MI notification.

Marc Khouzam
2012-11-29T19:34:44Z

> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Thursday, November 29, 2012 11:00 AM
> To: Yao Qi
> Cc: Marc Khouzam; 'dje@google.com'; 'gdb-patches@sourceware.org'
> Subject: Re: [PATCH 2/2] new tracepoint downloaded MI notification.
>
> On 11/29/2012 03:46 PM, Yao Qi wrote:
> > On 11/23/2012 02:32 AM, Pedro Alves wrote:
> >> What about the case of connecting to a target that is
> tracing, after
> >> disconnected tracing? Do we already tell the frontend
> somehow which
> >> tracepoints are active on the target? Should tracepoints have an
> >> "installed on target" field?
> >>
> >> Yao Qi wrote:
> >>> >On 11/01/2012 03:09 AM, Marc Khouzam wrote:
> >>>> >>Now that GDB pushes new tracepoints to the target
> immediately, that
> >>>> >>use-case may not apply, but I wonder if there are
> other situations
> >>>> >>where some tracepoints will be on the target and other
> will not?
> >>> >
> >>> >Yes, the pending tracepoints won't be downloaded after
> tracing is started until they are resolved. The notification
> is required for this case.
> >> Ok. If the answer to my question above is yes, it might be this
> >> notification ends up unnecessary in favor of a generic
> >> =breakpoint-modified.
> >
> > Pedro, to make sure I don't misread your comments, I'd like
> to ask are you suggesting that we can add an 'installed on
> target' field for tracepoint in '=breakpoint-modified' notification?
>
> Well, sort of, but by side effect, since =breakpoint-modified
> includes all
> the fields of a breakpoint/tracepoint.
>
> Say you've set up a disconnected tracing session, and then disconnect.
> Later, you start a new clean gdb session, create a new
> tracepoint (never
> downloaded/installed on the target), and reconnect. At this
> point, GDB will fetch
> the target's tracepoint list, and sync it with GDB's. The
> frontend gets
> a =breakpoint-created for each of those uploaded tracepoints,
> but it has
> no clue why they were created / their installed status.
>
> You end up with some tracepoints that are installed, and some
> that aren't
> in GDB's list. Does the frontend know this today by some
> means I'm missing?

I think the frontend may be able to guess, when connecting to the
target, that any tracepoint it did not create itself must be
tracepoints already installed on target.

However, this sounds a little risky and maybe prone to race-conditions.

> If not, does fixing this mean adding an "installed" property to
> breakpoints/tracepoints? Say we added your new notification,
> and then fixed the
> above as I'm suggesting. At that point, this new tracepoint
> downloaded
> notification ends up being redundant.
>
> So I'm trying to get us to think with a broad perspective around
> the "installed on target" frontend needs.

I think Pedro's point is very good. It would be better to have
GDB actually report the "installed/not installed" state when
providing tracepoint info. Not only will it help in the
disconnected-tracing case, but it will allow the frontend to
refresh its state. Without it, any lost MI notification about
tracepoint download, cannot be recovered from.

IIUC, adding this entry the tracepoint info will also automatically
cause a =breakpoint-modified notif when tracepoints are downloaded
to the target. This is something the frontend still needs, as to
avoid forcing a refresh after any operation that could cause a
tracepoint to be installed/un-installed.

Thanks for bringing this point up!

Marc