From b78974c3b4cea6c98cb8dfd9c0bee59efd45d311 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 20 Apr 2011 17:01:11 +0000 Subject: 2011-04-20 Pedro Alves gdb/ * regcache.c (get_thread_arch_regcache): If creating a regcache for null_ptid, assume and allow a NULL address space, instead of asking the target for the ptid's address space. * infrun.c (ptid_is_pid): Remove assertion. gdb/testsuite/ * gdb.base/maint.exp: Test that "maint print registers" works without a running program. --- gdb/ChangeLog | 7 +++++++ gdb/infrun.c | 5 ----- gdb/regcache.c | 15 ++++++++++++--- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/maint.exp | 24 +++++++++++++++--------- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bdf13e3..96b1c89 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-04-20 Pedro Alves + + * regcache.c (get_thread_arch_regcache): If creating a regcache for + null_ptid, assume and allow a NULL address space, instead of + asking the target for the ptid's address space. + * infrun.c (ptid_is_pid): Remove assertion. + 2011-04-19 Tom Tromey * windows-tdep.c (windows_xfer_shared_library): diff --git a/gdb/infrun.c b/gdb/infrun.c index 52a1c15..8eccb60 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -6696,11 +6696,6 @@ ptid_is_pid (ptid_t ptid) int ptid_match (ptid_t ptid, ptid_t filter) { - /* Since both parameters have the same type, prevent easy mistakes - from happening. */ - gdb_assert (!ptid_equal (ptid, minus_one_ptid) - && !ptid_equal (ptid, null_ptid)); - if (ptid_equal (filter, minus_one_ptid)) return 1; if (ptid_is_pid (filter) diff --git a/gdb/regcache.c b/gdb/regcache.c index fbdeccc..8b4d77c 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -453,16 +453,25 @@ get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch) { struct regcache_list *list; struct regcache *new_regcache; + struct address_space *aspace; for (list = current_regcache; list; list = list->next) if (ptid_equal (list->regcache->ptid, ptid) && get_regcache_arch (list->regcache) == gdbarch) return list->regcache; - new_regcache = regcache_xmalloc_1 (gdbarch, - target_thread_address_space (ptid), 0); + /* For the benefit of "maint print registers" & co when debugging an + executable, allow dumping the regcache even when there is no + thread selected (target_thread_address_space internal-errors if + no address space is found). Note that normal user commands will + fail higher up on the call stack due to no + target_has_registers. */ + aspace = (ptid_equal (null_ptid, ptid) + ? NULL + : target_thread_address_space (ptid)); + + new_regcache = regcache_xmalloc_1 (gdbarch, aspace, 0); new_regcache->ptid = ptid; - gdb_assert (new_regcache->aspace != NULL); list = xmalloc (sizeof (struct regcache_list)); list->regcache = new_regcache; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1dbe936..1464e13 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,4 +1,10 @@ +2011-04-20 Pedro Alves + + * gdb.base/maint.exp: Test that "maint print registers" works + without a running program. + 2011-04-20 Marek Polacek + * gdb.base/setshow.exp: Fix racy tests. ($old_gdb_prompt): New variable. diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp index 843391a..61ad439 100644 --- a/gdb/testsuite/gdb.base/maint.exp +++ b/gdb/testsuite/gdb.base/maint.exp @@ -54,10 +54,6 @@ if $tracelevel then { global usestubs -# -# test running programs -# - set testfile "break" set srcfile ${testfile}.c set srcfile1 ${testfile}1.c @@ -82,6 +78,21 @@ if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir + +# The commands we test here produce many lines of output; disable "press +# to continue" prompts. +gdb_test_no_output "set height 0" + +# Tests that require that no program is running + +gdb_file_cmd ${binfile} + +# Test for a regression where this command would internal-error if the +# program wasn't running. +gdb_test "maint print registers" "Name.*Nr.*Rel.*Offset.*Size.*Type.*" + +# Tests that can or should be done with a running program + gdb_load ${binfile} if ![runto_main] then { @@ -89,11 +100,6 @@ if ![runto_main] then { } -# The commands we test here produce many lines of output; disable "press -# to continue" prompts. -gdb_test_no_output "set height 0" - - # # this command does not produce any output # unless there is some problem with the symtabs and psymtabs -- cgit v1.1