From: John Baldwin <jhb@freebsd.org>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Add a 'starti' command.
Date: Fri, 01 Sep 2017 21:42:00 -0000 [thread overview]
Message-ID: <2289243.bE5E4p8koA@ralph.baldwin.cx> (raw)
In-Reply-To: <645c49bd-86fb-88c8-e22c-3613a72f2be7@redhat.com>
On Thursday, August 31, 2017 11:51:33 PM Pedro Alves wrote:
> Hi John,
>
> On 08/30/2017 12:54 AM, John Baldwin wrote:
> > This works like 'start' but it stops at the first instruction rather than
> > the first line in main(). This is useful if one wants to single step
> > through runtime linker startup.
>
> I like the idea. I actually once wrote a patch quite similar to this.
> I had called the command "create", inspired by "target_create_inferior".
> Is there a reason to actually set a breakpoint at the first instruction and
> run to it, actually? My old prototype just created the inferior and
> didn't resume it all, see:
>
> https://github.com/palves/gdb/commits/create_command
>
> though maybe going through normal_stop may be a good idea.
I tried this today and ended up with gdb hung in poll() but not printing a
prompt or accepting commands still, so I've left it as a breakpoint.
> I agree with Keith - this should really have some tests.
>
> For example:
>
> - write a global constructor that sets a flag, and then check
> that the flag is still clear when we're still at the entry point.
> This can be either a C++ test or a C test using
> __attribute__ ((constructor))-
>
> - After creating the inferior, check that you can manually set
> a break on main, and continue to it.
I've created a test which does these two (will send a v2 in a minute).
> - Try backtrace, and check that only one frame comes
> out. That may expose buggy unwinders that don't stop
> unwinding at the entry point currently, but then that
> should be fixed anyway, since users will run into that
> too.
This one didn't work out for me on either FreeBSD or a CentOS 7 VM. I
know for the FreeBSD case the initial entry point in the runtime linker
doesn't have any CFI directives that would aid in unwinding, and that
might be true for ld.so on Linux as well.
FreeBSD:
(gdb) starti
Starting program: /bin/ls
Temporary breakpoint 1 at 0x800609650: file /usr/src/libexec/rtld-elf/amd64/rtld_start.S, line 33.
Temporary breakpoint 1, .rtld_start ()
at /usr/src/libexec/rtld-elf/amd64/rtld_start.S:33
33 xorq %rbp,%rbp # Clear frame pointer for good form
(gdb) where
#0 .rtld_start () at /usr/src/libexec/rtld-elf/amd64/rtld_start.S:33
#1 0x0000000000000001 in ?? ()
#2 0x00007fffffffe648 in ?? ()
#3 0x0000000000000000 in ?? ()
CentOS 7:
(gdb) starti
Starting program: /usr/bin/ls
Temporary breakpoint 1 at 0x7ffff7ddd170
Temporary breakpoint 1, 0x00007ffff7ddd170 in _start ()
from /lib64/ld-linux-x86-64.so.2
(gdb) where
#0 0x00007ffff7ddd170 in _start () from /lib64/ld-linux-x86-64.so.2
#1 0x0000000000000001 in ?? ()
#2 0x00007fffffffe6ac in ?? ()
#3 0x0000000000000000 in ?? ()
--
John Baldwin
next prev parent reply other threads:[~2017-09-01 21:42 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-29 22:55 John Baldwin
2017-08-30 14:14 ` Eli Zaretskii
2017-08-30 22:32 ` Keith Seitz
2017-08-31 21:51 ` Pedro Alves
2017-08-31 22:42 ` John Baldwin
2017-09-01 21:42 ` John Baldwin [this message]
2017-09-02 6:28 ` Ruslan Kabatsayev
2017-09-04 10:57 ` Pedro Alves
2017-09-11 22:08 ` John Baldwin
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=2289243.bE5E4p8koA@ralph.baldwin.cx \
--to=jhb@freebsd.org \
--cc=gdb-patches@sourceware.org \
--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