Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Peter.Schauer" <Peter.Schauer@regent.e-technik.tu-muenchen.de>
To: dberlin@redhat.com (Daniel Berlin)
Cc: msnyder@cygnus.com, jimb@cygnus.com,
	gdb-patches@sources.redhat.com, ezannoni@cygnus.com
Subject: Re: [RFA]: Fix partial symbol lookups
Date: Thu, 16 Nov 2000 09:06:00 -0000	[thread overview]
Message-ID: <200011161706.SAA06577@reisser.regent.e-technik.tu-muenchen.de> (raw)
In-Reply-To: <m34s173m0f.fsf@dan2.cygnus.com>

> No, I'll clean it up if you like. Assuming you don't want me to just
> revert all the 10-12 changes and be done with it.

This decision has to be made by the symtab maintainers of course.

> > No, it points out another problem with `maint check'. Have you ever tried it
> > with your patches ?
> 
> Yes, I have.
> (gdb) maintenance check-symtabs 
> During symbol reading, type qualifier 'const' ignored.
> During symbol reading, unsupported stack op: 'DW_OP_deref_size'.
> During symbol reading, type qualifier 'volatile' ignored.
> (gdb)

Well, with gcc-2.95.2 -ggdb on a linux x86 box I get

(gdb) maint check
During symbol reading, type qualifier 'const' ignored.
During symbol reading, type qualifier 'volatile' ignored.
During symbol reading, type qualifier 'const' ignored.
Global symbol `__24Contains_static_instanceii' only found in misc.cc psymtab
Global symbol `__31Contains_nested_static_instanceii' only found in misc.cc psym
tab
Global symbol `__3Bariii' only found in misc.cc psymtab
Global symbol `__3Fooii' only found in misc.cc psymtab
Global symbol `__5Base1i' only found in misc.cc psymtab
Global symbol `__Q231Contains_nested_static_instance6Nestedi' only found in misc
.cc psymtab
Global symbol `__opi__3Foo' only found in misc.cc psymtab
Global symbol `foo__C22const_vol_method_classRi' only found in misc.cc psymtab
Global symbol `times__3Fooi' only found in misc.cc psymtab

which is not surprising, because maintenance_check_symtabs calls
lookup_block_symbol with the mangled symbol name.
Perhaps you have applied more patches to your source tree...

-- 
Peter Schauer			pes@regent.e-technik.tu-muenchen.de
From dberlin@redhat.com Thu Nov 16 09:16:00 2000
From: Daniel Berlin <dberlin@redhat.com>
To: gdb-patches@sources.redhat.com
Cc: Peter Schauer <Peter.Schauer@regent.e-technik.tu-muenchen.de>, jimb@redhat.com
Subject: [PATCH] revert 10-12 changes
Date: Thu, 16 Nov 2000 09:16:00 -0000
Message-id: <m3d7fv263i.fsf@dan2.cygnus.com>
X-SW-Source: 2000-11/msg00211.html
Content-length: 6925

Since these changes have been the bane of my existence, i'd like to
revert them.

Maybe in a few {weeks,months,years}, i'll make another go at it.

