From patchwork Thu Oct 17 22:50:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 35111 Received: (qmail 106978 invoked by alias); 17 Oct 2019 22:50:42 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 106790 invoked by uid 89); 17 Oct 2019 22:50:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=breakpoint_at X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 17 Oct 2019 22:50:38 +0000 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6449730607E3 for ; Thu, 17 Oct 2019 22:50:37 +0000 (UTC) Received: from localhost.localdomain (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id E85D71001B08 for ; Thu, 17 Oct 2019 22:50:36 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH v2 10/24] Some get_last_target_status tweaks Date: Thu, 17 Oct 2019 23:50:12 +0100 Message-Id: <20191017225026.30496-11-palves@redhat.com> In-Reply-To: <20191017225026.30496-1-palves@redhat.com> References: <20191017225026.30496-1-palves@redhat.com> - Make get_last_target_status arguments optional. A following patch will add another argument to get_last_target_status (the event's target), and passing nullptr when we don't care for some piece of info is handier than creating dummy local variables. - Declare nullify_last_target_wait_ptid in a header, and remove the local extern declaration from linux-fork.c. gdb/ChangeLog: yyyy-mm-dd Pedro Alves * break-catch-sig.c (signal_catchpoint_print_it): Don't pass a ptid to get_last_target_status. * break-catch-syscall.c (print_it_catch_syscall): Don't pass a ptid to get_last_target_status. * infcmd.c (continue_command): Don't pass a target_waitstatus to get_last_target_status. (info_program_command): Don't pass a target_waitstatus to get_last_target_status. * infrun.c (init_wait_for_inferior): Use nullify_last_target_wait_ptid. (get_last_target_status): Handle nullptr arguments. (nullify_last_target_wait_ptid): Clear target_last_waitstatus. (print_stop_event): Don't pass a ptid to get_last_target_status. (normal_stop): Don't pass a ptid to get_last_target_status. * infrun.h (get_last_target_status, set_last_target_status): Move comments here and update. (nullify_last_target_wait_ptid): Declare. * linux-fork.c (fork_load_infrun_state): Remove local extern declaration of nullify_last_target_wait_ptid. * linux-nat.c (get_detach_signal): Don't pass a target_waitstatus to get_last_target_status. --- gdb/break-catch-sig.c | 3 +-- gdb/break-catch-syscall.c | 3 +-- gdb/infcmd.c | 9 ++------- gdb/infrun.c | 28 +++++++++++++--------------- gdb/infrun.h | 9 +++++++++ gdb/linux-fork.c | 1 - gdb/linux-nat.c | 3 +-- 7 files changed, 27 insertions(+), 29 deletions(-) diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c index c475e8aca5..d1ea404d53 100644 --- a/gdb/break-catch-sig.c +++ b/gdb/break-catch-sig.c @@ -181,12 +181,11 @@ static enum print_stop_action signal_catchpoint_print_it (bpstat bs) { struct breakpoint *b = bs->breakpoint_at; - ptid_t ptid; struct target_waitstatus last; const char *signal_name; struct ui_out *uiout = current_uiout; - get_last_target_status (&ptid, &last); + get_last_target_status (nullptr, &last); signal_name = signal_to_name_or_int (last.value.sig); diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c index dde80b54a2..35d406477c 100644 --- a/gdb/break-catch-syscall.c +++ b/gdb/break-catch-syscall.c @@ -182,12 +182,11 @@ print_it_catch_syscall (bpstat bs) syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we must print "called syscall" or "returned from syscall". */ - ptid_t ptid; struct target_waitstatus last; struct syscall s; struct gdbarch *gdbarch = bs->bp_location_at->gdbarch; - get_last_target_status (&ptid, &last); + get_last_target_status (nullptr, &last); get_syscall_by_number (gdbarch, last.value.syscall_number, &s); diff --git a/gdb/infcmd.c b/gdb/infcmd.c index ae1044b95a..75df3f3bce 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -856,9 +856,8 @@ continue_command (const char *args, int from_tty) else { ptid_t last_ptid; - struct target_waitstatus ws; - get_last_target_status (&last_ptid, &ws); + get_last_target_status (&last_ptid, nullptr); tp = find_thread_ptid (last_ptid); } if (tp != NULL) @@ -1983,11 +1982,7 @@ info_program_command (const char *args, int from_tty) if (non_stop) ptid = inferior_ptid; else - { - struct target_waitstatus ws; - - get_last_target_status (&ptid, &ws); - } + get_last_target_status (&ptid, nullptr); if (ptid == null_ptid || ptid == minus_one_ptid) error (_("No selected thread.")); diff --git a/gdb/infrun.c b/gdb/infrun.c index bd01d80857..a759c5c204 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -84,8 +84,6 @@ static void follow_inferior_reset_breakpoints (void); static int currently_stepping (struct thread_info *tp); -void nullify_last_target_wait_ptid (void); - static void insert_hp_step_resume_breakpoint_at_frame (struct frame_info *); static void insert_step_resume_breakpoint_at_caller (struct frame_info *); @@ -3110,7 +3108,7 @@ init_wait_for_inferior (void) clear_proceed_status (0); - target_last_wait_ptid = minus_one_ptid; + nullify_last_target_wait_ptid (); previous_inferior_ptid = inferior_ptid; } @@ -3854,7 +3852,7 @@ init_thread_stepping_state (struct thread_info *tss) tss->step_after_step_resume_breakpoint = 0; } -/* Set the cached copy of the last ptid/waitstatus. */ +/* See infrun.h. */ void set_last_target_status (ptid_t ptid, struct target_waitstatus status) @@ -3863,22 +3861,24 @@ set_last_target_status (ptid_t ptid, struct target_waitstatus status) target_last_waitstatus = status; } -/* Return the cached copy of the last pid/waitstatus returned by - target_wait()/deprecated_target_wait_hook(). The data is actually - cached by handle_inferior_event(), which gets called immediately - after target_wait()/deprecated_target_wait_hook(). */ +/* See infrun.h. */ void -get_last_target_status (ptid_t *ptidp, struct target_waitstatus *status) +get_last_target_status (ptid_t *ptid, struct target_waitstatus *status) { - *ptidp = target_last_wait_ptid; - *status = target_last_waitstatus; + if (ptid != nullptr) + *ptid = target_last_wait_ptid; + if (status != nullptr) + *status = target_last_waitstatus; } +/* See infrun.h. */ + void nullify_last_target_wait_ptid (void) { target_last_wait_ptid = minus_one_ptid; + target_last_waitstatus = {}; } /* Switch thread contexts. */ @@ -7835,10 +7835,9 @@ void print_stop_event (struct ui_out *uiout, bool displays) { struct target_waitstatus last; - ptid_t last_ptid; struct thread_info *tp; - get_last_target_status (&last_ptid, &last); + get_last_target_status (nullptr, &last); { scoped_restore save_uiout = make_scoped_restore (¤t_uiout, uiout); @@ -7957,9 +7956,8 @@ int normal_stop (void) { struct target_waitstatus last; - ptid_t last_ptid; - get_last_target_status (&last_ptid, &last); + get_last_target_status (nullptr, &last); new_stop_id (); diff --git a/gdb/infrun.h b/gdb/infrun.h index 2b2a3a3e44..e7cf2959cf 100644 --- a/gdb/infrun.h +++ b/gdb/infrun.h @@ -101,12 +101,21 @@ extern void wait_for_inferior (void); target, false otherwise. */ extern int normal_stop (void); +/* Return the cached copy of the last ptid/waitstatus returned + by target_wait()/deprecated_target_wait_hook(). The data is + actually cached by handle_inferior_event(), which gets called + immediately after target_wait()/deprecated_target_wait_hook(). */ extern void get_last_target_status (ptid_t *ptid, struct target_waitstatus *status); +/* Set the cached copy of the last ptid/waitstatus. */ extern void set_last_target_status (ptid_t ptid, struct target_waitstatus status); +/* Clear the cached copy of the last ptid/waitstatus returned by + target_wait(). */ +extern void nullify_last_target_wait_ptid (); + /* Stop all threads. Only returns after everything is halted. */ extern void stop_all_threads (void); diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c index 87cfacc8e8..ab96be2f38 100644 --- a/gdb/linux-fork.c +++ b/gdb/linux-fork.c @@ -215,7 +215,6 @@ call_lseek (int fd, off_t offset, int whence) static void fork_load_infrun_state (struct fork_info *fp) { - extern void nullify_last_target_wait_ptid (); int i; linux_nat_switch_fork (fp->ptid); diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 0a8ea5b8de..35f850270b 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -1314,10 +1314,9 @@ get_detach_signal (struct lwp_info *lp) } else if (!target_is_non_stop_p ()) { - struct target_waitstatus last; ptid_t last_ptid; - get_last_target_status (&last_ptid, &last); + get_last_target_status (&last_ptid, nullptr); if (lp->ptid.lwp () == last_ptid.lwp ()) signo = tp->suspend.stop_signal;