Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Markus Metzger <markus.t.metzger@googlemail.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: gdb-patches@sourceware.org, "Metzger,
	Markus T" <markus.t.metzger@intel.com>
Subject: Re: [draft patch] <unavailable> unwinder for btrace  [Re: [rfc 3/5] record: make it build again]
Date: Thu, 28 Mar 2013 12:38:00 -0000	[thread overview]
Message-ID: <9B969C1D-95E8-4AD5-BEF0-E269FF8771DF@gmail.com> (raw)
In-Reply-To: <A78C989F6D9628469189715575E55B2307BA9030@IRSMSX102.ger.corp.intel.com>


On Mar 27, 2013, at 16:22 , "Metzger, Markus T" <markus.t.metzger@intel.com> wrote:

>> -----Original Message-----
>> From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com]
>> Sent: Monday, February 11, 2013 6:13 PM
> 
> [...]
> 
>> gdb/
>> 2013-02-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
>> 
>> 	New record unwinder reporting <unavailable>.
>> 	* dwarf2-frame.c (dwarf2_frame_cfa): Move UNWIND_UNAVAILABLE check
>> 	earlier.
>> 	* frame-unwind.c: Include target.h.
>> 	(frame_unwind_try_unwinder): New function with code from ...
>> 	(frame_unwind_find_by_frame): ... here.  New variable
>> 	unwinder_from_target, call also target_get_unwinder and
>> 	frame_unwind_try_unwinder for it.
>> 	* frame.c (get_frame_unwind_stop_reason): Unconditionally call
>> 	get_prev_frame_1.
>> 	* record.c: Include frame-unwind.h.
>> 	(record_frame_unwind_stop_reason, record_frame_this_id)
>> 	(record_frame_prev_register, record_frame_sniffer, record_frame_unwind):
>> 	New.
>> 	(init_record_ops, init_record_core_ops): Install it.
>> 	* target.c (target_get_unwinder): New.
>> 	* target.h (struct target_ops): New field to_get_unwinder.
>> 	(target_get_unwinder): New declaration.
> 
> I've been experimenting with this a bit.  It looks like there will always be
> a sentinel frame at the very bottom that is reading the registers directly
> from the inferior.  I can only hook in at the second frame.
> 
> In order to fake the back trace for btrace replay, I would also need to
> replace the sentinel frame, since otherwise, the first frame will always
> point to the current location.
> 
> Am I doing something wrong?

Yes, I am.  I need to also provide the target registers.  Then the
sentinel frame should do exactly what I want.


> On a related but different topic, I added a btrace frame type and
> prologue cache.  The cache holds a pointer to some btrace data
> structure that is used to compute the fake back trace.  In order to
> unwind a btrace frame, I would need to access the next frame's
> location in this btrace data structure.
> 
> The easiest would be to check for the next frame's type and then
> access it's cache - which doesn't work since struct frame_info is
> opaque.  I ended up encoding the pointer into the special_addr
> of a btrace frame's frame_id - which is somewhat ugly.  Any better
> idea?
> 
> Also what's the lifetime of a frame_info and frame_id object?
> When the branch trace is cleared, any pointers to it will become
> stale.

Those remain open.


regards,
markus.
From gdb-patches-return-99987-listarch-gdb-patches=sources.redhat.com@sourceware.org Thu Mar 28 06:28:08 2013
Return-Path: <gdb-patches-return-99987-listarch-gdb-patches=sources.redhat.com@sourceware.org>
Delivered-To: listarch-gdb-patches@sources.redhat.com
Received: (qmail 15197 invoked by alias); 28 Mar 2013 06:28:07 -0000
Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm
Precedence: bulk
List-Id: <gdb-patches.sourceware.org>
List-Subscribe: <mailto:gdb-patches-subscribe@sourceware.org>
List-Archive: <http://sourceware.org/ml/gdb-patches/>
List-Post: <mailto:gdb-patches@sourceware.org>
List-Help: <mailto:gdb-patches-help@sourceware.org>, <http://sourceware.org/ml/#faqs>
Sender: gdb-patches-owner@sourceware.org
Delivered-To: mailing list gdb-patches@sourceware.org
Received: (qmail 15177 invoked by uid 89); 28 Mar 2013 06:28:00 -0000
X-Spam-SWARE-Status: No, score=-7.0 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.1
Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28)    by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 28 Mar 2013 06:27:58 +0000
Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])	by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2S6RtEm025729	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits%6 verify=OK);	Thu, 28 Mar 2013 02:27:55 -0400
Received: from host2.jankratochvil.net (ovpn-116-39.ams2.redhat.com [10.36.116.39])	by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r2S6Rm5m018800	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits\x128 verify=NO);	Thu, 28 Mar 2013 02:27:52 -0400
Date: Thu, 28 Mar 2013 14:21:00 -0000
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Markus Metzger <markus.t.metzger@googlemail.com>
Cc: gdb-patches@sourceware.org,        "Metzger, Markus T" <markus.t.metzger@intel.com>
Subject: Re: [draft patch] <unavailable> unwinder for btrace  [Re: [rfc 3/5] record: make it build again]
Message-ID: <20130328062747.GA27157@host2.jankratochvil.net>
References: <1360337423-27095-1-git-send-email-markus.t.metzger@intel.com> <1360337423-27095-4-git-send-email-markus.t.metzger@intel.com> <20130210221059.GC4819@host2.jankratochvil.net> <A78C989F6D9628469189715575E55B2307B78A04@IRSMSX102.ger.corp.intel.com> <20130211141451.GA8962@host2.jankratochvil.net> <20130211171319.GA17524@host2.jankratochvil.net> <A78C989F6D9628469189715575E55B2307BA9030@IRSMSX102.ger.corp.intel.com> <9B969C1D-95E8-4AD5-BEF0-E269FF8771DF@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <9B969C1D-95E8-4AD5-BEF0-E269FF8771DF@gmail.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
X-IsSubscribed: yes
X-SW-Source: 2013-03/txt/msg01052.txt.bz2
Content-length: 2091

