diff options
author | Yao Qi <yao.qi@linaro.org> | 2016-07-21 12:12:18 +0100 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2016-07-21 12:12:18 +0100 |
commit | 984a2c042e82f2306183d9d165c5cb99e4341503 (patch) | |
tree | 161f243913c0be7949b06b3a8b59cd0e11745c57 /gdb/gdbserver/linux-low.c | |
parent | bec903c96bc5119e357b4ad2cab99bbee7de628e (diff) | |
download | gdb-984a2c042e82f2306183d9d165c5cb99e4341503.zip gdb-984a2c042e82f2306183d9d165c5cb99e4341503.tar.gz gdb-984a2c042e82f2306183d9d165c5cb99e4341503.tar.bz2 |
Switch current_thread to lwp's thread in install_software_single_step_breakpoints
install_software_single_step_breakpoints has parameter lwp, but still
need to switch to current_thread. In order to simplify its caller,
we do the current_thread save/restore inside install_software_single_step_breakpoints.
gdb/gdbserver:
2016-07-21 Yao Qi <yao.qi@linaro.org>
* gdbthread.h (make_cleanup_restore_current_thread): Declare.
* inferiors.c (do_restore_current_thread_cleanup): New function.
(make_cleanup_restore_current_thread): Likewise.
* linux-low.c (install_software_single_step_breakpoints): Call
make_cleanup_restore_current_thread. Switch current_thread to
thread.
Diffstat (limited to 'gdb/gdbserver/linux-low.c')
-rw-r--r-- | gdb/gdbserver/linux-low.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index c0b2ac0..9c675a4 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -4202,10 +4202,14 @@ install_software_single_step_breakpoints (struct lwp_info *lwp) { int i; CORE_ADDR pc; - struct regcache *regcache = get_thread_regcache (current_thread, 1); + struct thread_info *thread = get_lwp_thread (lwp); + struct regcache *regcache = get_thread_regcache (thread, 1); VEC (CORE_ADDR) *next_pcs = NULL; - struct cleanup *old_chain = make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs); + struct cleanup *old_chain = make_cleanup_restore_current_thread (); + + make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs); + current_thread = thread; next_pcs = (*the_low_target.get_next_pcs) (regcache); for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); ++i) |