From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: ppluzhnikov@google.com (Paul Pluzhnikov)
Cc: Ulrich.Weigand@de.ibm.com (Ulrich Weigand),
gdb-patches@sourceware.org (gdb-patches ml),
tromey@redhat.com (Tom Tromey)
Subject: Re: [patch] Speed up find_pc_section
Date: Fri, 21 Aug 2009 12:36:00 -0000 [thread overview]
Message-ID: <200908211130.n7LBUCJc011108@d12av02.megacenter.de.ibm.com> (raw)
In-Reply-To: <8ac60eac0908201340k6b759eb5o9bb73c8f473d8785@mail.gmail.com> from "Paul Pluzhnikov" at Aug 20, 2009 01:40:11 PM
Paul Pluzhnikov wrote:
> I believe the crash at load should be gone now, and some debugging will
> be possible, though find_pc_section will fail to find any overlay section
> which find_pc_mapped_section doesn't find. I think that's still better
> than what GDB was doing before under these conditions: finding a "random"
> overlapping overlay section.
With this patch, GDB no longer crashes, but some overlay tests fail anyway.
The problem is related to resolving an address in an overlay back to a
symbol via lookup_minimal_symbol_by_pc_section_1. The caller passes the
correct PC (VMA value) and overlay section to this routine, but the
first thing the routine does is:
/* PC has to be in a known section. This ensures that anything
beyond the end of the last segment doesn't appear to be part of
the last function in the last segment. */
pc_section = find_pc_section (pc);
if (pc_section == NULL)
return NULL;
The new find_pc_section logic now returns NULL as the PC is in an
overlay section, which is not in the section map.
I think this routine needs to be fixed to take into account the section
it is passed as argument, probably along the following lines:
Index: gdb/minsyms.c
===================================================================
RCS file: /cvs/src/src/gdb/minsyms.c,v
retrieving revision 1.66
diff -u -p -r1.66 minsyms.c
--- gdb/minsyms.c 28 Jun 2009 00:20:22 -0000 1.66
+++ gdb/minsyms.c 21 Aug 2009 11:16:26 -0000
@@ -457,7 +457,7 @@ lookup_minimal_symbol_by_pc_section_1 (C
struct objfile *objfile;
struct minimal_symbol *msymbol;
struct minimal_symbol *best_symbol = NULL;
- struct obj_section *pc_section;
+ struct obj_section *pc_section = section;
enum minimal_symbol_type want_type, other_type;
want_type = want_trampoline ? mst_solib_trampoline : mst_text;
@@ -466,7 +466,8 @@ lookup_minimal_symbol_by_pc_section_1 (C
/* PC has to be in a known section. This ensures that anything
beyond the end of the last segment doesn't appear to be part of
the last function in the last segment. */
- pc_section = find_pc_section (pc);
+ if (pc_section == NULL)
+ pc_section = find_pc_section (pc);
if (pc_section == NULL)
return NULL;
(A cleaner fix might be to fix all callers to never pass in a NULL
section argument --most already don't-- and simply rely on it.)
With this patch in addition to yours, all overlay tests pass again
on spu-elf.
I'm still not completely happy about the assertions you added. An
assertion failure is supposed to be an indication of a bug in GDB
-- it should never be possible to trigger the assertion just by
providing particular user input (this includes the binary file).
If for whatever reason the user provides a binary that has overlapping
section that are not recognized as overlays by your logic, you'll
still run into the failure ...
In other places where we detect weird contents of the binary (e.g.
in the DWARF data), we issue a "complaint" and then try to continue.
Maybe you should do the same here: if you find overlapping sections,
issue a complaint and then continue, while ignoring those sections.
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
next prev parent reply other threads:[~2009-08-21 11:30 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-17 7:34 Paul Pluzhnikov
2009-07-17 15:59 ` Paul Pluzhnikov
2009-07-17 16:27 ` Tom Tromey
2009-07-17 17:19 ` Paul Pluzhnikov
2009-07-21 17:57 ` Tom Tromey
2009-07-21 20:51 ` Paul Pluzhnikov
2009-07-21 21:03 ` Tom Tromey
2009-07-22 15:23 ` Pedro Alves
2009-07-22 16:33 ` Tom Tromey
2009-07-22 17:02 ` Paul Pluzhnikov
2009-07-22 17:02 ` Pedro Alves
2009-07-22 17:16 ` Paul Pluzhnikov
2009-07-22 18:08 ` Paul Pluzhnikov
2009-07-22 18:10 ` Pedro Alves
2009-07-22 18:12 ` Paul Pluzhnikov
2009-07-22 19:19 ` Pedro Alves
2009-07-22 19:34 ` Paul Pluzhnikov
2009-07-22 19:54 ` Pedro Alves
2009-08-17 21:15 ` [commit] Fix reread_symbols crash (Re: [patch] Speed up find_pc_section) Ulrich Weigand
2009-08-04 14:22 ` [patch] Speed up find_pc_section Tom Tromey
2009-08-04 15:06 ` Paul Pluzhnikov
2009-08-04 15:38 ` Tom Tromey
[not found] ` <8ac60eac0908042358q4d2061d2md3c49cf4aab26398@mail.gmail.com>
[not found] ` <m34osmi5jx.fsf@fleche.redhat.com>
[not found] ` <8ac60eac0908050940we3dc478rd182f4367a650f1b@mail.gmail.com>
[not found] ` <8ac60eac0908052259l7b1c21d1t212991886a5f8b18@mail.gmail.com>
[not found] ` <m3eirofxwh.fsf@fleche.redhat.com>
[not found] ` <8ac60eac0908070030g7500a5ack3fcc81862e2a5b0a@mail.gmail.com>
2009-08-07 23:30 ` Paul Pluzhnikov
2009-08-09 21:37 ` Paul Pluzhnikov
2009-08-10 18:09 ` Tom Tromey
2009-08-10 20:39 ` Paul Pluzhnikov
2009-08-17 19:45 ` Ulrich Weigand
2009-08-17 19:57 ` Ulrich Weigand
2009-08-17 22:55 ` Paul Pluzhnikov
2009-08-18 13:48 ` Ulrich Weigand
2009-08-20 18:03 ` Paul Pluzhnikov
2009-08-20 18:39 ` Ulrich Weigand
2009-08-20 21:06 ` Paul Pluzhnikov
2009-08-20 22:34 ` Daniel Jacobowitz
2009-08-21 12:36 ` Ulrich Weigand [this message]
2009-08-23 23:25 ` Paul Pluzhnikov
2009-08-26 7:21 ` Paul Pluzhnikov
2009-08-26 14:37 ` Jan Kratochvil
2009-08-26 14:38 ` Paul Pluzhnikov
2009-08-26 15:17 ` Paul Pluzhnikov
2009-08-26 23:45 ` Jan Kratochvil
2009-08-27 2:56 ` Paul Pluzhnikov
2009-09-02 17:02 ` Paul Pluzhnikov
2009-09-08 18:37 ` What should we do re: "[patch] Speed up find_pc_section" Joel Brobecker
2009-09-08 20:16 ` Paul Pluzhnikov
2009-09-08 21:17 ` Joel Brobecker
2009-09-09 5:58 ` [patch] Speed up find_pc_section Joel Brobecker
2009-09-09 7:56 ` Tristan Gingold
2009-09-09 15:04 ` Joel Brobecker
2009-09-11 7:44 ` Tristan Gingold
2009-09-10 17:36 ` Paul Pluzhnikov
2009-09-10 18:30 ` Joel Brobecker
2009-09-11 1:30 ` Paul Pluzhnikov
2009-09-11 6:51 ` Pierre Muller
2009-09-11 7:29 ` Paul Pluzhnikov
2009-09-11 7:40 ` Mark Kettenis
2009-09-11 7:51 ` Paul Pluzhnikov
2009-09-11 7:41 ` Pierre Muller
2009-09-11 8:03 ` Paul Pluzhnikov
2009-09-11 8:41 ` Pierre Muller
2009-09-11 17:47 ` Paul Pluzhnikov
2009-09-11 21:15 ` Joel Brobecker
2009-09-13 21:47 ` Paul Pluzhnikov
2009-09-14 16:43 ` Ulrich Weigand
2009-09-14 17:19 ` Paul Pluzhnikov
2009-09-14 17:36 ` Joel Brobecker
2009-09-14 18:10 ` Paul Pluzhnikov
2009-09-14 18:21 ` Joel Brobecker
2009-09-11 20:51 ` Tom Tromey
2009-09-11 21:04 ` Paul Pluzhnikov
2009-09-11 21:14 ` Tom Tromey
2009-09-11 7:53 ` Tristan Gingold
2009-09-11 8:33 ` Paul Pluzhnikov
2009-09-11 8:39 ` Tristan Gingold
2009-09-11 16:23 ` Paul Pluzhnikov
2009-09-09 5:39 ` Joel Brobecker
2009-09-10 16:18 ` Paul Pluzhnikov
2009-09-11 21:06 ` Joel Brobecker
2009-09-14 16:41 ` Ulrich Weigand
2009-08-18 18:18 ` Michael Snyder
2009-07-17 18:56 ` Paul Pluzhnikov
2009-07-21 3:34 ` Paul Pluzhnikov
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=200908211130.n7LBUCJc011108@d12av02.megacenter.de.ibm.com \
--to=uweigand@de.ibm.com \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=gdb-patches@sourceware.org \
--cc=ppluzhnikov@google.com \
--cc=tromey@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