On Thu, 28 Mar 2013 07:09:23 +0100, Markus Metzger wrote:
> On Mar 27, 2013, at 16:22 , "Metzger, Markus T" <markus.t.metzger@intel.com> wrote:
> > I've been experimenting with this a bit.  It looks like there will always be
> > a sentinel frame at the very bottom that is reading the registers directly
> > from the inferior.  I can only hook in at the second frame.
> >
> > In order to fake the back trace for btrace replay, I would also need to
> > replace the sentinel frame, since otherwise, the first frame will always
> > point to the current location.
> >
> > Am I doing something wrong?
>
> Yes, I am.  I need to also provide the target registers.  Then the
> sentinel frame should do exactly what I want.

It looks right to me.


> > On a related but different topic, I added a btrace frame type and
> > prologue cache.  The cache holds a pointer to some btrace data
> > structure that is used to compute the fake back trace.  In order to
> > unwind a btrace frame, I would need to access the next frame's
> > location in this btrace data structure.
> >
> > The easiest would be to check for the next frame's type and then
> > access it's cache - which doesn't work since struct frame_info is
> > opaque.  I ended up encoding the pointer into the special_addr
> > of a btrace frame's frame_id - which is somewhat ugly.  Any better
> > idea?

special_addr is really not right.

dwarf2-frame-tailcall.c uses for a similar problem 'htab_t cache_htab' which
is indexed by 'struct frame_info *' which you can iterate in any direction so
you even do not need a new cache entry for every 'struct frame_info *'.


> > Also what's the lifetime of a frame_info and frame_id object?
> > When the branch trace is cleared, any pointers to it will become
> > stale.

There is frame_unwind->dealloc_cache, any reinit_frame_cache() call inside GDB
will clear the prologue cache which is very common.

I see now btrace_thread_info->btrace may change more often - such as during
each "info record" command.  So call reinit_frame_cache() in the cases btrace
cache may get rebuilt.


Thanks,
Jan


  reply	other threads:[~2013-03-28  6:09 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-08 15:30 [rfc 0/5] record-btrace markus.t.metzger
2013-02-08 15:30 ` [rfc 5/5] record, disas: add record disassemble command markus.t.metzger
2013-02-10 22:11   ` Jan Kratochvil
2013-02-08 15:30 ` [rfc 1/5] target: add add_deprecated_target_alias markus.t.metzger
2013-02-10 22:10   ` Jan Kratochvil
2013-02-08 15:31 ` [rfc 3/5] record: make it build again markus.t.metzger
2013-02-10 22:11   ` Jan Kratochvil
2013-02-11 13:41     ` Metzger, Markus T
2013-02-11 14:15       ` Jan Kratochvil
2013-02-11 17:13         ` [draft patch] <unavailable> unwinder for btrace [Re: [rfc 3/5] record: make it build again] Jan Kratochvil
2013-02-11 21:24           ` Tom Tromey
2013-02-13  7:35           ` Metzger, Markus T
2013-02-13  7:58             ` Jan Kratochvil
2013-02-13  8:08               ` Metzger, Markus T
2013-03-27 18:09           ` Metzger, Markus T
2013-03-28 12:38             ` Markus Metzger [this message]
     [not found]               ` <20130328062747.GA27157@host2.jankratochvil.net>
2013-03-28 14:28                 ` Metzger, Markus T
2013-03-28 14:38                   ` Jan Kratochvil
2013-03-28 17:37                     ` Metzger, Markus T
2013-02-08 15:31 ` [rfc 4/5] record: default target methods markus.t.metzger
2013-02-10 22:11   ` Jan Kratochvil
2013-02-08 15:32 ` [rfc 2/5] record: split record markus.t.metzger
2013-02-10 22:11   ` Jan Kratochvil

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=9B969C1D-95E8-4AD5-BEF0-E269FF8771DF@gmail.com \
    --to=markus.t.metzger@googlemail.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=markus.t.metzger@intel.com \
    /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