Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: Pedro Alves <pedro@codesourcery.com>
Cc: gdb-patches@sourceware.org, Ulrich Weigand <uweigand@de.ibm.com>
Subject: Re: RFC: don't set the pspace on ordinary breakpoints
Date: Tue, 08 Nov 2011 20:23:00 -0000	[thread overview]
Message-ID: <m3k47agy8e.fsf@fleche.redhat.com> (raw)
In-Reply-To: <m3obwmh0me.fsf@fleche.redhat.com> (Tom Tromey's message of "Tue,	08 Nov 2011 12:31:37 -0700")

>>>>> "Tom" == Tom Tromey <tromey@redhat.com> writes:

Tom> I think I will change linespec to ignore program spaces in this state.

The appended has two parts: the linespec.c change, relative to the big
patch I posted, and the breakpoint.c change I think is needed too.  Only
the latter makes sense in the context of this thread.

I *think* the should_be_inserted change is all that was really needed,
after re-reading all the messages in this thread.  Let me know what you
think.

The addr_string_to_sals change is there to handle the case where a
breakpoint has hits in just the program space that is in the
executing_startup state.  In this situation, linespec can throw an
exception, and if we do not take the "not_found_and_ok" branch, then we
will proceed to disable the breakpoint... which is wrong, we want to
re-set again when the program space is done with startup.

Tom

diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 610aece..dd1f935 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -1578,7 +1578,7 @@ should_be_inserted (struct bp_location *bl)
   if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
     return 0;
 
-  if (bl->pspace->executing_startup)
+  if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
     return 0;
 
   /* This is set for example, when we're attached to the parent of a
@@ -11725,6 +11725,7 @@ addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
       if (e.error == NOT_FOUND_ERROR
 	  && (b->condition_not_parsed 
 	      || (b->loc && b->loc->shlib_disabled)
+	      || (b->loc && b->loc->pspace->executing_startup)
 	      || b->enable_state == bp_disabled))
 	not_found_and_ok = 1;
 
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 21189d3..c24a7a0 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -351,6 +351,8 @@ iterate_over_all_matching_symtabs (const char *name,
   {
     if (search_pspace != NULL && search_pspace != pspace)
       continue;
+    if (pspace->executing_startup)
+      continue;
 
     set_current_program_space (pspace);
 
@@ -1327,6 +1329,12 @@ decode_indirect (struct linespec_state *self, char **argptr)
   CORE_ADDR pc;
   char *initial = *argptr;
   
+  if (current_program_space->executing_startup)
+    /* The error message doesn't really matter, because this case
+       should only hit during breakpoint reset.  */
+    throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
+				    "program space is in startup"));
+
   (*argptr)++;
   pc = value_as_address (parse_to_comma_and_eval (argptr));
 
@@ -1872,6 +1880,9 @@ lookup_prefix_sym (char **argptr, char *p, VEC (symtab_p) *file_symtabs,
 	{
 	  struct block *search_block;
 
+	  /* Program spaces that are executing startup should have
+	     been filtered out earlier.  */
+	  gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
 	  set_current_program_space (SYMTAB_PSPACE (elt));
 	  search_block = get_search_block (elt);
 	  iterate_over_symbols (search_block, copy, STRUCT_DOMAIN,
@@ -2020,6 +2031,9 @@ find_method (struct linespec_state *self, char *saved_arg,
       struct type *t;
       struct program_space *pspace;
 
+      /* Program spaces that are executing startup should have
+	 been filtered out earlier.  */
+      gdb_assert (!SYMTAB_PSPACE (SYMBOL_SYMTAB (sym))->executing_startup);
       pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
       set_current_program_space (pspace);
       t = check_typedef (SYMBOL_TYPE (sym));
@@ -2122,6 +2136,9 @@ collect_symtabs_from_filename (const char *file)
   /* Find that file's data.  */
   ALL_PSPACES (pspace)
   {
+    if (pspace->executing_startup)
+      continue;
+
     set_current_program_space (pspace);
     iterate_over_symtabs (file, add_symtabs_to_list, &collector);
   }
@@ -2698,6 +2715,8 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
   {
     if (search_pspace != NULL && search_pspace != pspace)
       continue;
+    if (pspace->executing_startup)
+      continue;
 
     set_current_program_space (pspace);
 
@@ -2734,6 +2753,9 @@ add_matching_symbols_to_info (const char *name,
 	}
       else if (pspace == NULL || pspace == SYMTAB_PSPACE (elt))
 	{
+	  /* Program spaces that are executing startup should have
+	     been filtered out earlier.  */
+	  gdb_assert (!SYMTAB_PSPACE (elt)->executing_startup);
 	  set_current_program_space (SYMTAB_PSPACE (elt));
 	  iterate_over_symbols (get_search_block (elt), name,
 				VAR_DOMAIN, collect_symbols,


  reply	other threads:[~2011-11-08 20:23 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-27 15:32 Tom Tromey
2011-10-31  1:03 ` Jan Kratochvil
2011-10-31 12:07 ` Yao Qi
2011-11-02 18:55 ` Pedro Alves
2011-11-02 19:47   ` Tom Tromey
2011-11-02 20:21     ` Pedro Alves
2011-11-03 14:01       ` Tom Tromey
2011-11-03 16:02         ` Pedro Alves
2011-11-03 19:33           ` Ulrich Weigand
2011-11-08 19:32           ` Tom Tromey
2011-11-08 20:23             ` Tom Tromey [this message]
2011-11-09 18:24               ` Tom Tromey
2011-11-09 18:30               ` Pedro Alves
2011-11-09 18:41                 ` Tom Tromey
2011-11-10 16:53                   ` Tom Tromey
2011-11-10 17:49                     ` Pedro Alves
2011-11-10 17:57                     ` Ulrich Weigand
2011-11-10 19:27                       ` Tom Tromey
2011-11-10 20:23                         ` Tom Tromey
2011-11-11 12:56                           ` Ulrich Weigand
2011-11-11 14:47                             ` Tom Tromey
2011-11-14 21:12                               ` Tom Tromey
2011-11-16 18:37                               ` Ulrich Weigand
2011-11-16 21:24                                 ` Tom Tromey
2011-11-18 18:31                                   ` Ulrich Weigand
2012-01-02 18:18                                     ` [7.4 regression] Stand-alone Cell debugging broken (Re: RFC: don't set the pspace on ordinary breakpoints) Ulrich Weigand
2012-01-03  3:15                                       ` Joel Brobecker
2012-01-03 20:29                                       ` Tom Tromey
2012-01-04 12:36                                         ` Ulrich Weigand

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=m3k47agy8e.fsf@fleche.redhat.com \
    --to=tromey@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@codesourcery.com \
    --cc=uweigand@de.ibm.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