Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mike Frysinger <vapier@gentoo.org>
To: Daniel Jacobowitz <drow@false.org>
Cc: Mark Kettenis <mark.kettenis@xs4all.nl>,  gdb-patches@sourceware.org
Subject: Re: only force symbol lookups with local variables on hppa
Date: Tue, 22 Aug 2006 18:34:00 -0000	[thread overview]
Message-ID: <200608212207.06622.vapier@gentoo.org> (raw)
In-Reply-To: <20060822013517.GA4935@nevyn.them.org>


[-- Attachment #1.1: Type: text/plain, Size: 768 bytes --]

On Monday 21 August 2006 21:35, Daniel Jacobowitz wrote:
> On Mon, Aug 21, 2006 at 09:32:29PM -0400, Mike Frysinger wrote:
> > On Sunday 20 August 2006 09:57, Daniel Jacobowitz wrote:
> > > As a followup, there are several better options:
> >
> > hmm, is there a spec somewhere that says what order symbols need to be
> > resolved ?  how about an alternative option:
> >  - in write_dollar_variable(), if the symbol starts with a '$', we first
> > try to look it up via lookup_internalvar() ... if that fails, we fall
> > back to lookup_symbol() and lookup_minimal_symbol() and then jump back to
> > the lookup_internalvar() ...
>
> Hmm... that's also an interesting option.  I have no opinion.

here's a stab at it then ... i'm sure others have better ideas :)
-mike

[-- Attachment #1.2: Type: application/pgp-signature, Size: 827 bytes --]

[-- Attachment #2: gdb-lookup-internal-first.patch --]
[-- Type: text/x-diff, Size: 2899 bytes --]

2006-08-21  Mike Frysinger  <vapier@gentoo.org>

	* value.h (lookup_only_internalvar): New prototype.
	* value.c (lookup_only_internalvar): New function.
	(lookup_internalvar): Use lookup_only_internalvar.
	* parse.c (write_dollar_variable): Look up $ symbols in internal
	table first rather than last.

--- gdb/value.h
+++ gdb/value.h
@@ -419,6 +419,8 @@ extern void set_internalvar_component (s
 				       int bitpos, int bitsize,
 				       struct value *newvalue);
 
+extern struct internalvar *lookup_only_internalvar (char *name);
+
 extern struct internalvar *lookup_internalvar (char *name);
 
 extern int value_equal (struct value *arg1, struct value *arg2);
--- gdb/value.c
+++ gdb/value.c
@@ -741,10 +741,10 @@ init_if_undefined_command (char* args, i
    normally include a dollar sign.
 
    If the specified internal variable does not exist,
-   one is created, with a void value.  */
+   the return value is NULL.  */
 
 struct internalvar *
-lookup_internalvar (char *name)
+lookup_only_internalvar (char *name)
 {
   struct internalvar *var;
 
@@ -752,6 +752,25 @@ lookup_internalvar (char *name)
     if (strcmp (var->name, name) == 0)
       return var;
 
+  return NULL;
+}
+
+
+/* Look up an internal variable with name NAME.  NAME should not
+   normally include a dollar sign.
+
+   If the specified internal variable does not exist,
+   one is created, with a void value.  */
+
+struct internalvar *
+lookup_internalvar (char *name)
+{
+  struct internalvar *var;
+
+  var = lookup_only_internalvar (name);
+  if (var)
+    return var;
+
   var = (struct internalvar *) xmalloc (sizeof (struct internalvar));
   var->name = concat (name, (char *)NULL);
   var->value = allocate_value (builtin_type_void);
--- gdb/parse.c
+++ gdb/parse.c
@@ -486,6 +486,17 @@ write_dollar_variable (struct stoken str
   if (i >= 0)
     goto handle_register;
 
+  /* Any names starting with $ are probably debugger internal variables.  */
+
+  if (str.ptr[0] == '$' && lookup_only_internalvar (copy_name (str) + 1))
+    {
+internal_lookup:
+      write_exp_elt_opcode (OP_INTERNALVAR);
+      write_exp_elt_intern (lookup_internalvar (copy_name (str) + 1));
+      write_exp_elt_opcode (OP_INTERNALVAR);
+      return;
+    }
+
   /* On some systems, such as HP-UX and hppa-linux, certain system routines 
      have names beginning with $ or $$.  Check for those, first. */
 
@@ -508,12 +519,9 @@ write_dollar_variable (struct stoken str
       return;
     }
 
-  /* Any other names starting in $ are debugger internal variables.  */
-
-  write_exp_elt_opcode (OP_INTERNALVAR);
-  write_exp_elt_intern (lookup_internalvar (copy_name (str) + 1));
-  write_exp_elt_opcode (OP_INTERNALVAR);
-  return;
+  /* Any other names are assumed to be debugger internal variables.  */
+
+  goto internal_lookup;
 handle_last:
   write_exp_elt_opcode (OP_LAST);
   write_exp_elt_longcst ((LONGEST) i);

  reply	other threads:[~2006-08-22  2:06 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-20 14:28 Mike Frysinger
2006-08-20 14:33 ` Mark Kettenis
2006-08-20 14:38   ` Daniel Jacobowitz
2006-08-22  1:35     ` Mark Kettenis
2006-08-22  2:06       ` Daniel Jacobowitz
2006-08-22 18:01     ` Mike Frysinger
2006-08-22 18:21       ` Daniel Jacobowitz
2006-08-22 18:34         ` Mike Frysinger [this message]
2006-09-14  5:01         ` [patch ping] change lookup order of $localvars to happen before symbol tables Mike Frysinger
2006-09-16  4:02           ` Daniel Jacobowitz
2006-09-17  4:22             ` Mike Frysinger
2006-09-17 15:10               ` Daniel Jacobowitz
2006-09-17 20:22                 ` Mike Frysinger
2006-09-17 20:28                   ` Daniel Jacobowitz
2006-09-27  5:51                 ` Mike Frysinger
2007-09-26 19:50                 ` Mike Frysinger
2007-10-01  0:37                   ` Daniel Jacobowitz
2007-10-01  1:41                     ` Mike Frysinger

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=200608212207.06622.vapier@gentoo.org \
    --to=vapier@gentoo.org \
    --cc=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    --cc=mark.kettenis@xs4all.nl \
    /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