The attached should do this, but I left the division between
lookup_symbol and lookup_symbol_aux, since it seemed to make sense
(i'll revert this too if someone wants it the old way).

I also fixed the infinite recursion caused by this renaming, that Peter
had submitted a patch for.

Can someone look this over, and tell me if I missed anything? I went
by my submitted patch, but i've got a massive headache this morning,
so i may have missed something accidently.


--Dan

Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.20
diff -c -3 -p -r1.20 symfile.c
*** symfile.c	2000/10/27 15:02:42	1.20
--- symfile.c	2000/11/16 17:06:36
*************** compare_symbols (const PTR s1p, const PT
*** 212,218 ****
  
    s1 = (struct symbol **) s1p;
    s2 = (struct symbol **) s2p;
!   return (STRCMP (SYMBOL_SOURCE_NAME (*s1), SYMBOL_SOURCE_NAME (*s2)));
  }
  
  /*
--- 212,218 ----
  
    s1 = (struct symbol **) s1p;
    s2 = (struct symbol **) s2p;
!   return (STRCMP (SYMBOL_NAME (*s1), SYMBOL_NAME (*s2)));
  }
  
  /*
*************** compare_psymbols (const PTR s1p, const P
*** 245,252 ****
  
    s1 = (struct partial_symbol **) s1p;
    s2 = (struct partial_symbol **) s2p;
!   st1 = SYMBOL_SOURCE_NAME (*s1);
!   st2 = SYMBOL_SOURCE_NAME (*s2);
  
  
    if ((st1[0] - st2[0]) || !st1[0])
--- 245,252 ----
  
    s1 = (struct partial_symbol **) s1p;
    s2 = (struct partial_symbol **) s2p;
!   st1 = SYMBOL_NAME (*s1);
!   st2 = SYMBOL_NAME (*s2);
  
  
    if ((st1[0] - st2[0]) || !st1[0])
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.22
diff -c -3 -p -r1.22 symtab.c
*** symtab.c	2000/11/10 23:02:56	1.22
--- symtab.c	2000/11/16 17:06:37
*************** lookup_symbol (const char *name, const s
*** 563,569 ****
  {
    char *modified_name = NULL;
    char *modified_name2 = NULL;
-   int needtofreename = 0;
    struct symbol *returnval;
  
    if (case_sensitivity == case_sensitive_off)
--- 563,568 ----
*************** lookup_symbol (const char *name, const s
*** 581,603 ****
    else 
        modified_name = (char *) name;
  
-   /* If we are using C++ language, demangle the name before doing a lookup, so
-      we can always binary search. */
-   if (current_language->la_language == language_cplus)
-     {
-       modified_name2 = cplus_demangle (modified_name, DMGL_ANSI | DMGL_PARAMS);
-       if (modified_name2)
- 	{
- 	  modified_name = modified_name2;
- 	  needtofreename = 1;
- 	}
-     }
- 
    returnval = lookup_symbol_aux (modified_name, block, namespace,
  				 is_a_field_of_this, symtab);
-   if (needtofreename)
-     free (modified_name2);
- 
    return returnval;	 
  }
  
--- 580,587 ----
*************** lookup_symbol_aux (const char *name, con
*** 772,778 ****
  	    {
  	      /* This is a mangled variable, look it up by its
  	         mangled name.  */
! 	      return lookup_symbol (SYMBOL_NAME (msymbol), block,
  				    namespace, is_a_field_of_this, symtab);
  	    }
  	  /* There are no debug symbols for this file, or we are looking
--- 756,762 ----
  	    {
  	      /* This is a mangled variable, look it up by its
  	         mangled name.  */
! 	      return lookup_symbol_aux (SYMBOL_NAME (msymbol), block,
  				    namespace, is_a_field_of_this, symtab);
  	    }
  	  /* There are no debug symbols for this file, or we are looking
*************** lookup_symbol_aux (const char *name, con
*** 950,956 ****
  		   && MSYMBOL_TYPE (msymbol) != mst_file_text
  		   && !STREQ (name, SYMBOL_NAME (msymbol)))
  	    {
! 	      return lookup_symbol (SYMBOL_NAME (msymbol), block,
  				    namespace, is_a_field_of_this, symtab);
  	    }
  	}
--- 934,940 ----
  		   && MSYMBOL_TYPE (msymbol) != mst_file_text
  		   && !STREQ (name, SYMBOL_NAME (msymbol)))
  	    {
! 	      return lookup_symbol_aux (SYMBOL_NAME (msymbol), block,
  				    namespace, is_a_field_of_this, symtab);
  	    }
  	}
*************** lookup_symbol_aux (const char *name, con
*** 964,971 ****
  }
  								
  /* Look, in partial_symtab PST, for symbol NAME.  Check the global
!    symbols if GLOBAL, the static symbols if not */
  
  static struct partial_symbol *
  lookup_partial_symbol (struct partial_symtab *pst, const char *name, int global,
  		       namespace_enum namespace)
--- 948,960 ----
  }
  								
  /* Look, in partial_symtab PST, for symbol NAME.  Check the global
!    symbols if GLOBAL, the static symbols if not. 
  
+    Be aware that minimal symbols have no demangled names. So we need to lookup
+    by mangled name. However, this also means we can always binary search them, 
+    since they are a sorted list. If you change the way partial symbols work, 
+    you'll need to change this routine.  */
+ 
  static struct partial_symbol *
  lookup_partial_symbol (struct partial_symtab *pst, const char *name, int global,
  		       namespace_enum namespace)
