Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Metzger, Markus T" <markus.t.metzger@intel.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: "palves@redhat.com" <palves@redhat.com>,
	"gdb-patches@sourceware.org"	<gdb-patches@sourceware.org>
Subject: RE: x86_64-m32 internal error for multi-thread-step.exp  [Re: [PATCH v10 06/28] btrace: change branch trace data structure]
Date: Fri, 23 Jan 2015 16:01:00 -0000	[thread overview]
Message-ID: <A78C989F6D9628469189715575E55B231E6C544C@IRSMSX104.ger.corp.intel.com> (raw)
In-Reply-To: <A78C989F6D9628469189715575E55B231E6C51CF@IRSMSX104.ger.corp.intel.com>

> -----Original Message-----
> From: Metzger, Markus T
> Sent: Friday, January 23, 2015 8:46 AM


> There also seem to be some issues in reverse/replay stepping.  The
> reverse-next command keeps going when it reached the previous
> source line; same for replay next.  I need to investigate why this is.

The 32-bit _dl_runtime_resolve returns to the resolved function.
The 64-bit _dl_runtime_resolve jumps to the resolved function.

The return causes btrace to search for the function in the current
stack back trace.  Since it doesn't find it, it assumes that the return
goes to some outer function that has not been recorded.

When we continue processing the trace, we build a new stack
back trace with the same function names but different frame id's.
They will look the same when using the bt command but stepping
won't be able to detect when stepping into a subroutine.

My current thinking is that I'd add a special case for this (see below).
I can't think of a general case where you would use a return instruction
to transfer control to a function that didn't call you.  If you know of
more such cases, please let me know.


