From da559b09fdbc9427add796ec7191c37aeb18cced Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 6 Jul 2012 16:52:20 +0000 Subject: [PATCH] gdb/ * linux-nat.c (resume_lwp, linux_nat_resume): Remove LP->SIGINFO clearing. (save_siginfo): Remove. (stop_wait_callback, linux_nat_filter_event): Remove the save_siginfo call. (resume_stopped_resumed_lwps): Remove LP->SIGINFO clearing. (linux_nat_get_siginfo): Use PTRACE_GETSIGINFO. * linux-nat.h (struct lwp_info): Remove field siginfo. --- gdb/ChangeLog | 11 +++++++++++ gdb/linux-nat.c | 44 ++++++++++++-------------------------------- gdb/linux-nat.h | 4 ---- 3 files changed, 23 insertions(+), 36 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 36877b8..fd6b7e8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2012-07-06 Jan Kratochvil + * linux-nat.c (resume_lwp, linux_nat_resume): Remove LP->SIGINFO + clearing. + (save_siginfo): Remove. + (stop_wait_callback, linux_nat_filter_event): Remove the save_siginfo + call. + (resume_stopped_resumed_lwps): Remove LP->SIGINFO clearing. + (linux_nat_get_siginfo): Use PTRACE_GETSIGINFO. + * linux-nat.h (struct lwp_info): Remove field siginfo. + +2012-07-06 Jan Kratochvil + Code cleanup for the next patch. * arm-linux-nat.c (arm_linux_stopped_data_address): Change variable siginfo_p to siginfo, update its users incl. the linux_nat_get_siginfo diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 09ab402..8078a80 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -1933,7 +1933,6 @@ resume_lwp (struct lwp_info *lp, int step, enum gdb_signal signo) step, signo); lp->stopped = 0; lp->step = step; - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); lp->stopped_by_watchpoint = 0; } else @@ -2092,7 +2091,6 @@ linux_nat_resume (struct target_ops *ops, if (linux_nat_prepare_to_resume != NULL) linux_nat_prepare_to_resume (lp); linux_ops->to_resume (linux_ops, ptid, step, signo); - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); lp->stopped_by_watchpoint = 0; if (debug_linux_nat) @@ -2646,22 +2644,6 @@ wait_lwp (struct lwp_info *lp) return status; } -/* Save the most recent siginfo for LP. This is currently only called - for SIGTRAP; some ports use the si_addr field for - target_stopped_data_address. In the future, it may also be used to - restore the siginfo of requeued signals. */ - -static void -save_siginfo (struct lwp_info *lp) -{ - errno = 0; - ptrace (PTRACE_GETSIGINFO, GET_LWP (lp->ptid), - (PTRACE_TYPE_ARG3) 0, &lp->siginfo); - - if (errno != 0) - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); -} - /* Send a SIGSTOP to LP. */ static int @@ -2904,9 +2886,6 @@ stop_wait_callback (struct lwp_info *lp, void *data) { /* The thread was stopped with a signal other than SIGSTOP. */ - /* Save the trap's siginfo in case we need it later. */ - save_siginfo (lp); - save_sigtrap (lp); if (debug_linux_nat) @@ -3284,12 +3263,7 @@ linux_nat_filter_event (int lwpid, int status, int *new_pending_p) } if (linux_nat_status_is_event (status)) - { - /* Save the trap's siginfo in case we need it later. */ - save_siginfo (lp); - - save_sigtrap (lp); - } + save_sigtrap (lp); /* Check if the thread has exited. */ if ((WIFEXITED (status) || WIFSIGNALED (status)) @@ -3942,7 +3916,6 @@ resume_stopped_resumed_lwps (struct lwp_info *lp, void *data) linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)), lp->step, GDB_SIGNAL_0); lp->stopped = 0; - memset (&lp->siginfo, 0, sizeof (lp->siginfo)); lp->stopped_by_watchpoint = 0; } @@ -5192,12 +5165,19 @@ linux_nat_set_prepare_to_resume (struct target_ops *t, int linux_nat_get_siginfo (ptid_t ptid, siginfo_t *siginfo) { - struct lwp_info *lp = find_lwp_pid (ptid); - - gdb_assert (lp != NULL); + int pid; - *siginfo = lp->siginfo; + pid = GET_LWP (ptid); + if (pid == 0) + pid = GET_PID (ptid); + errno = 0; + ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, siginfo); + if (errno != 0) + { + memset (siginfo, 0, sizeof (*siginfo)); + return 0; + } return 1; } diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h index 52549da..50998b8 100644 --- a/gdb/linux-nat.h +++ b/gdb/linux-nat.h @@ -76,10 +76,6 @@ struct lwp_info /* Non-zero if we were stepping this LWP. */ int step; - /* Non-zero si_signo if this LWP stopped with a trap. si_addr may - be the address of a hardware watchpoint. */ - siginfo_t siginfo; - /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data watchpoint trap. */ int stopped_by_watchpoint; -- 2.7.4