This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: RFA: dbxread patch
- From: "J. Johnston" <jjohnstn at redhat dot com>
- To: Jim Blandy <jimb at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Tue, 25 Feb 2003 18:17:02 -0500
- Subject: Re: RFA: dbxread patch
- Organization: Red Hat Inc.
- References: <3E5AB25A.30504@redhat.com> <vt2y944asgr.fsf@zenia.red-bean.com>
Jim Blandy wrote:
Yes, looks good.
Please add a comment briefly explaining why the check is needed
(hand-generated stabs that contain N_FUN stabs but no N_SLINE stabs).
I have attached a new patch with a comment.
Elena suggested the change, right? She should be credited in the
ChangeLog entry.
You are correct - thanks for spotting this oversight.
2003-02-25 Jeff Johnston <jjohnstn at redhat dot com>
From Elena Zannoni <ezannoni at redhat dot com>
* dbxread.c (process_one_symbol): Only record line 0 if one or more sline
entries have been seen for the function.
Ok now?
-- Jeff J.
"J. Johnston" <jjohnstn at redhat dot com> writes:
The following patch fixes a problem when the stabs debug info
for a file does not contain sline entries. This happens, for
example with the glibc syscall code which is generated assembler
code. In process_one_symbol in dbxread.c, a line 0 is recorded for the
end of the function. When there are no other line numbers, we end up finding this
line 0 as our alt_symtab in symtab:find_pc_sect_line() and we end up
subtracting one resulting in line -1. This problem manifests itself
when we attempt to break at the generated glibc functions such as
kill.
The patch changes process_one_symbol() to only record line 0 if sline info
has been found for the function.
Ok to commit?
-- Jeff J.
Index: dbxread.c
===================================================================
RCS file: /cvs/src/src/gdb/dbxread.c,v
retrieving revision 1.43
diff -u -r1.43 dbxread.c
--- dbxread.c 20 Feb 2003 18:31:14 -0000 1.43
+++ dbxread.c 25 Feb 2003 23:12:07 -0000
@@ -2831,7 +2831,13 @@
break;
}
- record_line (current_subfile, 0, last_function_start + valu);
+ /* The following check is added before recording line 0 at
+ end of function so as to handle hand-generated stabs
+ which may have an N_FUN stabs at the end of the function, but
+ no N_SLINE stabs. */
+ if (sline_found_in_function)
+ record_line (current_subfile, 0, last_function_start + valu);
+
within_function = 0;
new = pop_context ();