From patchwork Fri Sep 6 23:27:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 34424 Received: (qmail 120453 invoked by alias); 6 Sep 2019 23:28:22 -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 120372 invoked by uid 89); 6 Sep 2019 23:28:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 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= 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; Fri, 06 Sep 2019 23:28:19 +0000 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A93FDA6E0E for ; Fri, 6 Sep 2019 23:28:18 +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 444095D9D3 for ; Fri, 6 Sep 2019 23:28:18 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 10/23] Some get_last_target_status tweaks Date: Sat, 7 Sep 2019 00:27:54 +0100 Message-Id: <20190906232807.6191-11-palves@redhat.com> In-Reply-To: <20190906232807.6191-1-palves@redhat.com> References: <20190906232807.6191-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 (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 | 27 +++++++++++++-------------- gdb/infrun.h | 2 ++ gdb/linux-fork.c | 1 - gdb/linux-nat.c | 3 +-- 7 files changed, 20 insertions(+), 28 deletions(-) diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c index 53540ee832..76f6db60ab 100644 --- a/gdb/break-catch-sig.c +++ b/gdb/break-catch-sig.c @@ -180,12 +180,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 a165be62be..0fce15d81b 100644 --- a/gdb/break-catch-syscall.c +++ b/gdb/break-catch-syscall.c @@ -181,12 +181,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 a12dba23aa..879f33bbc2 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -859,9 +859,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) @@ -1985,11 +1984,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 61c99e36c4..f25cbcd5e8 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 *); @@ -3112,7 +3110,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; } @@ -3865,22 +3863,25 @@ 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(). */ +/* 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(). */ 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; } void nullify_last_target_wait_ptid (void) { target_last_wait_ptid = minus_one_ptid; + target_last_waitstatus = {}; } /* Switch thread contexts. */ @@ -7842,10 +7843,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); @@ -7964,9 +7964,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 30374ee51c..042edbbb66 100644 --- a/gdb/infrun.h +++ b/gdb/infrun.h @@ -107,6 +107,8 @@ extern void get_last_target_status (ptid_t *ptid, extern void set_last_target_status (ptid_t ptid, struct target_waitstatus status); +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 945c19f666..8f7d4b6eba 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -1318,10 +1318,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;