This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
RE: GDB 5.2/5.3 breakpoint bug
- From: "Sunil Alankar" <sunil dot alankar at coware dot com>
- To: "Sunil Alankar" <sunil dot alankar at coware dot com>, "Daniel Jacobowitz" <drow at mvista dot com>
- Cc: <gdb at sources dot redhat dot com>
- Date: Tue, 7 Jan 2003 15:49:31 -0800
- Subject: RE: GDB 5.2/5.3 breakpoint bug
Hi,
While debugging this in function, find_pc_sect_line (CORE_ADDR pc, struct
sec *section, int notcurrent)
I found there were two line items in a line table with the same value of PC.
First one gets picked as the best match. But this had item->line == 0. The
next line item with the same value for item->pc, but a valid item->line ( >
0) does not get picked as the best match.
I put in the following check to correct this. My question is,
Is it valid to have have more than one line item with same value faor PC and
possibly 0 for line in one of them? What causes this?
Would this be an appropriate fix? Or is the problem more deep rooted in
creating the symbol table?
Sunil
--- ../original/gdb-5.3/gdb/symtab.c Thu Aug 29 20:24:00 2002
+++ gdb-5.3/gdb/symtab.c Tue Jan 7 14:42:34 2003
@@ -1950,6 +1950,21 @@
best_end = 0;
}
+ /* Handle the case where the prev->pc == best->pc due to more than
one line
+ items for a pc, but the best->line == 0. grab a better match if one
exists
+ that has a non zero line number */
+
+ else if (prev && (!best || ((prev->pc == best->pc) && (best->line ==
0)
+ && (prev->line != 0))))
+ {
+ best = prev;
+ best_symtab = s;
+
+ /* Discard BEST_END if it's before the PC of the current BEST. */
+ if (best_end <= best->pc)
+ best_end = 0;
+ }
+
/* If another line (denoted by ITEM) is in the linetable and its
PC is after BEST's PC, but before the current BEST_END, then
use ITEM's PC as the new best_end. */
-----Original Message-----
From: gdb-owner@sources.redhat.com
[mailto:gdb-owner@sources.redhat.com]On Behalf Of Sunil Alankar
Sent: Sunday, January 05, 2003 3:11 PM
To: Daniel Jacobowitz
Cc: gdb@sources.redhat.com
Subject: RE: GDB 5.2/5.3 breakpoint bug
Correction to the link for the systemc library sources:
http://www.systemc.org/download.php/systemc/13/19/systemc-2.0.1.tgz
Thx
Sunil
-----Original Message-----
From: gdb-owner@sources.redhat.com
[mailto:gdb-owner@sources.redhat.com]On Behalf Of Sunil Alankar
Sent: Sunday, January 05, 2003 3:07 PM
To: Daniel Jacobowitz
Cc: gdb@sources.redhat.com
Subject: RE: GDB 5.2/5.3 breakpoint bug
I guess the e-mail with the attachment of library and include files was not
delivered. Here it is without attachments.
The sources for the systemc library/include files are at
http://www.systemc.org/download.php/systemc/1/4/systemc-1.0.2.tar.gz
Sunil
-----Original Message-----
From: Sunil Alankar [mailto:sunil.alankar@coware.com]
Sent: Sunday, January 05, 2003 2:48 PM
To: Daniel Jacobowitz
Cc: gdb@sources.redhat.com
Subject: RE: GDB 5.2/5.3 breakpoint bug
Hi,
I have a detailed description of the problem here. Hope this would help. I
appreciate your help.
Thank you
Sunil
Problem:
Unable to set class method breakpoints in solaris with gdb 5.3 while using
systemc
library in the program.
Platform:
SunOS tesla 5.7 Generic_106541-23 sun4u sparc SUNW,Ultra-4
g++ version:
Reading specs from
/eng/devtools/SunOS_5.7/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/specs
gcc version 2.95.2 19991024 (release)
gdb version:
GNU gdb 5.3
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.7".
Test program:
This error occured while I am debugging a systemC (c++ library for system
design) program.
Here is a small example program that demonstrates the problem. ( I have
attached the
required library for solaris and include files with the e-mail)
//-------------------------------------------------------------
#include <systemc.h>
SC_MODULE(top)
{
public:
sc_in_clk iclk;
void func()
{
printf (".");
}
SC_CTOR(top)
{
SC_METHOD(func);
sensitive_pos << iclk;
dont_initialize();
}
};
int sc_main (int argc , char *argv[])
{
sc_clock clk("clk", 20);
top *top1 = new top("Top1");
top1->iclk(clk);
sc_start(20000);
return 0;
}
//-------------------------------------------------------------
Build the example with:
% g++ -g -I./include -L./ -lm test1.cpp -lsystemc -o tx
%/home1/gdb-5.3/gdb/gdb tx
GNU gdb 5.3
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.7"...
(gdb) b top::func
the class top does not have any method named func
Hint: try 'top::func<TAB> or 'top::func<ESC-?>
(Note leading single quote.)
(gdb)
In some systemC programs, gdb attempts to set breakpoints at invalid
addresses.
This works without a problem in gdb 5.1 with proper breakpoint being set.
I hope this test case can provide sufficient ground to get at the problem.
-----Original Message-----
From: Daniel Jacobowitz [mailto:drow@mvista.com]
Sent: Friday, January 03, 2003 6:23 PM
To: Sunil Alankar
Cc: gdb@sources.redhat.com
Subject: Re: GDB 5.2/5.3 breakpoint bug
On Fri, Jan 03, 2003 at 06:15:26PM -0800, Sunil Alankar wrote:
> Hi,
>
> Attempting to set a class member function breakpoint (say break
> myClass::funcOne) fails to set a proper break point in solaris 2.7.
> This happens with GDB 5.2 and 5.3. Bug does not occur in GDB 5.1. Anybody
> has any idea where to look?. I would appreciate any help.
What _does_ happen if it isn't a proper breakpoint? Can you provide a
transcript?
What version of what compiler are you using?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer