On Wed, Jul 10, 2002 at 07:08:16PM -0700, Jim Ingham wrote:
Index: dbxread.c
===================================================================
RCS file: /cvs/src/src/gdb/dbxread.c,v
retrieving revision 1.33
diff -c -w -r1.33 dbxread.c
*** dbxread.c 10 May 2002 07:32:50 -0000 1.33
--- dbxread.c 11 Jul 2002 01:58:29 -0000
***************
Hi, all...
Fred added an extra record_line call which closes off the last SLINE
in
a function when we come across the end of function N_FUN stab. This
was a good thing, but unfortunately, he used function_start_offset,
which on most systems is just the offset to the TEXT section (the
exception being Solaris, where is actually is the real function
start).
He really meant to use last_function_start, which is the real address
of the last N_FUN stab seen.
I also fixed the comment before sline_found_in_function to accord with
its current usage, since the old comment is wrong. We set
sline_found_in_function = 0 at the same time we set
last_function_start, but then we set it to 1 when we see the FIRST
SLINE in a function, but last_function_start is still good after that.
And nobody ever checks it to see if they should use
last_function_start
or not...
Well, the archeology is hardly correct. I added both
last_function_start and sline_found_in_function recently;
last_function_start was because I couldn't convince myself that I could
trust the other. Note that in the normal N_SLINE handling, we use
function_start_offset and not last_function_start. So if your change
was really correct then all the N_SLINEs for your function would be in
the wrong places too.
Could you please explain what problem you're trying to fix, and support
it with some stabs dumps?
*** 2761,2768 ****
static CORE_ADDR last_function_start;
/* If this is nonzero, we've seen an N_SLINE since the start of
the
current
! function. Initialized to nonzero to assure that
last_function_start
! is never used uninitialized. */
static int sline_found_in_function = 1;
/* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
source
--- 2761,2768 ----
static CORE_ADDR last_function_start;
/* If this is nonzero, we've seen an N_SLINE since the start of
the
current
! function. We use this to tell us to move the first sline to
the
beginning
! of the function regardless of what its given value is. */
static int sline_found_in_function = 1;
/* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
source
***************
*** 2799,2805 ****
{
/* This N_FUN marks the end of a function. This closes off
the
current block. */
! record_line (current_subfile, 0, function_start_offset +
valu);
within_function = 0;
new = pop_context ();
--- 2799,2805 ----
{
/* This N_FUN marks the end of a function. This closes off
the
current block. */
! record_line (current_subfile, 0, last_function_start +
valu);
within_function = 0;
new = pop_context ();
Jim
--
Jim Ingham jingham@apple.com
Developer Tools - gdb
Apple Computer
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer