From: Elena Zannoni <ezannoni@redhat.com>
To: Roger Sayle <roger@eyesopen.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [PATCH] PR symtab/1651: core dump reading xlc compiled binaries
Date: Mon, 29 Nov 2004 02:11:00 -0000 [thread overview]
Message-ID: <16810.33894.990791.300926@localhost.redhat.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0411201714190.9253-100000@www.eyesopen.com>
Roger Sayle writes:
>
> Firstly, in scan_xcoff_symtab to handle continuation symbols, the
> code calls next_symbol_text, which is a macro that invokes the function
> pointer next_symbol_text_func. Unfortunately, in xcoffread.c, this
> variable, next_symbol_text_func, is only initialized (to
> xcoff_next_symbol_text) in xcoff_psymtab_to_symtab which isn't executed
> prior to the failure when reading xlc generated binaries.
>
> The possible solutions to this first issue are to either initialize
> next_symbol_text_func earlier (perhaps at the top of scan_xcoff_symtab),
> or alternatively, as implemented below, bypass the virtual dispatch
> inside xcoffread.c, and instead call xcoff_next_symbol_text directly.
I prefer to use the other approach, which is also used in
dbxread.c. I'll change your patch accordingly. Please verify that it
still fixes your problem.
>
> Secondly, in xcoff_next_symbol_text, there's already a FIXME at the
> top of the function about how it ignores it's objfile argument and
> instead uses this_symtab_psymtab->objfile instead. As mentioned above,
> this function can now be called for "symbtab" symbols in addition to
> "psymtab" symbols, so in the case of this failure this_symtab_psymtab
> is NULL when we invoke this function. The least intrusive fix to this
> problem is to only overwrite objfile when this_symtab_psymtab is non-NULL.
> An alternative fix might be to always use the objfile argument as
> specified by the caller. I wasn't confident enough to risk this.
>
Agreed.
> With these two tweaks, I was able to get gdb to read in an debug the
> xlc-compiled cc1 binary from mainline GCC.
>
>
> The following patch has been tested on powerpc-ibm-aix5.2.0.0 by
> building "gdb" from CVS (6.3.50_2004_11_20-cvs -nx) configured with
> "--enable-64-bit-bfd" and running "make check" in the gdb/ directory
> with no new regressions. The results seem non-deterministic and
> I had to run "make check" a second time to get identical results.
> Searching GDB's GNATS database reveals that this failure is actually
> PR symtab/1651. I have absolutely no idea how to write a GDB test
> case, and I don't have CVS access nor copyright assignments for GDB.
> Hopefully the changes below should be small enough not to require an
> assignment as this is my first GDB patch submission.
>
Yes, this is fine.
Here is my version of the patch, let me know if it works for you and
I'll commit it.
Index: xcoffread.c
===================================================================
RCS file: /cvs/src/src/gdb/xcoffread.c,v
retrieving revision 1.44
diff -u -p -r1.44 xcoffread.c
--- xcoffread.c 23 Oct 2004 16:18:09 -0000 1.44
+++ xcoffread.c 29 Nov 2004 02:06:10 -0000
@@ -868,7 +868,8 @@ xcoff_next_symbol_text (struct objfile *
struct internal_syment symbol;
char *retval;
/* FIXME: is this the same as the passed arg? */
- objfile = this_symtab_psymtab->objfile;
+ if (this_symtab_psymtab)
+ objfile = this_symtab_psymtab->objfile;
bfd_coff_swap_sym_in (objfile->obfd, raw_symbol, &symbol);
if (symbol.n_zeroes)
@@ -2170,6 +2171,7 @@ scan_xcoff_symtab (struct objfile *objfi
last_source_file = NULL;
abfd = objfile->obfd;
+ next_symbol_text_func = xcoff_next_symbol_text;
sraw_symbol = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl;
nsyms = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl_num_syms;
next prev parent reply other threads:[~2004-11-29 2:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-21 2:01 Roger Sayle
2004-11-29 2:11 ` Elena Zannoni [this message]
2004-11-29 4:15 ` Roger Sayle
2004-12-21 10:07 ` Roger Sayle
2005-02-28 16:20 Roger Sayle
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=16810.33894.990791.300926@localhost.redhat.com \
--to=ezannoni@redhat.com \
--cc=gdb-patches@sources.redhat.com \
--cc=roger@eyesopen.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