diff --git a/gdb/btrace.c b/gdb/btrace.c
index fd543ef..db31788 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -524,7 +524,24 @@ ftrace_update_function (struct btrace_function *bfun, CORE_ADDR pc)
       switch (last->iclass)
        {
        case BTRACE_INSN_RETURN:
-         return ftrace_new_return (bfun, mfun, fun);
+         {
+           const char *fname;
+
+           /* On some systems, _dl_runtime_resolve returns to the resolved
+              function instead of jumping to it.  From our perspective,
+              however, this is a tailcall.
+              If we treated it as return, we wouldn't be able to find the
+              resolved function in our stack back trace.  Hence, we would
+              lose the current stack back trace and start anew with an empty
+              back trace.  When the resolved function returns, we would then
+              create a stack back trace with the same function names but
+              different frame id's.  This will confuse stepping.  */
+           fname = ftrace_print_function_name (bfun);
+           if (strcmp (fname, "_dl_runtime_resolve") == 0)
+             return ftrace_new_tailcall (bfun, mfun, fun);
+
+           return ftrace_new_return (bfun, mfun, fun);
+         }
 
        case BTRACE_INSN_CALL:
          /* Ignore calls to the next instruction.  They are used for PIC.  */

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


  reply	other threads:[~2015-01-23 12:53 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-14  8:05 [PATCH v10 00/28] record-btrace: reverse Markus Metzger
2014-01-14  8:04 ` [PATCH v10 14/28] record-btrace: supply register target methods Markus Metzger
2014-01-14  8:04 ` [PATCH v10 03/28] btrace: uppercase btrace_read_type Markus Metzger
2014-01-14  8:04 ` [PATCH v10 01/28] btrace, test: fix multi-line btrace tests Markus Metzger
2014-01-14  8:04 ` [PATCH v10 05/28] frame: add frame_id_build_unavailable_stack_special Markus Metzger
2014-01-14  8:04 ` [PATCH v10 18/28] record-btrace, frame: supply target-specific unwinder Markus Metzger
2014-01-14  8:04 ` [PATCH v10 10/28] record-btrace: optionally indent function call history Markus Metzger
2014-01-14 16:07   ` Eli Zaretskii
2014-01-14  8:04 ` [PATCH v10 26/28] record-btrace: show trace from enable location Markus Metzger
2014-01-14  8:04 ` [PATCH v10 20/28] record-btrace: provide xfer_partial target method Markus Metzger
2014-01-15 15:51   ` Pedro Alves
2014-01-14  8:05 ` [PATCH v10 22/28] record-btrace: provide target_find_new_threads method Markus Metzger
2014-01-14  8:05 ` [PATCH v10 12/28] btrace: add replay position to btrace thread info Markus Metzger
2014-01-14  8:05 ` [PATCH v10 09/28] btrace: increase buffer size Markus Metzger
2014-01-14  8:05 ` [PATCH v10 04/28] gdbarch: add instruction predicate methods Markus Metzger
2014-01-14  8:05 ` [PATCH v10 06/28] btrace: change branch trace data structure Markus Metzger
2015-01-08 20:49   ` x86_64-m32 internal error for multi-thread-step.exp [Re: [PATCH v10 06/28] btrace: change branch trace data structure] Jan Kratochvil
2015-01-20 15:19     ` Metzger, Markus T
2015-01-22 12:30       ` Metzger, Markus T
2015-01-22 13:36         ` Pedro Alves
2015-01-22 17:37           ` Linux: make target_is_async_p return false when async is off Pedro Alves
2015-01-23 10:39             ` Metzger, Markus T
2015-01-23 12:34               ` Pedro Alves
2015-01-22 16:37         ` x86_64-m32 internal error for multi-thread-step.exp [Re: [PATCH v10 06/28] btrace: change branch trace data structure] Jan Kratochvil
2015-01-23  7:56           ` Metzger, Markus T
2015-01-23 16:01             ` Metzger, Markus T [this message]
2015-01-23 16:33             ` Metzger, Markus T
2015-01-27 18:05               ` Pedro Alves
2015-01-29 16:28                 ` Metzger, Markus T
2015-01-25 19:56             ` record btrace experience [Re: x86_64-m32 internal error for multi-thread-step.exp [Re: [PATCH v10 06/28] btrace: change branch trace data structure]] Jan Kratochvil
2015-01-26 12:41               ` Metzger, Markus T
2015-01-27  8:07                 ` Jan Kratochvil
2015-01-27 15:52                   ` Pedro Alves
2015-01-29 19:28                   ` Metzger, Markus T
2015-01-23 12:55         ` x86_64-m32 internal error for multi-thread-step.exp [Re: [PATCH v10 06/28] btrace: change branch trace data structure] Patrick Palka
2014-01-14  8:05 ` [PATCH v10 07/28] record-btrace: fix insn range in function call history Markus Metzger
2014-01-14  8:05 ` [PATCH v10 11/28] record-btrace: make ranges include begin and end Markus Metzger
2014-01-14  8:05 ` [PATCH v10 02/28] btrace, linux: fix memory leak when reading branch trace Markus Metzger
2014-01-14  8:05 ` [PATCH v10 13/28] Add target_ops argument to to_prepare_to_store Markus Metzger
2014-01-14  8:05 ` [PATCH v10 23/28] record-btrace: add record goto target methods Markus Metzger
2014-01-14  8:05 ` [PATCH v10 24/28] record-btrace: extend unwinder Markus Metzger
2014-01-14  8:05 ` [PATCH v10 15/28] frame, backtrace: allow targets to supply a frame unwinder Markus Metzger
2014-01-14  8:05 ` [PATCH v10 19/28] target, breakpoint: allow insert/remove breakpoint to be forwarded Markus Metzger
2014-01-15 15:52   ` Pedro Alves
2014-01-14  8:05 ` [PATCH v10 16/28] frame, cfa: check unwind stop reason first Markus Metzger
2014-01-14  8:05 ` [PATCH v10 25/28] btrace, gdbserver: read branch trace incrementally Markus Metzger
2014-01-16 17:57   ` Tom Tromey
2014-01-17  8:28     ` Metzger, Markus T
2014-01-20  5:44       ` Tom Tromey
2014-01-14  8:05 ` [PATCH v10 27/28] target: allow decr_pc_after_break to be defined by the target Markus Metzger
2014-01-14  8:05 ` [PATCH v10 21/28] record-btrace: add to_wait and to_resume target methods Markus Metzger
2014-01-14  8:05 ` [PATCH v10 28/28] record-btrace: add (reverse-)stepping support Markus Metzger
2014-01-14  8:05 ` [PATCH v10 17/28] frame: do not assume unwinding will succeed Markus Metzger
2014-01-14  8:05 ` [PATCH v10 08/28] record-btrace: start counting at one Markus Metzger
2014-01-15 15:54 ` [PATCH v10 00/28] record-btrace: reverse Pedro Alves
2014-01-16 12:01   ` Metzger, Markus T
2014-01-16 12:37     ` Pedro Alves
2014-01-16 14:35     ` Tom Tromey

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=A78C989F6D9628469189715575E55B231E6C544C@IRSMSX104.ger.corp.intel.com \
    --to=markus.t.metzger@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=palves@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