From: Christopher Faylor <cgf@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: Re: Simple but crucial bug fix to gdb
Date: Wed, 30 May 2001 14:36:00 -0000 [thread overview]
Message-ID: <20010530173650.A21397@redhat.com> (raw)
In-Reply-To: <3.0.5.32.20010530142745.01470ec0@pophost.pdxuxbre.lmc.com>
On Wed, May 30, 2001 at 02:27:45PM -0700, Charlie Mills wrote:
>Dear gdb maintainer,
>
>I would like to submit a very simple patch to gdb.
>I would like if possible to avoid legal issues (avoid having to
>submit a form to our legal department) by simply describing the fix,
>which is a diff of only a few characters, rather than sending you a
>source file.
>
>Bug description: gdb 4.xx and 5.0 crashes while reading our executable.
>Our executable is the result of linking objects compiled by gcc with
>other objects compiled using SPARCworks CC. The stack trace is
>appended at the end of this message.
>
>Unfortunately the executable is large and proprietary.
>Although I can't submit a test case, it is very easy to confirm by
>inspecting the code that the patch is correct and the original code
>is incorrect. The patch is as follows:
>
>File: gdb-5.0/gdb/partial-stab.h
>
>OLD, lines 602-605:
>
> if (textlow_not_set
> || (CUR_SYMBOL_VALUE < pst->textlow
> && CUR_SYMBOL_VALUE
> != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT)))
> {
> pst->textlow = CUR_SYMBOL_VALUE;
>
>NEW, lines 602-605:
>
> if (pst && (textlow_not_set
> || (CUR_SYMBOL_VALUE < pst->textlow
> && CUR_SYMBOL_VALUE
> != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT))))
> {
> pst->textlow = CUR_SYMBOL_VALUE;
>
>OLD crashes because pst is 0 (and is intended to be 0 I think).
>
>I hope this is enough for you to get this included in the next release.
>I hate maintaining patches. Please let me know if there is anything
>else I can do for you about this. Thank you!
Assuming that I have properly tracked where this is in the current sources,
I think that this change looks reasonable. There is a similar check for
pst being non-null a few lines up from this point and pst does not get
set in the intervening space. So, if the previous check is correct, then
this one is obviously needed.
I've included a diff below with some extended context. If there are no
objections, I'll be happy to check this in.
cgf
Index: partial-stab.h
===================================================================
RCS file: /cvs/uberbaum/gdb/partial-stab.h,v
retrieving revision 1.7
diff -c -2 -0 -p -r1.7 partial-stab.h
*** partial-stab.h 2001/03/06 08:21:11 1.7
--- partial-stab.h 2001/05/30 21:34:59
*************** switch (CUR_SYMBOL_TYPE)
*** 583,626 ****
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
value for the bottom of the text seg in those cases. */
if (pst && textlow_not_set)
{
pst->textlow =
find_stab_function_addr (namestring, pst->filename, objfile);
textlow_not_set = 0;
}
#endif
/* End kludge. */
/* Keep track of the start of the last function so we
can handle end of function symbols. */
last_function_start = CUR_SYMBOL_VALUE;
/* In reordered executables this function may lie outside
the bounds created by N_SO symbols. If that's the case
use the address of this function as the low bound for
the partial symbol table. */
! if (textlow_not_set
! || (pst && CUR_SYMBOL_VALUE < pst->textlow
! && CUR_SYMBOL_VALUE
! != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile))))
{
pst->textlow = CUR_SYMBOL_VALUE;
textlow_not_set = 0;
}
#endif /* DBXREAD_ONLY */
add_psymbol_to_list (namestring, p - namestring,
VAR_NAMESPACE, LOC_BLOCK,
&objfile->static_psymbols,
0, CUR_SYMBOL_VALUE,
psymtab_language, objfile);
continue;
/* Global functions were ignored here, but now they
are put into the global psymtab like one would expect.
They're also in the minimal symbol table. */
case 'F':
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
#ifdef DBXREAD_ONLY
/* Kludges for ELF/STABS with Sun ACC */
last_function_name = namestring;
--- 583,627 ----
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
value for the bottom of the text seg in those cases. */
if (pst && textlow_not_set)
{
pst->textlow =
find_stab_function_addr (namestring, pst->filename, objfile);
textlow_not_set = 0;
}
#endif
/* End kludge. */
/* Keep track of the start of the last function so we
can handle end of function symbols. */
last_function_start = CUR_SYMBOL_VALUE;
/* In reordered executables this function may lie outside
the bounds created by N_SO symbols. If that's the case
use the address of this function as the low bound for
the partial symbol table. */
! if (pst
! && (textlow_not_set
! || (pst && CUR_SYMBOL_VALUE < pst->textlow
! && CUR_SYMBOL_VALUE
! != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)))))
{
pst->textlow = CUR_SYMBOL_VALUE;
textlow_not_set = 0;
}
#endif /* DBXREAD_ONLY */
add_psymbol_to_list (namestring, p - namestring,
VAR_NAMESPACE, LOC_BLOCK,
&objfile->static_psymbols,
0, CUR_SYMBOL_VALUE,
psymtab_language, objfile);
continue;
/* Global functions were ignored here, but now they
are put into the global psymtab like one would expect.
They're also in the minimal symbol table. */
case 'F':
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
#ifdef DBXREAD_ONLY
/* Kludges for ELF/STABS with Sun ACC */
last_function_name = namestring;
next prev parent reply other threads:[~2001-05-30 14:36 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-30 14:27 Charlie Mills
2001-05-30 14:36 ` Christopher Faylor [this message]
2001-05-30 15:16 ` Fernando Nasser
2001-05-30 20:18 ` Jim Blandy
2001-05-30 20:25 ` Christopher Faylor
2001-05-31 5:30 ` Fernando Nasser
2001-05-31 13:55 ` Jim Blandy
2001-05-31 14:43 ` Fernando Nasser
2001-05-31 16:46 ` Christopher Faylor
2001-05-31 17:40 ` Daniel Berlin
2001-05-31 20:00 ` Frank Ch. Eigler
2001-06-01 9:41 ` Fernando Nasser
2001-06-01 10:01 ` Michael Snyder
2001-06-01 11:14 ` Daniel Berlin
2001-06-01 11:25 ` Fernando Nasser
2001-06-01 14:05 ` Charlie Mills
2001-06-06 6:01 ` Andrew Cagney
2001-05-30 20:00 ` Christopher Faylor
2001-05-30 20:43 ` Christopher Faylor
2001-05-30 20:12 ` Jim Blandy
2001-05-30 21:23 ` Daniel Berlin
2001-06-01 13:35 ` Jim Blandy
2001-06-01 13:41 ` Fernando Nasser
2001-06-01 14:07 ` Daniel Berlin
2001-06-01 14:15 ` Jim Blandy
2001-06-01 14:17 ` Jim Blandy
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=20010530173650.A21397@redhat.com \
--to=cgf@redhat.com \
--cc=gdb-patches@sources.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