From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12507 invoked by alias); 7 Jan 2003 23:55:11 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 8848 invoked from network); 7 Jan 2003 23:53:55 -0000 Received: from unknown (HELO fw1.coware.com) (208.46.221.194) by 209.249.29.67 with SMTP; 7 Jan 2003 23:53:55 -0000 Received: from CoWare.com (coware1 [192.168.1.102]) by fw1.coware.com (8.11.6+Sun/8.11.4) with ESMTP id h07Nrhe25642; Tue, 7 Jan 2003 15:53:44 -0800 (PST) Received: from gleekxp (dhcp209.coware.com [192.168.1.209]) by CoWare.com (8.11.1/8.11.4) with SMTP id h07Nrbh26711; Tue, 7 Jan 2003 15:53:37 -0800 (PST) From: "Sunil Alankar" To: "Sunil Alankar" , "Daniel Jacobowitz" Cc: Subject: RE: GDB 5.2/5.3 breakpoint bug Date: Tue, 07 Jan 2003 23:55:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 In-Reply-To: X-SW-Source: 2003-01/txt/msg00065.txt.bz2 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 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 or 'top::func (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