From: "Metzger, Markus T" <markus.t.metzger@intel.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
"Himpel, Christian" <christian.himpel@intel.com>
Subject: RE: [patch v4 03/24] btrace: change branch trace data structure
Date: Mon, 16 Sep 2013 09:01:00 -0000 [thread overview]
Message-ID: <A78C989F6D9628469189715575E55B230A9CE95A@IRSMSX104.ger.corp.intel.com> (raw)
In-Reply-To: <20130912200927.GA29475@host2.jankratochvil.net>
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] On Behalf Of Jan Kratochvil
Thanks for your feedback.
> > > > + /* If we have symbol information for our current location, use
> > > > + it to check that we jump to the start of a function. */
> > > > + if (fun != NULL || mfun != NULL)
> > > > + start = get_pc_function_start (pc);
> > > > + else
> > > > + start = pc;
> > >
> > > This goes into implementation detail of get_pc_function_start.
> > > Rather always call get_pc_function_start but one should check if it
> > > failed in all cases (you do not check if get_pc_function_start
> > > failed). get_pc_function_start returns 0 if it has failed.
> >
> > The check is implicit since pc can't be zero.
>
> PC can be zero on embedded platforms, _start commonly starts there. It is a
> bug of get_pc_function_start it is not compatible with it.
>
> Newer implementation of get_pc_function_start may fail in some case even
> if FUN or MFUN is not NULL.
>
> The code is making needless assumptions about get_pc_function_start
> inners.
>
>
> > > Or was the 'fun != NULL || mfun != NULL' check there for performance
> > > reasons?
> >
> > That's for performance reasons. No need to call the function if we
> > know it won't help us.
>
> The idea was that for example GDB may introduce 3rd kind of symbols,
> besides minimal symbols and full symbols. At that moment
> get_pc_function_start could work with the 3rd kind of symbol which the
> code as is would not call get_pc_function_start at all.
>
> The code is making needless assumptions about get_pc_function_start
> inners.
I removed the symbol NULL check and instead check for a zero return of
get_pc_function_start (PC). This still rules out zero as a valid PC value,
but that's the current error return value of get_pc_function_start.
> OK, please do not misuse patch series for chronological development.
> Patch series splitting is there for separation of topic.
Do you want me to squash the series into a single patch?
> > > Unrelated to this patch but the function
> > > record_btrace_insn_history_from does not need to be virtualized. It
> > > does not access any internals of record-btrace.c, it could be fully
> > > implemented in the superclass record.c and to_insn_history_from
> > > could be deleted.
> > >
> > > The same applies for record_btrace_call_history_from and
> > > to_call_history_from.
> >
> > Both depend on the numbering scheme, which is an implementation detail.
> > They both assume that counting starts at 0 (at 1 in a later patch).
> >
> > This does not hold for record-full, where the lowest instruction may
> > be bigger than zero.
>
> OK, one reason is that currently there is no implementation of these
> methods for record-full:
> (gdb) record instruction-history
> You can't do that when your target is `record-full'
>
> The second reason is that while record-full can drop old record, seeing only
> the last window:
> (gdb) set record full insn-number-max 10
> (gdb) record
> (gdb) info record
> Active record target: record-full
> Record mode:
> Lowest recorded instruction number is 1587.
> Highest recorded instruction number is 1596.
> Log contains 10 instructions.
> Max logged instructions is 10.
>
> btrace backend does not seem to support such sliding window (the kernel
> buffer sliding is unrelated). GDB still stores in its memory all the btrace
> records and one cannot do anything like
> (gdb) set record btrace insn-number-max 10
It's inherent in btrace. We only ever see the tail of the trace. We extend the
recorded trace when the kernel buffer does not overflow between updates.
Otherwise, we discard the trace in GDB and start anew with the current tail.
> Still I believe the code for the methods like to_insn_history_from should be
> common for all the backends as the user visible behavior should be the
> same.
> And this common code should support arbitrary "Lowest recorded instruction
> number" (which the btrace backend currently does not support).
The lowest recorded instruction is always zero for record-btrace.
If we added target methods to query for the lowest and highest instruction
number, we could implement the logic in record.c. I didn't see any benefit
in that, so I didn't do it. We will end up with about the same number of
target methods either way.
Regards,
Markus.
Intel GmbH
Dornacher Strasse 1
85622 Feldkirchen/Muenchen, Deutschland
Sitz der Gesellschaft: Feldkirchen bei Muenchen
Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk
Registergericht: Muenchen HRB 47456
Ust.-IdNr./VAT Registration No.: DE129385895
Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052
next prev parent reply other threads:[~2013-09-16 9:01 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 9:15 [patch v4 00/24] record-btrace: reverse Markus Metzger
2013-07-03 9:14 ` [patch v4 10/24] target: add ops parameter to to_prepare_to_store method Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 19/24] btrace, linux: fix memory leak when reading branch trace Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 03/24] btrace: change branch trace data structure Markus Metzger
2013-08-18 19:05 ` Jan Kratochvil
2013-09-10 9:11 ` Metzger, Markus T
2013-09-12 20:09 ` Jan Kratochvil
2013-09-16 9:01 ` Metzger, Markus T [this message]
2013-09-21 19:44 ` Jan Kratochvil
2013-09-23 6:54 ` Metzger, Markus T
2013-09-23 7:15 ` Jan Kratochvil
2013-09-23 7:27 ` Metzger, Markus T
2013-09-22 16:57 ` Jan Kratochvil
2013-09-22 17:16 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 24/24] record-btrace: skip tail calls in back trace Markus Metzger
2013-08-18 19:10 ` Jan Kratochvil
2013-09-17 14:28 ` Metzger, Markus T
2013-09-18 8:28 ` Metzger, Markus T
2013-09-18 9:52 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 11/24] record-btrace: supply register target methods Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-09-16 9:19 ` Metzger, Markus T
2013-09-22 13:55 ` Jan Kratochvil
2013-09-23 6:55 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 20/24] btrace, gdbserver: read branch trace incrementally Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-09-16 12:48 ` Metzger, Markus T
2013-09-22 14:42 ` Jan Kratochvil
2013-09-23 7:09 ` Metzger, Markus T
2013-09-25 19:05 ` Jan Kratochvil
2013-09-26 6:27 ` Metzger, Markus T
2013-07-03 9:14 ` [patch v4 16/24] record-btrace: provide target_find_new_threads method Markus Metzger
2013-08-18 19:15 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 22/24] infrun: reverse stepping from unknown functions Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 07/24] record-btrace: optionally indent function call history Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-09-10 13:06 ` Metzger, Markus T
2013-09-10 13:08 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 08/24] record-btrace: make ranges include begin and end Markus Metzger
2013-08-18 19:12 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 02/24] record: upcase record_print_flag enumeration constants Markus Metzger
2013-08-18 19:11 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 14/24] record-btrace: provide xfer_partial target method Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-09-16 9:30 ` Metzger, Markus T
2013-09-22 14:18 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 05/24] record-btrace: start counting at one Markus Metzger
2013-08-18 19:11 ` Jan Kratochvil
2013-07-03 9:14 ` [patch v4 09/24] btrace: add replay position to btrace thread info Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-09-10 13:24 ` Metzger, Markus T
2013-09-12 20:19 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 04/24] record-btrace: fix insn range in function call history Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 18/24] record-btrace: extend unwinder Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-09-16 11:21 ` Metzger, Markus T
2013-09-27 13:55 ` Jan Kratochvil
2013-09-30 9:45 ` Metzger, Markus T
2013-09-30 10:26 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 21/24] record-btrace: show trace from enable location Markus Metzger
2013-08-18 19:10 ` instruction_history.exp unset variable [Re: [patch v4 21/24] record-btrace: show trace from enable location] Jan Kratochvil
2013-09-16 14:11 ` Metzger, Markus T
2013-08-18 19:16 ` [patch v4 21/24] record-btrace: show trace from enable location Jan Kratochvil
2013-07-03 9:15 ` [patch v4 12/24] frame, backtrace: allow targets to supply a frame unwinder Markus Metzger
2013-08-18 19:14 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 01/24] gdbarch: add instruction predicate methods Markus Metzger
2013-07-03 9:49 ` Mark Kettenis
2013-07-03 11:10 ` Metzger, Markus T
2013-08-18 19:04 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 23/24] record-btrace: add (reverse-)stepping support Markus Metzger
2013-08-18 19:09 ` Jan Kratochvil
2013-09-17 9:43 ` Metzger, Markus T
2013-09-29 17:24 ` Jan Kratochvil
2013-09-30 9:30 ` Metzger, Markus T
2013-09-30 10:25 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 06/24] btrace: increase buffer size Markus Metzger
2013-08-18 19:06 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 15/24] record-btrace: add to_wait and to_resume target methods Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 17/24] record-btrace: add record goto " Markus Metzger
2013-08-18 19:08 ` Jan Kratochvil
2013-07-03 9:15 ` [patch v4 13/24] record-btrace, frame: supply target-specific unwinder Markus Metzger
2013-08-18 19:07 ` Jan Kratochvil
2013-08-18 19:04 ` [patch v4 00/24] record-btrace: reverse 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=A78C989F6D9628469189715575E55B230A9CE95A@IRSMSX104.ger.corp.intel.com \
--to=markus.t.metzger@intel.com \
--cc=christian.himpel@intel.com \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@redhat.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