From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Michael Snyder <msnyder@vmware.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: [rfc] Fix "step" for ld.so debugging [Re: [RFC] problem in solib-svr4/enable_break]
Date: Fri, 15 Jan 2010 00:44:00 -0000 [thread overview]
Message-ID: <20100115004405.GB26561@host0.dyn.jankratochvil.net> (raw)
In-Reply-To: <4B4F95C3.5080209@vmware.com>
Hi Michael,
I see there is a problem for debugging ld.so even on native GNU/Linux when
I get some intentional way into the ld.so code. Existing problem:
(gdb) frame
#0 _dl_fixup (l=0x7ffff7ffe0e8, reloc_arg=<value optimized out>) at ../elf/dl-runtime.c:90
90 if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0)
(gdb) next
94 if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
(gdb) next
99 version = &l->l_versions[ndx];
(gdb) next
100 if (version->hash == 0)
(gdb) step
pause () at ../sysdeps/unix/syscall-template.S:82
82 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
("next" works but "step" skips whole ld.so resolver)
Wouldn't the patch below also solve your "PIE kernel" problem?
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
But I am not much sure about some possible regressions with this code.
Regards,
Jan
2010-01-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* infrun.c (handle_inferior_event): Continue stepping through dynsym
resolve code only if STEP_RANGE_START was not in dynsym resolve code.
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -4115,8 +4115,9 @@ infrun: not switching back to stepped thread, it has vanished\n");
/* If we are stepping at the source level and entered the runtime
loader dynamic symbol resolution code...
- EXEC_FORWARD: we keep on single stepping until we exit the run
- time loader code and reach the callee's address.
+ EXEC_FORWARD: we keep on single stepping until we exit the run time loader
+ code and reach the callee's address. Permit normal stepping inside loader
+ code if user already started the stepping there.
EXEC_REVERSE: we've already executed the callee (backward), and
the runtime loader code is handled just like any other
@@ -4126,7 +4127,9 @@ infrun: not switching back to stepped thread, it has vanished\n");
if (execution_direction != EXEC_REVERSE
&& ecs->event_thread->step_over_calls == STEP_OVER_UNDEBUGGABLE
- && in_solib_dynsym_resolve_code (stop_pc))
+ && in_solib_dynsym_resolve_code (stop_pc)
+ && !(ecs->event_thread->step_range_start > 1
+ && in_solib_dynsym_resolve_code (ecs->event_thread->step_range_start)))
{
CORE_ADDR pc_after_resolver =
gdbarch_skip_solib_resolver (gdbarch, stop_pc);
next prev parent reply other threads:[~2010-01-15 0:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-14 22:07 [RFC] problem in solib-svr4/enable_break Michael Snyder
2010-01-15 0:44 ` Jan Kratochvil [this message]
2010-01-15 17:46 ` [rfc] Fix "step" for ld.so debugging [Re: [RFC] problem in solib-svr4/enable_break] Michael Snyder
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=20100115004405.GB26561@host0.dyn.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=msnyder@vmware.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