*************** lookup_partial_symbol (struct partial_sy
*** 1001,1011 ****
  	  if (!(center < top))
  	    abort ();
  	  if (!do_linear_search
! 	      && (SYMBOL_LANGUAGE (*center) == language_java))
  	    {
  	      do_linear_search = 1;
! 	    }
! 	  if (STRCMP (SYMBOL_SOURCE_NAME (*center), name) >= 0)
  	    {
  	      top = center;
  	    }
--- 990,1002 ----
  	  if (!(center < top))
  	    abort ();
  	  if (!do_linear_search
! 	      && (SYMBOL_LANGUAGE (*center) == language_cplus
! 		  || SYMBOL_LANGUAGE (*center) == language_java
! 		  ))
  	    {
  	      do_linear_search = 1;
! 	    }	  
!   	  if (STRCMP (SYMBOL_NAME (*center), name) >= 0)
  	    {
  	      top = center;
  	    }
*************** lookup_block_symbol (register const stru
*** 1226,1244 ****
  	    }
  	  inc = (inc >> 1) + bot;
  	  sym = BLOCK_SYM (block, inc);
! 	  if (!do_linear_search && (SYMBOL_LANGUAGE (sym) == language_java))
  	    {
  	      do_linear_search = 1;
  	    }
! 	  if (SYMBOL_SOURCE_NAME (sym)[0] < name[0])
  	    {
  	      bot = inc;
  	    }
! 	  else if (SYMBOL_SOURCE_NAME (sym)[0] > name[0])
  	    {
  	      top = inc;
  	    }
! 	  else if (STRCMP (SYMBOL_SOURCE_NAME (sym), name) < 0)
  	    {
  	      bot = inc;
  	    }
--- 1217,1235 ----
  	    }
  	  inc = (inc >> 1) + bot;
  	  sym = BLOCK_SYM (block, inc);
! 	  if (!do_linear_search && ((SYMBOL_LANGUAGE (sym) == language_java) || SYMBOL_LANGUAGE (sym) == language_cplus))
  	    {
  	      do_linear_search = 1;
  	    }
! 	  if (SYMBOL_NAME (sym)[0] < name[0])
  	    {
  	      bot = inc;
  	    }
! 	  else if (SYMBOL_NAME (sym)[0] > name[0])
  	    {
  	      top = inc;
  	    }
! 	  else if (STRCMP (SYMBOL_NAME (sym), name) < 0)
  	    {
  	      bot = inc;
  	    }



  reply	other threads:[~2000-11-16  9:06 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <m3snorj4d7.fsf@dan2.cygnus.com>
2000-11-16  8:29 ` Peter.Schauer
2000-11-16  8:44   ` Daniel Berlin
2000-11-16  9:06     ` Peter.Schauer [this message]
2000-11-16  9:16       ` Daniel Berlin
2000-11-16  8:56   ` Daniel Berlin
2000-11-16  9:02     ` Daniel Berlin
     [not found] <200011161222.NAA05985@reisser.regent.e-technik.tu-muenchen.de>
     [not found] ` <m38zqj3mcb.fsf@dan2.cygnus.com>
2000-11-16 11:01   ` Christopher Faylor
     [not found] <m3vgtqv60a.fsf@dan2.cygnus.com>
     [not found] ` <npbsvhzxm9.fsf@zwingli.cygnus.com>
     [not found]   ` <m3hf59izpl.fsf@dan2.cygnus.com>
2000-11-15  8:56     ` Michael Snyder
     [not found]       ` <m3g0ktkrjh.fsf@dan2.cygnus.com>
2000-11-15 11:19         ` Michael Snyder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200011161706.SAA06577@reisser.regent.e-technik.tu-muenchen.de \
    --to=peter.schauer@regent.e-technik.tu-muenchen.de \
    --cc=dberlin@redhat.com \
    --cc=ezannoni@cygnus.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=jimb@cygnus.com \
    --cc=msnyder@cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox