From: Joakim Tjernlund <joakim.tjernlund@transmode.se>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] remote: Avoid unwanted shlib internal BPs When debugging Linux kernel or u-boot with Abatron BDI emulator an error occurs:
Date: Fri, 01 Jun 2012 14:39:00 -0000 [thread overview]
Message-ID: <OF3AAFEC4B.204A4D0F-ONC1257A10.004FA84E-C1257A10.0050789B@transmode.se> (raw)
In-Reply-To: <4FC8CCD7.9060800@redhat.com>
Pedro Alves <palves@redhat.com> wrote on 2012/06/01 16:08:23:
>
> On 06/01/2012 02:36 PM, Joakim Tjernlund wrote:
>
> > ..
> > (gdb) tar remote bdi:2001
> > Remote debugging using bdi:2001
> > 0xeff80050 in ?? ()
> > (gdb) mon reset
> > (gdb) cont
> > Continuing.
> > Warning:
> > Cannot insert breakpoint -1.
> > Error accessing memory address 0xc0000000: Unknown error 4294967295.
> >
> > (gdb) maintenance info breakpoints
> > Num Type Disp Enb Address What
> > -1 shlib events keep y 0xc0000000 <_stext> inf 1
> >
> > gdb mistakenly inserts a special shared library BP even though
> > there area no such libs in either linux or u-boot.
>
>
> GDB has no special knowledge of the Linux kernel, nor of u-boot.
> A GNU/Linux targeted GDB (*-*-linux-gnu) recognizes, and knows how to
> debug user space applications. If the kernel binary or the u-boot binary
> look very much like GNU/Linux user space programs, the *-*-linux-gnu targeted
> GDB will assume that's what they are. If you used a bare metal elf/eabi
> targeted GDB, which is really what those programs are, you'd not see this.
Yes you would, the error comes from this in solibsvr4.c:
static const char * const bkpt_names[] =
{
"_start",
"__start",
"main",
NULL
};
...
if (!current_inferior ()->attach_flag)
{
for (bkpt_namep = bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
{
msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
if ((msymbol != NULL) && (SYMBOL_VALUE_ADDRESS (msymbol) != 0))
{
sym_addr = SYMBOL_VALUE_ADDRESS (msymbol);
sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
sym_addr,
¤t_target);
create_solib_event_breakpoint (target_gdbarch, sym_addr);
return 1;
}
}
}
Just because a executable has a _start/__start/main in it, it doesn't mean it uses
shared libs. I think this code assumes way too much, it is a last resort if everything
else fails.
The code tries to avoid attached targets but fails because it isn't attached yet
>
> > Fix this by explicitly informing remote_add_inferior() that
> > the remote is attached.
>
>
> NAK. This is not a "fix", it's papering over the problem, and
> regresses GDB. It makes GDB always detach on quit, instead of asking
> the remote end whether it is "attached" or whether it has "spawned"
> the inferior.
OK, that is fine. I don't know this code. Any suggestion ?
next prev parent reply other threads:[~2012-06-01 14:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-01 13:37 Joakim Tjernlund
2012-06-01 14:08 ` Pedro Alves
2012-06-01 14:39 ` Joakim Tjernlund [this message]
2012-06-01 14:40 ` Pedro Alves
2012-06-01 14:48 ` Joakim Tjernlund
[not found] ` <OF322378AB.B2F2176F-ONC1257A10.0051062C-C1257A10.00514CCD@LocalDomain>
2012-06-01 14:49 ` Joakim Tjernlund
2012-06-01 14:53 ` Joakim Tjernlund
2012-06-01 14:56 ` Pedro Alves
2012-06-01 15:01 ` Joakim Tjernlund
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=OF3AAFEC4B.204A4D0F-ONC1257A10.004FA84E-C1257A10.0050789B@transmode.se \
--to=joakim.tjernlund@transmode.se \
--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