Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* how to access show/set data
@ 2003-01-02 19:44 Kris Warkentin
  2003-01-02 20:59 ` Kris Warkentin
  2003-01-08 23:16 ` how to access show/set data Kevin Buettner
  0 siblings, 2 replies; 27+ messages in thread
From: Kris Warkentin @ 2003-01-02 19:44 UTC (permalink / raw)
  To: gdb

Say, for example, I wanted to programmatically modify solib_search_path, a
static char * which is declared in solib.c.

I know a pointer to it has been stored via the add_set_cmd function and I'm
wondering if there is a "approved" way for me to dig out this pointer.  I
have an OS dependent init file that needs to monkey with solib_search_path
and I didn't want to make the mods to solib.c or to make a "qnx_solib.c" for
such a small thing.

cheers,

Kris


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-02 19:44 how to access show/set data Kris Warkentin
@ 2003-01-02 20:59 ` Kris Warkentin
  2003-01-04  2:19   ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
  2003-01-08 23:16 ` how to access show/set data Kevin Buettner
  1 sibling, 1 reply; 27+ messages in thread
From: Kris Warkentin @ 2003-01-02 20:59 UTC (permalink / raw)
  To: Kris Warkentin, gdb

Nevermind.  I found lookup_cmd().

cheers,

Kris

----- Original Message -----
From: "Kris Warkentin" <kewarken@qnx.com>
To: <gdb@sources.redhat.com>
Sent: Thursday, January 02, 2003 2:44 PM
Subject: how to access show/set data


> Say, for example, I wanted to programmatically modify solib_search_path, a
> static char * which is declared in solib.c.
>
> I know a pointer to it has been stored via the add_set_cmd function and
I'm
> wondering if there is a "approved" way for me to dig out this pointer.  I
> have an OS dependent init file that needs to monkey with solib_search_path
> and I didn't want to make the mods to solib.c or to make a "qnx_solib.c"
for
> such a small thing.
>
> cheers,
>
> Kris
>
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* GDB 5.2/5.3 breakpoint bug
  2003-01-02 20:59 ` Kris Warkentin
@ 2003-01-04  2:19   ` Sunil Alankar
  2003-01-04  2:23     ` Daniel Jacobowitz
  0 siblings, 1 reply; 27+ messages in thread
From: Sunil Alankar @ 2003-01-04  2:19 UTC (permalink / raw)
  To: gdb

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.

Thx

Sunil


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-04  2:19   ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
@ 2003-01-04  2:23     ` Daniel Jacobowitz
  0 siblings, 0 replies; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-04  2:23 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

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


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-02 19:44 how to access show/set data Kris Warkentin
  2003-01-02 20:59 ` Kris Warkentin
@ 2003-01-08 23:16 ` Kevin Buettner
  2003-01-09 13:31   ` Kris Warkentin
  1 sibling, 1 reply; 27+ messages in thread
From: Kevin Buettner @ 2003-01-08 23:16 UTC (permalink / raw)
  To: Kris Warkentin, gdb

On Jan 2,  2:44pm, Kris Warkentin wrote:

> Say, for example, I wanted to programmatically modify solib_search_path, a
> static char * which is declared in solib.c.
> 
> I know a pointer to it has been stored via the add_set_cmd function and I'm
> wondering if there is a "approved" way for me to dig out this pointer.  I
> have an OS dependent init file that needs to monkey with solib_search_path
> and I didn't want to make the mods to solib.c or to make a "qnx_solib.c" for
> such a small thing.

Why not just put set solib-search-path in your .gdbinit file?

(I don't know of any "approved" way of digging out the pointer.)

Kevin


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-08 23:16 ` how to access show/set data Kevin Buettner
@ 2003-01-09 13:31   ` Kris Warkentin
  2003-01-09 18:20     ` Christopher Faylor
  0 siblings, 1 reply; 27+ messages in thread
From: Kris Warkentin @ 2003-01-09 13:31 UTC (permalink / raw)
  To: Kevin Buettner; +Cc: gdb

Actually, I had replied to my own post (you must have missed it) but the
lookup_cmd() function in cli-decode.c does the trick nicely.  The reason we
don't use .gdbinit is because we ship our tools in an odd set of places
(depending on which host) and it's easier to have defaults than to force
customers to use a .gdbinit.  Besides, where do you put your gdbinit on a
windows host? ;-)

cheers,

Kris

----- Original Message -----
From: "Kevin Buettner" <kevinb@redhat.com>
To: "Kris Warkentin" <kewarken@qnx.com>; <gdb@sources.redhat.com>
Sent: Wednesday, January 08, 2003 6:15 PM
Subject: Re: how to access show/set data


