diff options
author | Pedro Alves <palves@redhat.com> | 2011-09-02 12:18:27 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-09-02 12:18:27 +0000 |
commit | c709acd150761fffe3536bf9e6a0b32870f41ca3 (patch) | |
tree | 14191338cf67ccd74fc3c6f324e6364179628fc8 /gdb/infrun.c | |
parent | 86362dfd53fe65250e184a2bc443ea186a42f98f (diff) | |
download | fsf-binutils-gdb-c709acd150761fffe3536bf9e6a0b32870f41ca3.zip fsf-binutils-gdb-c709acd150761fffe3536bf9e6a0b32870f41ca3.tar.gz fsf-binutils-gdb-c709acd150761fffe3536bf9e6a0b32870f41ca3.tar.bz2 |
2011-09-02 Pedro Alves <pedro@codesourcery.com>
gdb/
* value.c (show_convenience): Catch errors thrown while printing
each internal variable.
* infrun.c (validate_siginfo_access): New function.
(siginfo_value_read, siginfo_value_write): Call it.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r-- | gdb/infrun.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c index 27bd3d6..6febe07 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -6384,6 +6384,25 @@ signals_info (char *signum_exp, int from_tty) "to change these tables.\n")); } +/* Check if it makes sense to read $_siginfo from the current thread + at this point. If not, throw an error. */ + +static void +validate_siginfo_access (void) +{ + /* No current inferior, no siginfo. */ + if (ptid_equal (inferior_ptid, null_ptid)) + error (_("No thread selected.")); + + /* Don't try to read from a dead thread. */ + if (is_exited (inferior_ptid)) + error (_("The current thread has terminated")); + + /* ... or from a spinning thread. */ + if (is_running (inferior_ptid)) + error (_("Selected thread is running.")); +} + /* The $_siginfo convenience variable is a bit special. We don't know for sure the type of the value until we actually have a chance to fetch the data. The type can change depending on gdbarch, so it is @@ -6402,6 +6421,8 @@ siginfo_value_read (struct value *v) { LONGEST transferred; + validate_siginfo_access (); + transferred = target_read (¤t_target, TARGET_OBJECT_SIGNAL_INFO, NULL, @@ -6421,6 +6442,8 @@ siginfo_value_write (struct value *v, struct value *fromval) { LONGEST transferred; + validate_siginfo_access (); + transferred = target_write (¤t_target, TARGET_OBJECT_SIGNAL_INFO, NULL, |