summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2019-01-09 14:02:39 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2019-01-10 16:15:30 +0000
commit1ef8573cc77c91feeef3edab74d383d20809eb33 (patch)
treef2f67317d9c4cf33fe9130f622f2759ac1511e68 /gdb
parent59aa9b0be159002e2eb971176921dc1e9c8045cf (diff)
downloadbinutils-gdb-1ef8573cc77c91feeef3edab74d383d20809eb33.tar.gz
gdb: Improve scoped_switch_fork_info class
After committing this patch I got this feedback: https://sourceware.org/ml/gdb-patches/2019-01/msg00181.html This patch makes the constructor of scoped_switch_fork_info explicit, and wraps the core of the destructor in a TRY/CATCH block. I've run this through the testsuite on X86-64/GNU Linux, however, this code is not exercised, so this patch is untested. gdb/ChangeLog: * linux-fork.c (scoped_switch_fork_info) <scoped_switch_fork_info>: Make explicit. <~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/linux-fork.c17
2 files changed, 19 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 32fe0bbe814..f449d6836ed 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * linux-fork.c (scoped_switch_fork_info)
+ <scoped_switch_fork_info>: Make explicit.
+ <~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
+
2019-01-10 Tom Tromey <tom@tromey.com>
* objfiles.h (objfile::reset_psymtabs): Update.
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index f3231bae048..9bbf9c4a141 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -446,7 +446,7 @@ class scoped_switch_fork_info
public:
/* Switch to the infrun state held on the fork_info identified by
PPTID. If PPTID is the current inferior then no switch is done. */
- scoped_switch_fork_info (ptid_t pptid)
+ explicit scoped_switch_fork_info (ptid_t pptid)
: m_oldfp (nullptr)
{
if (pptid != inferior_ptid)
@@ -472,9 +472,18 @@ public:
if (m_oldfp != nullptr)
{
/* Switch back to inferior_ptid. */
- remove_breakpoints ();
- fork_load_infrun_state (m_oldfp);
- insert_breakpoints ();
+ TRY
+ {
+ remove_breakpoints ();
+ fork_load_infrun_state (m_oldfp);
+ insert_breakpoints ();
+ }
+ CATCH (ex, RETURN_MASK_ALL)
+ {
+ warning (_("Couldn't restore checkpoint state in %s: %s"),
+ target_pid_to_str (fp->ptid), ex.message);
+ }
+ END_CATCH
}
}