> On Jan 2,  2:44pm, Kris Warkentin wrote:
>
> > Say, for example, I wanted to programmatically modify solib_search_path,
a
> > static char * which is declared in solib.c.
> >
> > I know a pointer to it has been stored via the add_set_cmd function and
I'm
> > wondering if there is a "approved" way for me to dig out this pointer.
I
> > have an OS dependent init file that needs to monkey with
solib_search_path
> > and I didn't want to make the mods to solib.c or to make a "qnx_solib.c"
for
> > such a small thing.
>
> Why not just put set solib-search-path in your .gdbinit file?
>
> (I don't know of any "approved" way of digging out the pointer.)
>
> Kevin
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-09 13:31   ` Kris Warkentin
@ 2003-01-09 18:20     ` Christopher Faylor
  2003-01-09 18:50       ` Kris Warkentin
  0 siblings, 1 reply; 27+ messages in thread
From: Christopher Faylor @ 2003-01-09 18:20 UTC (permalink / raw)
  To: gdb

On Thu, Jan 09, 2003 at 08:32:15AM -0500, Kris Warkentin wrote:
>Besides, where do you put your gdbinit on a windows host?  ;-)

In your home directory, same as UNIX.

cgf


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-09 18:20     ` Christopher Faylor
@ 2003-01-09 18:50       ` Kris Warkentin
  2003-01-09 18:52         ` Kris Warkentin
  0 siblings, 1 reply; 27+ messages in thread
From: Kris Warkentin @ 2003-01-09 18:50 UTC (permalink / raw)
  To: gdb

Not quite that simple.  If I have to provide a .gdbinit file for EVERY user
in order for gdb to properly find our libs, how do I write an installer that
does the right thing?  Some users might use Cygwin, some might not.  $HOME
might be set, it might not.  If I'm installing to Solaris or Linux, which
user accounts do I install a .gdbinit in?  It's non-trivial, especially when
you ship tools where various cpu targets have their libs in
$QNX_TARGET/$CPU/lib, and so on.  We ship gdb targetting 5 different CPU's
(arm, mips, powerpc, sh, i386) on 4 different hosts (QNX, Solaris, Linux and
Windows) so having a routine that programmatically sets up some defaults for
where host and target files are is the only sensible way to go.

Either way, I found a nice clean way to do it so I'm happy.  By the way, one
my coworkers wrote a very small enhancement to the .gdbinit code that I
would like to submit.  Basically it allows a backend writer to define
EXTRA_GDBINIT_FILENAME to a string which will be pre-pended to .gdbinit for
initial sourcing.  ie. We define it to be .ntoCPU-gdbinit and then if, for
instance, our x86 targetting gdb finds $HOME/.ntox86-gdbinit, it reads it
instead.  This is really handy for us because most of our development is
targetting remote machines so this way you can automatically connect to the
cpu target when you start gdb.  All you need then is 'source .gdbinit' at
the end of your cpu specific one and you can have specific and generic
sections for your init code.

Sorry about the patch (I just diffed it from CVS so you could take a look).
If you're interested in accepting this, I'll patch your CVS head branch and
submit a diff against that.

cheers,

Kris

Index: main.c
===================================================================
RCS file: /product/tools/gdb/gdb/main.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -c -r1.2 -r1.3
*** main.c 6 Sep 2002 20:20:43 -0000 1.2
--- main.c 6 Sep 2002 21:23:46 -0000 1.3
***************
*** 524,534 ****
    homedir = getenv ("HOME");
    if (homedir)
      {
!       homeinit = (char *) alloca (strlen (homedir) +
!       strlen (gdbinit) + 10);
!       strcpy (homeinit, homedir);
!       strcat (homeinit, "/");
!       strcat (homeinit, gdbinit);

        if (!inhibit_gdbinit)
   {
--- 524,553 ----
    homedir = getenv ("HOME");
    if (homedir)
      {
!       /* Allow for a target specific gdbinit that will only override
!       the default gdbinit if it exists.  GP QNX Sep 6 2002 */
!       homeinit = 0;
!       if (extragdbinit)
!         {
!           homeinit = (char *) alloca (strlen (homedir) +
!                                       strlen (extragdbinit) + 10);
!
!           strcpy (homeinit, homedir);
!           strcat (homeinit, "/");
!           strcat (homeinit, extragdbinit);
!
!           if (stat (homeinit, &homebuf) < 0)
!               homeinit = 0;
!         }
!
!       if (!homeinit)
!         {
!           homeinit = (char *) alloca (strlen (homedir) +
!         strlen (gdbinit) + 10);
!           strcpy (homeinit, homedir);
!           strcat (homeinit, "/");
!           strcat (homeinit, gdbinit);
!         }

        if (!inhibit_gdbinit)
   {
Index: top.h
===================================================================
RCS file: /product/tools/gdb/gdb/top.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -c -r1.2 -r1.3
*** top.h 6 Sep 2002 20:20:47 -0000 1.2
--- top.h 6 Sep 2002 21:23:46 -0000 1.3
***************
*** 30,35 ****
--- 30,36 ----
  extern int inhibit_gdbinit;
  extern int epoch_interface;
  extern char gdbinit[];
+ extern char *extragdbinit;

  extern void print_gdb_version (struct ui_file *);

Index: top.c
===================================================================
RCS file: /product/tools/gdb/gdb/top.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -c -r1.2 -r1.3
*** top.c 6 Sep 2002 20:20:47 -0000 1.2
--- top.c 6 Sep 2002 21:23:46 -0000 1.3
***************
*** 76,81 ****
--- 76,87 ----
  #endif
  char gdbinit[] = GDBINIT_FILENAME;

+ #ifndef EXTRA_GDBINIT_FILENAME
+ #define EXTRA_GDBINIT_FILENAME 0
+ #endif
+
+ char *extragdbinit = EXTRA_GDBINIT_FILENAME;
+
  int inhibit_gdbinit = 0;

  /* If nonzero, and GDB has been configured to be able to use windows,

----- Original Message -----
From: "Christopher Faylor" <cgf@redhat.com>
To: <gdb@sources.redhat.com>
Sent: Thursday, January 09, 2003 1:21 PM
Subject: Re: how to access show/set data


> On Thu, Jan 09, 2003 at 08:32:15AM -0500, Kris Warkentin wrote:
> >Besides, where do you put your gdbinit on a windows host?  ;-)
>
> In your home directory, same as UNIX.
>
> cgf
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: how to access show/set data
  2003-01-09 18:50       ` Kris Warkentin
@ 2003-01-09 18:52         ` Kris Warkentin
  0 siblings, 0 replies; 27+ messages in thread
From: Kris Warkentin @ 2003-01-09 18:52 UTC (permalink / raw)
  To: Kris Warkentin, gdb

> would like to submit.  Basically it allows a backend writer to define
> EXTRA_GDBINIT_FILENAME to a string which will be pre-pended to .gdbinit
for
> initial sourcing.  ie. We define it to be .ntoCPU-gdbinit and then if, for

Oops...not prepended.  Just defined.  Sorry.

Kris


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 18:14     ` Sunil Alankar
  2003-01-08 18:24       ` Daniel Jacobowitz
@ 2003-01-29  3:56       ` Daniel Jacobowitz
  1 sibling, 0 replies; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-29  3:56 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

Sunil,

Try using "set language c++" before you try to set the breakpoint, and
let me know if that fixes it; I just built a Solaris GDB and verified
that it does for me.  This is a workaround for a real GDB bug and the
fix is still in progress; I hope it will be in 5.4.

On Wed, Jan 08, 2003 at 10:10:05AM -0800, Sunil Alankar wrote:
> Yes. GDB 5.1 sets break point on func() with the same binary/compiler. 5.2
> and 5.3 also work on Linux but have problems on Solaris.
> 
> --Sunil
> 
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@mvista.com]
> Sent: Wednesday, January 08, 2003 9:31 AM
> To: Sunil Alankar
> Cc: gdb@sources.redhat.com
> Subject: Re: GDB 5.2/5.3 breakpoint bug
> 
> 
> On Sun, Jan 05, 2003 at 03:07:04PM -0800, Sunil Alankar wrote:
> > //-------------------------------------------------------------
> > #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();
> >         }
> > };
> 
> 
> Func is an inline method.  Does gdb 5.1 really set a breakpoint on it?
> Using the exact same binary and compiler?  I find that pretty
> surprising, since there is no symbol for it anywhere; GDB's support for
> inline methods is pretty lousy right now.
> 
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
> 
> 

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-09  3:40                       ` Daniel Jacobowitz
@ 2003-01-09  5:18                         ` Ching Lai
  0 siblings, 0 replies; 27+ messages in thread
From: Ching Lai @ 2003-01-09  5:18 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Nafees, gdb, Cesar Quiroz, Sunil Alankar

Hi Daniel,

Thanks for the quick response and the patch.

Yes, the patch should fix the problem.  I made the same change
on my local copy of gdb 5.2.1 and it seems to work OK on my two test cases.

I reported the problem  in 11/25/02 to gdb bug report system with the bug
tracking number 849.

You should be able to close the bug.

Thanks again for your help.

Ching


      Reporter's email: ching@coware.com
      CC these people
      on PR status email:

      Number: 849
      Category: gdb
      Synopsis: no break line when stop at member function of a class
      Confidential: no
      Severity: serious
      Priority: medium
      Responsible: unassigned
      State: open
      Class: sw-bug
      Submitter-Id: net
      Arrival-Date: Mon Nov 25 10:08:03 PST 2002
      Closed-Date:
      Last-Modified:
      Originator: ching@coware.com
      Release: gdb5.2.1
      Organization:
      Environment: solaris 2.7

      Description: There is no break number displayed when you stop at
member function of a class for gdb5.2.1. It only happens in Solaris version
of gdb5.2.1. The linux version works OK. The previous
      version of solaris gdb 5.1 also works OK. So it must be something
change from 5.1  to 5.2.1. It seems to stop at the correctly location, but
just did not display the line number.
      /home/ching/testcase [tesla 6]>/eng-


----- Original Message -----
From: "Daniel Jacobowitz" <drow@mvista.com>
To: "Ching Lai" <ching@CoWare.com>
Cc: "Nafees" <nafees@CoWare.com>; <gdb@sources.redhat.com>; "Cesar Quiroz"
<Cesar.Quiroz@CoWare.com>; "Sunil Alankar" <salankar@CoWare.com>
Sent: Wednesday, January 08, 2003 7:40 PM
Subject: Re: GDB 5.2/5.3 breakpoint bug


> On Wed, Jan 08, 2003 at 02:45:23PM -0800, Ching Lai wrote:
> > Hi Daniel,
> >
> > > > Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build
> > them
> > > on
> > > > solaris seems to work OK with two test cases.
> > > >
> > > > Now the  question is to figure out why this line is added in gdb
5.21
> > and
> > > > gdb 5.3?
> > >
> > > The line is supposed to be there; it's so we know what is and isn't
> > > inside a function.  You need to explain better why it's causing a
> > > problem in find_pc_sect_line.
> >
> > The problem is the linetable in different symbol tables have the
> > same pc address in my testcase. One has valid number and the other one
> > with line number as 0 (which is added by the extra record_line()).
> >
> > In gdb 5.2.1 release of find_pc_set_line in symtab.c file.
> >
> >   1788        /* Is this file's best line closer than the best in the
other
> > files?
> >   1789           If so, record this file, and its best line, as best so
far.
> > */
> >   1790
> >   1791        if (prev && (!best || prev->pc > best->pc))
> >   1792          {
> >   1793            best = prev;
> >   1794            best_symtab = s;
> >   1795
> >   1796            /* Discard BEST_END if it's before the PC of the
current
> > BEST.  */
> >   1797            if (best_end <= best->pc)
> >   1798              best_end = 0;
> >   1799          }
> >
> > Since the line 1791 prev->pc with valid line number is not greater than
> > best->pc
> > which has 0 as line number, so it did not pick up the correct symbol
file.
> >
> > If the record_line is need in gdb 5.2.1 and gdb 5.3, then the line 1791
> > might
> > need an extra condition to void picking up the wrong symbol table which
has
> > line
> > number as 0 as added by record_line().
> >
> > 1791        if (prev && (!best || prev->pc > best->pc) && (prev->line !=
0))
> >
> >
> > Here are the debugging  section of my observation.
>
> Thanks for the extra detail.  I see what's going on now; I believe this
> patch should also avoid the problem.  Does it?
>
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
>
> 2002-03-08  Daniel Jacobowitz  <drow@mvista.com>
>
> * symtab.c (find_pc_sect_line): Don't consider end-of-function
> lines.
>
> Index: symtab.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/symtab.c,v
> retrieving revision 1.84
> diff -u -p -r1.84 symtab.c
> --- symtab.c 2 Jan 2003 14:27:26 -0000 1.84
> +++ symtab.c 9 Jan 2003 03:38:36 -0000
> @@ -2012,9 +2012,11 @@ find_pc_sect_line (CORE_ADDR pc, struct
>           the first line, prev will not be set.  */
>
>        /* Is this file's best line closer than the best in the other
files?
> -         If so, record this file, and its best line, as best so far.  */
> +         If so, record this file, and its best line, as best so far.
Don't
> +         save prev if it represents the end of a function (i.e. line
number
> +         0) instead of a real line.  */
>
> -      if (prev && (!best || prev->pc > best->pc))
> +      if (prev && prev->line && (!best || prev->pc > best->pc))
>   {
>     best = prev;
>     best_symtab = s;


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 22:46                     ` Ching Lai
@ 2003-01-09  3:40                       ` Daniel Jacobowitz
  2003-01-09  5:18                         ` Ching Lai
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-09  3:40 UTC (permalink / raw)
  To: Ching Lai; +Cc: Nafees, gdb, Cesar Quiroz, Sunil Alankar

On Wed, Jan 08, 2003 at 02:45:23PM -0800, Ching Lai wrote:
> Hi Daniel,
> 
> > > Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build
> them
> > on
> > > solaris seems to work OK with two test cases.
> > >
> > > Now the  question is to figure out why this line is added in gdb 5.21
> and
> > > gdb 5.3?
> >
> > The line is supposed to be there; it's so we know what is and isn't
> > inside a function.  You need to explain better why it's causing a
> > problem in find_pc_sect_line.
> 
> The problem is the linetable in different symbol tables have the
> same pc address in my testcase. One has valid number and the other one
> with line number as 0 (which is added by the extra record_line()).
> 
> In gdb 5.2.1 release of find_pc_set_line in symtab.c file.
> 
>   1788        /* Is this file's best line closer than the best in the other
> files?
>   1789           If so, record this file, and its best line, as best so far.
> */
>   1790
>   1791        if (prev && (!best || prev->pc > best->pc))
>   1792          {
>   1793            best = prev;
>   1794            best_symtab = s;
>   1795
>   1796            /* Discard BEST_END if it's before the PC of the current
> BEST.  */
>   1797            if (best_end <= best->pc)
>   1798              best_end = 0;
>   1799          }
> 
> Since the line 1791 prev->pc with valid line number is not greater than
> best->pc
> which has 0 as line number, so it did not pick up the correct symbol file.
> 
> If the record_line is need in gdb 5.2.1 and gdb 5.3, then the line 1791
> might
> need an extra condition to void picking up the wrong symbol table which has
> line
> number as 0 as added by record_line().
> 
> 1791        if (prev && (!best || prev->pc > best->pc) && (prev->line != 0))
> 
> 
> Here are the debugging  section of my observation.

Thanks for the extra detail.  I see what's going on now; I believe this
patch should also avoid the problem.  Does it?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2002-03-08  Daniel Jacobowitz  <drow@mvista.com>

	* symtab.c (find_pc_sect_line): Don't consider end-of-function
	lines.

Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.84
diff -u -p -r1.84 symtab.c
--- symtab.c	2 Jan 2003 14:27:26 -0000	1.84
+++ symtab.c	9 Jan 2003 03:38:36 -0000
@@ -2012,9 +2012,11 @@ find_pc_sect_line (CORE_ADDR pc, struct 
          the first line, prev will not be set.  */
 
       /* Is this file's best line closer than the best in the other files?
-         If so, record this file, and its best line, as best so far.  */
+         If so, record this file, and its best line, as best so far.  Don't
+         save prev if it represents the end of a function (i.e. line number
+         0) instead of a real line.  */
 
-      if (prev && (!best || prev->pc > best->pc))
+      if (prev && prev->line && (!best || prev->pc > best->pc))
 	{
 	  best = prev;
 	  best_symtab = s;


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 20:46                   ` Daniel Jacobowitz
@ 2003-01-08 22:46                     ` Ching Lai
  2003-01-09  3:40                       ` Daniel Jacobowitz
  0 siblings, 1 reply; 27+ messages in thread
From: Ching Lai @ 2003-01-08 22:46 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Nafees, gdb, Cesar Quiroz, Sunil Alankar

Hi Daniel,

> > Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build
them
> on
> > solaris seems to work OK with two test cases.
> >
> > Now the  question is to figure out why this line is added in gdb 5.21
and
> > gdb 5.3?
>
> The line is supposed to be there; it's so we know what is and isn't
> inside a function.  You need to explain better why it's causing a
> problem in find_pc_sect_line.

The problem is the linetable in different symbol tables have the
same pc address in my testcase. One has valid number and the other one
with line number as 0 (which is added by the extra record_line()).

In gdb 5.2.1 release of find_pc_set_line in symtab.c file.

  1788        /* Is this file's best line closer than the best in the other
files?
  1789           If so, record this file, and its best line, as best so far.
*/
  1790
  1791        if (prev && (!best || prev->pc > best->pc))
  1792          {
  1793            best = prev;
  1794            best_symtab = s;
  1795
  1796            /* Discard BEST_END if it's before the PC of the current
BEST.  */
  1797            if (best_end <= best->pc)
  1798              best_end = 0;
  1799          }

Since the line 1791 prev->pc with valid line number is not greater than
best->pc
which has 0 as line number, so it did not pick up the correct symbol file.

If the record_line is need in gdb 5.2.1 and gdb 5.3, then the line 1791
might
need an extra condition to void picking up the wrong symbol table which has
line
number as 0 as added by record_line().

1791        if (prev && (!best || prev->pc > best->pc) && (prev->line != 0))


Here are the debugging  section of my observation.

db) x/320d &s->linetable.nitems
0x6debf0:       77      1667196020      3069    1667200366
0x6dec00:       0       1229376 3069    1701207922
....
0x6df080:       0       1231068 1224    0
0x6df090:       0       1231080 1226    0
0x6df0a0:       0       1231080 1228    0
0x6df0b0:       0       1231152 0       0
0x6df0c0:       0       1231160 0       0            <=================  pc
1231160 with line number 0 for sc_unsigned.h symbol
0x6df0d0:       0       0       795176551       762405167
0x6df0e0:       1667787118      1731159908      1647129902      841888046
gdb) p pc
$37 = 1231164   <========= pc that we are looking for line number of a
symbol
gdb) p s->filename
$38 = 0x6f54c0
"/eng-qa/ching/sv4.1/source/../release/solaris/tools/include/systemc/datatyp
es/int/sc_unsigned.h"
(gdb) p *s
$39 = {next = 0x6f53b0, blockvector = 0x6f4578, linetable = 0x6debf0,
block_line_section = 10, primary = 0, filename = 0x6f54c0 "/
eng-qa/ching/sv4.1/source/../release/solaris/tools/include/systemc/datatypes
/int/sc_unsigned.h", dirname = 0x6df0d8 "/eng-qa/ching
/gdb-5.2.1.inst/bin/", free_code = free_linetable, free_ptr = 0x0, nlines =
0, line_charpos = 0x0, language = language_cplus, debu
gformat = 0x6f5520 "unknown", version = 0x0, fullname = 0x0, objfile =
0x28ca98}

gdb) x/80d &s->linetable.nitems
0x6f4660:       14      0       8       0
0x6f4670:       0       114628  8       0
....
0x6f46f0:       0       114740  5       0
0x6f4700:       0       1231160 5       0    <=============== another pc
with the correct line number 5 for t.cpp symbol
0x6f4710:       0       1231168 6       0
0x6f4720:       0       1231184 7       0
0x6f4730:       0       1231192 0       0
0x6f4740:       0       1231200 0       0
0x6f4750:       0       0       795176551       762405167
0x6f4760:       1667787118      1731159908      1647129902      841888046
(gdb) p pc
$41 = 1231164

(gdb) p s->filename
$42 = 0x6f4630 "/eng-qa/ching/gdb-5.2.1.inst/bin/t.cpp"


Does this make sense?

Thanks.


Ching

----- Original Message -----
From: "Daniel Jacobowitz" <drow@mvista.com>
To: "Sunil Alankar" <sunil.alankar@CoWare.com>
Cc: <gdb@sources.redhat.com>
Sent: Wednesday, January 08, 2003 12:46 PM
Subject: Re: GDB 5.2/5.3 breakpoint bug


> On Wed, Jan 08, 2003 at 12:37:29PM -0800, Sunil Alankar wrote:
> > Meanwhile, a colleague of mine had a different workaround:
> >
> > There is one extra record_line call in gdb 5.21 and gdb 5.3 which
inserts
> > extra line number
> > and pc into the linetable of symtab entry.
> >
> > gdb/dbxread.c in gdb.5.1.01
> >   1919        if (*name == '\000')
> >   1920          {
> >   1921            /* This N_FUN marks the end of a function.  This
closes
> > off the
> >   1922               current block.  */
> >   1923            within_function = 0;
> >   1924            new = pop_context ();
> >
> > gdb/dbxread.c in gdb 5.2.1
> >   2749        if (*name == '\000')
> >   2750          {
> >   2751            /* This N_FUN marks the end of a function.  This
closes
> > off the
> >   2752               current block.  */
> >   2753            record_line (current_subfile, 0, function_start_offset
+
> > valu);
> >   2754            within_function = 0;
> >   2755            new = pop_context ();
> >   2756
> >
> > gdb/dbxread.c in gdb 5.3
> >
> >   2773        if (*name == '\000')
> >   2774          {
> >   2775            /* This N_FUN marks the end of a function.  This
closes
> > off the
> >   2776               current block.  */
> >   2777            record_line (current_subfile, 0, function_start_offset
+
> > valu);
> >   2778            within_function = 0;
> >   2779            new = pop_context ();
> >   2780
> >
> >
> > Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build
them
> on
> > solaris seems to work OK with two test cases.
> >
> > Now the  question is to figure out why this line is added in gdb 5.21
and
> > gdb 5.3?
>
> The line is supposed to be there; it's so we know what is and isn't
> inside a function.  You need to explain better why it's causing a
> problem in find_pc_sect_line.
>
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 20:42                 ` Sunil Alankar
@ 2003-01-08 20:46                   ` Daniel Jacobowitz
  2003-01-08 22:46                     ` Ching Lai
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 20:46 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

On Wed, Jan 08, 2003 at 12:37:29PM -0800, Sunil Alankar wrote:
> Meanwhile, a colleague of mine had a different workaround:
> 
> There is one extra record_line call in gdb 5.21 and gdb 5.3 which inserts
> extra line number
> and pc into the linetable of symtab entry.
> 
> gdb/dbxread.c in gdb.5.1.01
>   1919        if (*name == '\000')
>   1920          {
>   1921            /* This N_FUN marks the end of a function.  This closes
> off the
>   1922               current block.  */
>   1923            within_function = 0;
>   1924            new = pop_context ();
> 
> gdb/dbxread.c in gdb 5.2.1
>   2749        if (*name == '\000')
>   2750          {
>   2751            /* This N_FUN marks the end of a function.  This closes
> off the
>   2752               current block.  */
>   2753            record_line (current_subfile, 0, function_start_offset +
> valu);
>   2754            within_function = 0;
>   2755            new = pop_context ();
>   2756
> 
> gdb/dbxread.c in gdb 5.3
> 
>   2773        if (*name == '\000')
>   2774          {
>   2775            /* This N_FUN marks the end of a function.  This closes
> off the
>   2776               current block.  */
>   2777            record_line (current_subfile, 0, function_start_offset +
> valu);
>   2778            within_function = 0;
>   2779            new = pop_context ();
>   2780
> 
> 
> Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build them on
> solaris seems to work OK with two test cases.
> 
> Now the  question is to figure out why this line is added in gdb 5.21 and
> gdb 5.3?

The line is supposed to be there; it's so we know what is and isn't
inside a function.  You need to explain better why it's causing a
problem in find_pc_sect_line.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-08 19:43               ` Sunil Alankar
@ 2003-01-08 20:42                 ` Sunil Alankar
  2003-01-08 20:46                   ` Daniel Jacobowitz
  0 siblings, 1 reply; 27+ messages in thread
From: Sunil Alankar @ 2003-01-08 20:42 UTC (permalink / raw)
  To: Sunil Alankar, Daniel Jacobowitz; +Cc: gdb

Meanwhile, a colleague of mine had a different workaround:

There is one extra record_line call in gdb 5.21 and gdb 5.3 which inserts
extra line number
and pc into the linetable of symtab entry.

gdb/dbxread.c in gdb.5.1.01
  1919        if (*name == '\000')
  1920          {
  1921            /* This N_FUN marks the end of a function.  This closes
off the
  1922               current block.  */
  1923            within_function = 0;
  1924            new = pop_context ();

gdb/dbxread.c in gdb 5.2.1
  2749        if (*name == '\000')
  2750          {
  2751            /* This N_FUN marks the end of a function.  This closes
off the
  2752               current block.  */
  2753            record_line (current_subfile, 0, function_start_offset +
valu);
  2754            within_function = 0;
  2755            new = pop_context ();
  2756

gdb/dbxread.c in gdb 5.3

  2773        if (*name == '\000')
  2774          {
  2775            /* This N_FUN marks the end of a function.  This closes
off the
  2776               current block.  */
  2777            record_line (current_subfile, 0, function_start_offset +
valu);
  2778            within_function = 0;
  2779            new = pop_context ();
  2780


Comment out the line 2753 in gdb 5.21 and 2777 in gdb  5.3 and build them on
solaris seems to work OK with two test cases.

Now the  question is to figure out why this line is added in gdb 5.21 and
gdb 5.3?


Thx


Sunil

> -----Original Message-----
> From: gdb-owner@sources.redhat.com
> [mailto:gdb-owner@sources.redhat.com]On Behalf Of Sunil Alankar
> Sent: Wednesday, January 08, 2003 11:36 AM
> To: Daniel Jacobowitz
> Cc: gdb@sources.redhat.com
> Subject: RE: GDB 5.2/5.3 breakpoint bug
>
>
>
>
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@mvista.com]
> Sent: Wednesday, January 08, 2003 11:32 AM
> To: Sunil Alankar
> Cc: gdb@sources.redhat.com
> Subject: Re: GDB 5.2/5.3 breakpoint bug
>
>
> On Wed, Jan 08, 2003 at 11:15:59AM -0800, Sunil Alankar wrote:
> >
> >
> > -----Original Message-----
> > From: Daniel Jacobowitz [mailto:drow@mvista.com]
> > Sent: Wednesday, January 08, 2003 10:16 AM
> > To: Sunil Alankar; gdb@sources.redhat.com
> > Subject: Re: GDB 5.2/5.3 breakpoint bug
> >
> >
> > On Wed, Jan 08, 2003 at 12:39:31PM -0500, Daniel Jacobowitz wrote:
> > > On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> > > > 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?
> > >
> > > When this happens, are the two lines in different files?
> >
> > I just can't get this to happen.  If two items in a row have the same
> > PC, we should never be picking the first of the two.
> >
> >
> > I see two entries with the same PC in a line table. Wonder if
> the problem
> is
> > in creation of the symbol table itself?
>
> Two entries with the same PC is not the problem; that's expected.
> Choosing the first is a problem; I can't get the code to do that.  I'll
> look at what you sent me.
>
> > I came across another problem which may be related. In the following
> > example, with gdb 5.3 on solaris:
> >
> >
> >  //-------------------------------------------------------------
> >  #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();
> >          }
> > };
> >
> > //--------------------------------------------------------------
> >
> > (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) b top::func(void)
> > Breakpoint 1 at 0x1333a8       <<<<< incorrectly set
> >
> >
> > There are two problems.
> > 1. GDB can not set the bp without specifying the full signature.
>
> If you specify the full signature it uses a different search technique;
> that's much more likely to work.  This is still a bug.
>
> > 2. Break point is incorrect even after specifying the full signature.
> >
> > Problem 2 goes away with my earlier workaround in gdb code.
>
> We need to figure out why this is happening.
>
>
> > While investigating problem 1, I found some mismatches in the scanning
> > functions in symtab.c.
> >
> > lookup_block_symbol (register const struct block *block, const
> char *name,
> > 		     const char *mangled_name,
> > 		     const namespace_enum namespace)
> > {
> > ............
> >  if (BLOCK_HASHTABLE (block))
> >     {
> >       unsigned int hash_index;
> >       hash_index = msymbol_hash_iw (name);
> >       hash_index = hash_index % BLOCK_BUCKETS (block);
> >
> >       //<<<<< at this point I get a nr of buckets in the table 17,
> > hash_index of 13 for the name
> > 	//<<<<< We only search in the bucket of index 13
> > 	//<<<<< when I manually instrumented and inspected the
> > 	//<<<<< block table, the required symbol (func__3top) is in
> the bucket 6
> > and we miss it.
>
> What are name and mangled_name?  I bet they're both func__3top.  This
> is a known bug and David's development branch contains a change which
> fixes it for this particular case; current_language is probably C when
> you start the search even though you're looking for a C++ symbol.
>
> I think the variable 'mangled_name' was null and 'name' was
> func__3top (for
> gdb command 'break top::func'). I would like to try the fix if
> there is one
> already.
>
> Thx
>
> Sunil
>
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-08 19:32             ` Daniel Jacobowitz
@ 2003-01-08 19:43               ` Sunil Alankar
  2003-01-08 20:42                 ` Sunil Alankar
  0 siblings, 1 reply; 27+ messages in thread
From: Sunil Alankar @ 2003-01-08 19:43 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb



-----Original Message-----
From: Daniel Jacobowitz [mailto:drow@mvista.com]
Sent: Wednesday, January 08, 2003 11:32 AM
To: Sunil Alankar
Cc: gdb@sources.redhat.com
Subject: Re: GDB 5.2/5.3 breakpoint bug


On Wed, Jan 08, 2003 at 11:15:59AM -0800, Sunil Alankar wrote:
>
>
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@mvista.com]
> Sent: Wednesday, January 08, 2003 10:16 AM
> To: Sunil Alankar; gdb@sources.redhat.com
> Subject: Re: GDB 5.2/5.3 breakpoint bug
>
>
> On Wed, Jan 08, 2003 at 12:39:31PM -0500, Daniel Jacobowitz wrote:
> > On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> > > 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?
> >
> > When this happens, are the two lines in different files?
>
> I just can't get this to happen.  If two items in a row have the same
> PC, we should never be picking the first of the two.
>
>
> I see two entries with the same PC in a line table. Wonder if the problem
is
> in creation of the symbol table itself?

Two entries with the same PC is not the problem; that's expected.
Choosing the first is a problem; I can't get the code to do that.  I'll
look at what you sent me.

> I came across another problem which may be related. In the following
> example, with gdb 5.3 on solaris:
>
>
>  //-------------------------------------------------------------
>  #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();
>          }
> };
>
> //--------------------------------------------------------------
>
> (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) b top::func(void)
> Breakpoint 1 at 0x1333a8       <<<<< incorrectly set
>
>
> There are two problems.
> 1. GDB can not set the bp without specifying the full signature.

If you specify the full signature it uses a different search technique;
that's much more likely to work.  This is still a bug.

> 2. Break point is incorrect even after specifying the full signature.
>
> Problem 2 goes away with my earlier workaround in gdb code.

We need to figure out why this is happening.


> While investigating problem 1, I found some mismatches in the scanning
> functions in symtab.c.
>
> lookup_block_symbol (register const struct block *block, const char *name,
> 		     const char *mangled_name,
> 		     const namespace_enum namespace)
> {
> ............
>  if (BLOCK_HASHTABLE (block))
>     {
>       unsigned int hash_index;
>       hash_index = msymbol_hash_iw (name);
>       hash_index = hash_index % BLOCK_BUCKETS (block);
>
>       //<<<<< at this point I get a nr of buckets in the table 17,
> hash_index of 13 for the name
> 	//<<<<< We only search in the bucket of index 13
> 	//<<<<< when I manually instrumented and inspected the
> 	//<<<<< block table, the required symbol (func__3top) is in the bucket 6
> and we miss it.

What are name and mangled_name?  I bet they're both func__3top.  This
is a known bug and David's development branch contains a change which
fixes it for this particular case; current_language is probably C when
you start the search even though you're looking for a C++ symbol.

I think the variable 'mangled_name' was null and 'name' was func__3top (for
gdb command 'break top::func'). I would like to try the fix if there is one
already.

Thx

Sunil

--
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 19:22           ` Sunil Alankar
@ 2003-01-08 19:32             ` Daniel Jacobowitz
  2003-01-08 19:43               ` Sunil Alankar
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 19:32 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

On Wed, Jan 08, 2003 at 11:15:59AM -0800, Sunil Alankar wrote:
> 
> 
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@mvista.com]
> Sent: Wednesday, January 08, 2003 10:16 AM
> To: Sunil Alankar; gdb@sources.redhat.com
> Subject: Re: GDB 5.2/5.3 breakpoint bug
> 
> 
> On Wed, Jan 08, 2003 at 12:39:31PM -0500, Daniel Jacobowitz wrote:
> > On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> > > 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?
> >
> > When this happens, are the two lines in different files?
> 
> I just can't get this to happen.  If two items in a row have the same
> PC, we should never be picking the first of the two.
> 
> 
> I see two entries with the same PC in a line table. Wonder if the problem is
> in creation of the symbol table itself?

Two entries with the same PC is not the problem; that's expected. 
Choosing the first is a problem; I can't get the code to do that.  I'll
look at what you sent me.

> I came across another problem which may be related. In the following
> example, with gdb 5.3 on solaris:
> 
> 
>  //-------------------------------------------------------------
>  #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();
>          }
> };
> 
> //--------------------------------------------------------------
> 
> (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) b top::func(void)
> Breakpoint 1 at 0x1333a8       <<<<< incorrectly set
> 
> 
> There are two problems.
> 1. GDB can not set the bp without specifying the full signature.

If you specify the full signature it uses a different search technique;
that's much more likely to work.  This is still a bug.

> 2. Break point is incorrect even after specifying the full signature.
> 
> Problem 2 goes away with my earlier workaround in gdb code.

We need to figure out why this is happening.


> While investigating problem 1, I found some mismatches in the scanning
> functions in symtab.c.
> 
> lookup_block_symbol (register const struct block *block, const char *name,
> 		     const char *mangled_name,
> 		     const namespace_enum namespace)
> {
> ............
>  if (BLOCK_HASHTABLE (block))
>     {
>       unsigned int hash_index;
>       hash_index = msymbol_hash_iw (name);
>       hash_index = hash_index % BLOCK_BUCKETS (block);
> 
>       //<<<<< at this point I get a nr of buckets in the table 17,
> hash_index of 13 for the name
> 	//<<<<< We only search in the bucket of index 13
> 	//<<<<< when I manually instrumented and inspected the
> 	//<<<<< block table, the required symbol (func__3top) is in the bucket 6
> and we miss it.

What are name and mangled_name?  I bet they're both func__3top.  This
is a known bug and David's development branch contains a change which
fixes it for this particular case; current_language is probably C when
you start the search even though you're looking for a C++ symbol.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-08 18:16         ` Daniel Jacobowitz
@ 2003-01-08 19:22           ` Sunil Alankar
  2003-01-08 19:32             ` Daniel Jacobowitz
  0 siblings, 1 reply; 27+ messages in thread
From: Sunil Alankar @ 2003-01-08 19:22 UTC (permalink / raw)
  To: Daniel Jacobowitz, gdb



-----Original Message-----
From: Daniel Jacobowitz [mailto:drow@mvista.com]
Sent: Wednesday, January 08, 2003 10:16 AM
To: Sunil Alankar; gdb@sources.redhat.com
Subject: Re: GDB 5.2/5.3 breakpoint bug


On Wed, Jan 08, 2003 at 12:39:31PM -0500, Daniel Jacobowitz wrote:
> On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> > 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?
>
> When this happens, are the two lines in different files?

I just can't get this to happen.  If two items in a row have the same
PC, we should never be picking the first of the two.


I see two entries with the same PC in a line table. Wonder if the problem is
in creation of the symbol table itself?
I came across another problem which may be related. In the following
example, with gdb 5.3 on solaris:


 //-------------------------------------------------------------
 #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();
         }
};

//--------------------------------------------------------------

(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) b top::func(void)
Breakpoint 1 at 0x1333a8       <<<<< incorrectly set


There are two problems.
1. GDB can not set the bp without specifying the full signature.
2. Break point is incorrect even after specifying the full signature.

Problem 2 goes away with my earlier workaround in gdb code.

While investigating problem 1, I found some mismatches in the scanning
functions in symtab.c.

lookup_block_symbol (register const struct block *block, const char *name,
		     const char *mangled_name,
		     const namespace_enum namespace)
{
............
 if (BLOCK_HASHTABLE (block))
    {
      unsigned int hash_index;
      hash_index = msymbol_hash_iw (name);
      hash_index = hash_index % BLOCK_BUCKETS (block);

      //<<<<< at this point I get a nr of buckets in the table 17,
hash_index of 13 for the name
	//<<<<< We only search in the bucket of index 13
	//<<<<< when I manually instrumented and inspected the
	//<<<<< block table, the required symbol (func__3top) is in the bucket 6
and we miss it.

      for (sym = BLOCK_BUCKET (block, hash_index); sym; sym =
sym->hash_next)
	{
	    if (SYMBOL_DEMANGLED_NAME(sym))
	  if (SYMBOL_NAMESPACE (sym) == namespace
	      && (mangled_name
		  ? strcmp (SYMBOL_NAME (sym), mangled_name) == 0
		  : SYMBOL_MATCHES_NAME (sym, name)))
	  {
	      if (SYMBOL_DEMANGLED_NAME(sym))
	      return sym;
	  }

	}
      return NULL;
    }

...................
}

Any thoughts?
Thx

Sunil




^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 18:14     ` Sunil Alankar
@ 2003-01-08 18:24       ` Daniel Jacobowitz
  2003-01-29  3:56       ` Daniel Jacobowitz
  1 sibling, 0 replies; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 18:24 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

I don't have access to Solaris, and I can't see how this would work;
can you send me (privately) a compiled binary that GDB 5.1 can insert
the breakpoint in?

On Wed, Jan 08, 2003 at 10:10:05AM -0800, Sunil Alankar wrote:
> Yes. GDB 5.1 sets break point on func() with the same binary/compiler. 5.2
> and 5.3 also work on Linux but have problems on Solaris.
> 
> --Sunil
> 
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@mvista.com]
> Sent: Wednesday, January 08, 2003 9:31 AM
> To: Sunil Alankar
> Cc: gdb@sources.redhat.com
> Subject: Re: GDB 5.2/5.3 breakpoint bug
> 
> 
> On Sun, Jan 05, 2003 at 03:07:04PM -0800, Sunil Alankar wrote:
> > //-------------------------------------------------------------
> > #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();
> >         }
> > };
> 
> 
> Func is an inline method.  Does gdb 5.1 really set a breakpoint on it?
> Using the exact same binary and compiler?  I find that pretty
> surprising, since there is no symbol for it anywhere; GDB's support for
> inline methods is pretty lousy right now.
> 
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
> 
> 

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-08 17:39       ` Daniel Jacobowitz
@ 2003-01-08 18:16         ` Daniel Jacobowitz
  2003-01-08 19:22           ` Sunil Alankar
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 18:16 UTC (permalink / raw)
  To: Sunil Alankar, gdb

On Wed, Jan 08, 2003 at 12:39:31PM -0500, Daniel Jacobowitz wrote:
> On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> > 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?
> 
> When this happens, are the two lines in different files?

I just can't get this to happen.  If two items in a row have the same
PC, we should never be picking the first of the two.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-08 17:30   ` Daniel Jacobowitz
@ 2003-01-08 18:14     ` Sunil Alankar
  2003-01-08 18:24       ` Daniel Jacobowitz
  2003-01-29  3:56       ` Daniel Jacobowitz
  0 siblings, 2 replies; 27+ messages in thread
From: Sunil Alankar @ 2003-01-08 18:14 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb

Yes. GDB 5.1 sets break point on func() with the same binary/compiler. 5.2
and 5.3 also work on Linux but have problems on Solaris.

--Sunil

-----Original Message-----
From: Daniel Jacobowitz [mailto:drow@mvista.com]
Sent: Wednesday, January 08, 2003 9:31 AM
To: Sunil Alankar
Cc: gdb@sources.redhat.com
Subject: Re: GDB 5.2/5.3 breakpoint bug


On Sun, Jan 05, 2003 at 03:07:04PM -0800, Sunil Alankar wrote:
> //-------------------------------------------------------------
> #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();
>         }
> };


Func is an inline method.  Does gdb 5.1 really set a breakpoint on it?
Using the exact same binary and compiler?  I find that pretty
surprising, since there is no symbol for it anywhere; GDB's support for
inline methods is pretty lousy right now.

--
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-07 23:55     ` Sunil Alankar
  2003-01-08  0:52       ` Daniel Jacobowitz
@ 2003-01-08 17:39       ` Daniel Jacobowitz
  2003-01-08 18:16         ` Daniel Jacobowitz
  1 sibling, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 17:39 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> 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?

When this happens, are the two lines in different files?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-05 23:10 ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
  2003-01-05 23:14   ` Sunil Alankar
@ 2003-01-08 17:30   ` Daniel Jacobowitz
  2003-01-08 18:14     ` Sunil Alankar
  1 sibling, 1 reply; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08 17:30 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

On Sun, Jan 05, 2003 at 03:07:04PM -0800, Sunil Alankar wrote:
> //-------------------------------------------------------------
> #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();
>         }
> };


Func is an inline method.  Does gdb 5.1 really set a breakpoint on it? 
Using the exact same binary and compiler?  I find that pretty
surprising, since there is no symbol for it anywhere; GDB's support for
inline methods is pretty lousy right now.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: GDB 5.2/5.3 breakpoint bug
  2003-01-07 23:55     ` Sunil Alankar
@ 2003-01-08  0:52       ` Daniel Jacobowitz
  2003-01-08 17:39       ` Daniel Jacobowitz
  1 sibling, 0 replies; 27+ messages in thread
From: Daniel Jacobowitz @ 2003-01-08  0:52 UTC (permalink / raw)
  To: Sunil Alankar; +Cc: gdb

On Tue, Jan 07, 2003 at 03:49:31PM -0800, Sunil Alankar wrote:
> 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?

I'll look at this more precisely later (tomorrow, I hope...) but what
that means is that a function ends exactly where another one starts. 
Very interesting; we probably should ignore the ending marker in that
case, but I'm not sure you're doing it the best way.

> 
> --- ../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
> 
> 

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-05 23:14   ` Sunil Alankar
@ 2003-01-07 23:55     ` Sunil Alankar
  2003-01-08  0:52       ` Daniel Jacobowitz
  2003-01-08 17:39       ` Daniel Jacobowitz
  0 siblings, 2 replies; 27+ messages in thread
From: Sunil Alankar @ 2003-01-07 23:55 UTC (permalink / raw)
  To: Sunil Alankar, Daniel Jacobowitz; +Cc: gdb

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


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
  2003-01-05 23:10 ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
@ 2003-01-05 23:14   ` Sunil Alankar
  2003-01-07 23:55     ` Sunil Alankar
  2003-01-08 17:30   ` Daniel Jacobowitz
  1 sibling, 1 reply; 27+ messages in thread
From: Sunil Alankar @ 2003-01-05 23:14 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb

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


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: GDB 5.2/5.3 breakpoint bug
       [not found] <IMEGIEBLGLIOEGOLAFIEGELNCEAA.sunil.alankar@coware.com>
@ 2003-01-05 23:10 ` Sunil Alankar
  2003-01-05 23:14   ` Sunil Alankar
  2003-01-08 17:30   ` Daniel Jacobowitz
  0 siblings, 2 replies; 27+ messages in thread
From: Sunil Alankar @ 2003-01-05 23:10 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb

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


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2003-01-29  3:56 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-02 19:44 how to access show/set data Kris Warkentin
2003-01-02 20:59 ` Kris Warkentin
2003-01-04  2:19   ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
2003-01-04  2:23     ` Daniel Jacobowitz
2003-01-08 23:16 ` how to access show/set data Kevin Buettner
2003-01-09 13:31   ` Kris Warkentin
2003-01-09 18:20     ` Christopher Faylor
2003-01-09 18:50       ` Kris Warkentin
2003-01-09 18:52         ` Kris Warkentin
     [not found] <IMEGIEBLGLIOEGOLAFIEGELNCEAA.sunil.alankar@coware.com>
2003-01-05 23:10 ` GDB 5.2/5.3 breakpoint bug Sunil Alankar
2003-01-05 23:14   ` Sunil Alankar
2003-01-07 23:55     ` Sunil Alankar
2003-01-08  0:52       ` Daniel Jacobowitz
2003-01-08 17:39       ` Daniel Jacobowitz
2003-01-08 18:16         ` Daniel Jacobowitz
2003-01-08 19:22           ` Sunil Alankar
2003-01-08 19:32             ` Daniel Jacobowitz
2003-01-08 19:43               ` Sunil Alankar
2003-01-08 20:42                 ` Sunil Alankar
2003-01-08 20:46                   ` Daniel Jacobowitz
2003-01-08 22:46                     ` Ching Lai
2003-01-09  3:40                       ` Daniel Jacobowitz
2003-01-09  5:18                         ` Ching Lai
2003-01-08 17:30   ` Daniel Jacobowitz
2003-01-08 18:14     ` Sunil Alankar
2003-01-08 18:24       ` Daniel Jacobowitz
2003-01-29  3:56       ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox