From patchwork Tue Jun 30 12:37:17 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 7432 Received: (qmail 10945 invoked by alias); 30 Jun 2015 12:37:28 -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 10935 invoked by uid 89); 30 Jun 2015 12:37:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=AWL, BAYES_05, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 X-HELO: mail-qg0-f54.google.com Received: from mail-qg0-f54.google.com (HELO mail-qg0-f54.google.com) (209.85.192.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 30 Jun 2015 12:37:26 +0000 Received: by qgii30 with SMTP id i30so2978485qgi.1 for ; Tue, 30 Jun 2015 05:37:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xv15NnBexsCBJdBZ4s9+I3Jekb1PgW6E6hFiBdKyJws=; b=cbfSDsrqdEAujmNYf+KlQRelD7q6Vd7u6jmdexeIjD/UwC0MFYPM7YmvCfu77u84xj YXYz4oO3VD+9RYxiHcWPIftzprWpcwbyc7HRZvHFs9PG3rsuc7E2Khb3Boje7BynJPyN H2HO5pWOtTKVtWVdT01gVDFelo+paEBOPhBfkjqQr5X1YibVL5fay3i03MtdU693yR1J 5l3DY2rCh8CrvjEFBFIED49Lb0urp52V1wbv+MvQU2Vj4Qt6XgHS3j2ekZreScCUCpYt 7D4Afv8s9FKRsHtlFvoxLsIRqKKuONs3CrGR7iImoNeEcgQnu9EUQuB6l9W+dz9NXkIv BXfA== X-Gm-Message-State: ALoCoQlAalXDlfc5dBn7h9tBwrDe5kF4UzsWCKO5Wv+coI0smKjt1M6Ei5gluT63vK/wtusyHVaN X-Received: by 10.55.19.25 with SMTP id d25mr42804985qkh.19.1435667843888; Tue, 30 Jun 2015 05:37:23 -0700 (PDT) Received: from localhost.localdomain (ool-4353acd8.dyn.optonline.net. [67.83.172.216]) by mx.google.com with ESMTPSA id o65sm13078476qge.34.2015.06.30.05.37.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 30 Jun 2015 05:37:23 -0700 (PDT) From: Patrick Palka To: gdb-patches@sourceware.org Cc: Patrick Palka Subject: [PATCH 3/3] Replace TUI's select_frame hook (PR tui/13378) Date: Tue, 30 Jun 2015 08:37:17 -0400 Message-Id: <1435667837-16337-1-git-send-email-patrick@parcs.ath.cx> In-Reply-To: References: This version adds a tui_normal_stop observer in place of augmenting the tui_on_sync_execution_done observer. And tui_refresh_frame_and_register_information can now be made a static function. The observer takes a print_frame parameter that is supposed to inform us whether the frame should be printed. This boolean seems to only be true for when the inferior has exited. Since tui_refresh_frame_and_register_information already handles this case by checking has_stack_frames() this patch elects to ignore this parameter in the observer. gdb/ChangeLog: * frame.c (select_frame): Remove reference to deprecated_selected_frame_level_changed_hook. * frame.h (deprecated_selected_frame_level_changed_hook): Remove declaration. * stack.c (deprecated_selected_frame_level_changed_hook): Likewise. * tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Rename to ... (tui_refresh_frame_and_register_information): ... this. Bail out if there is no stack. (tui_before_prompt): New function. (tui_normal_stop): New function. (tui_before_prompt_observer): New observer. (tui_normal_stop_observer): New observer. (tui_install_hooks): Register tui_before_prompt_observer to call tui_before_prompt and tui_normal_stop_observer to call tui_normal_stop. Remove reference to deprecated_selected_frame_level_changed_hook. (tui_remove_hooks): Detach and unset tui_before_prompt_observer and tui_normal_stop_observer. Remove reference to deprecated_selected_frame_level_changed_hook. --- gdb/frame.c | 2 -- gdb/frame.h | 2 -- gdb/stack.c | 2 -- gdb/tui/tui-hooks.c | 40 +++++++++++++++++++++++++++++++--------- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/gdb/frame.c b/gdb/frame.c index b3cbf23..da5bfb9 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1576,8 +1576,6 @@ select_frame (struct frame_info *fi) selected_frame = fi; /* NOTE: cagney/2002-05-04: FI can be NULL. This occurs when the frame is being invalidated. */ - if (deprecated_selected_frame_level_changed_hook) - deprecated_selected_frame_level_changed_hook (frame_relative_level (fi)); /* FIXME: kseitz/2002-08-28: It would be nice to call selected_frame_level_changed_event() right here, but due to limitations diff --git a/gdb/frame.h b/gdb/frame.h index 53a93e0..be64c57 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -763,8 +763,6 @@ extern void args_info (char *, int); extern void locals_info (char *, int); -extern void (*deprecated_selected_frame_level_changed_hook) (int); - extern void return_command (char *, int); /* Set FRAME's unwinder temporarily, so that we can call a sniffer. diff --git a/gdb/stack.c b/gdb/stack.c index eea575a..39803d9 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -52,8 +52,6 @@ #include "symfile.h" #include "extension.h" -void (*deprecated_selected_frame_level_changed_hook) (int); - /* The possible choices of "set print frame-arguments", and the value of this setting. */ diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index 8d84551..b7218ff 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -119,18 +119,17 @@ tui_about_to_proceed (void) tui_target_has_run = 1; } -/* The selected frame has changed. This is happens after a target - stop or when the user explicitly changes the frame - (up/down/thread/...). */ +/* Refresh TUI's frame and register information. This is a hook intended to be + used to update the screen after potential frame and register changes. */ + static void -tui_selected_frame_level_changed_hook (int level) +tui_refresh_frame_and_register_information (void) { struct frame_info *fi; CORE_ADDR pc; struct cleanup *old_chain; - /* Negative level means that the selected frame was cleared. */ - if (level < 0) + if (!has_stack_frames ()) return; old_chain = make_cleanup_restore_target_terminal (); @@ -191,19 +190,35 @@ tui_inferior_exit (struct inferior *inf) tui_display_main (); } +/* Observer for the before_prompt notification. */ + +static void +tui_before_prompt (const char *current_gdb_prompt) +{ + tui_refresh_frame_and_register_information (); +} + +/* Observer for the normal_stop notification. */ + +static void +tui_normal_stop (struct bpstats *bs, int print_frame) +{ + tui_refresh_frame_and_register_information (); +} + /* Observers created when installing TUI hooks. */ static struct observer *tui_bp_created_observer; static struct observer *tui_bp_deleted_observer; static struct observer *tui_bp_modified_observer; static struct observer *tui_inferior_exit_observer; static struct observer *tui_about_to_proceed_observer; +static struct observer *tui_before_prompt_observer; +static struct observer *tui_normal_stop_observer; /* Install the TUI specific hooks. */ void tui_install_hooks (void) { - deprecated_selected_frame_level_changed_hook - = tui_selected_frame_level_changed_hook; deprecated_print_frame_info_listing_hook = tui_print_frame_info_listing_hook; @@ -218,6 +233,10 @@ tui_install_hooks (void) = observer_attach_inferior_exit (tui_inferior_exit); tui_about_to_proceed_observer = observer_attach_about_to_proceed (tui_about_to_proceed); + tui_before_prompt_observer + = observer_attach_before_prompt (tui_before_prompt); + tui_normal_stop_observer + = observer_attach_normal_stop (tui_normal_stop); deprecated_register_changed_hook = tui_register_changed_hook; } @@ -226,7 +245,6 @@ tui_install_hooks (void) void tui_remove_hooks (void) { - deprecated_selected_frame_level_changed_hook = 0; deprecated_print_frame_info_listing_hook = 0; deprecated_query_hook = 0; deprecated_register_changed_hook = 0; @@ -242,6 +260,10 @@ tui_remove_hooks (void) tui_inferior_exit_observer = NULL; observer_detach_about_to_proceed (tui_about_to_proceed_observer); tui_about_to_proceed_observer = NULL; + observer_detach_before_prompt (tui_before_prompt_observer); + tui_before_prompt_observer = NULL; + observer_detach_normal_stop (tui_normal_stop_observer); + tui_normal_stop_observer = NULL; } void _initialize_tui_hooks (void);