From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2422 invoked by alias); 11 Sep 2010 16:01:59 -0000 Received: (qmail 2411 invoked by uid 22791); 11 Sep 2010 16:01:57 -0000 X-SWARE-Spam-Status: No, hits=-6.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_TD,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 11 Sep 2010 16:01:52 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o8BG1oZn013792 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 11 Sep 2010 12:01:51 -0400 Received: from host1.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o8BG1m9f001754 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 11 Sep 2010 12:01:50 -0400 Received: from host1.dyn.jankratochvil.net (localhost [127.0.0.1]) by host1.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o8BG1lrn019806; Sat, 11 Sep 2010 18:01:47 +0200 Received: (from jkratoch@localhost) by host1.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o8BG1ltj019801; Sat, 11 Sep 2010 18:01:47 +0200 Date: Sat, 11 Sep 2010 18:34:00 -0000 From: Jan Kratochvil To: Tom Tromey Cc: Paul Bolle , gdb-patches@sourceware.org Subject: Re: [patch] Fix uiout for execute_command_to_string Message-ID: <20100911160146.GA17119@host1.dyn.jankratochvil.net> References: <20100903180619.GA15409@host1.dyn.jankratochvil.net> <1283551592.3230.27.camel@localhost.localdomain> <20100909213307.GA32018@host1.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-12-10) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-09/txt/msg00238.txt.bz2 On Fri, 10 Sep 2010 22:27:27 +0200, Tom Tromey wrote: > >>>>> "Jan" == Jan Kratochvil writes: > Jan> +struct cleanup * > Jan> +make_cleanup_ui_out_redirect_pop (struct ui_out *uiout) > Jan> +{ > Jan> + return make_my_cleanup (&cleanup_chain, do_ui_out_redirect_pop, uiout); > Jan> +} > > The two new functions need header comments. Done. > Ok with that change. Checked-in. Thanks, Jan http://sourceware.org/ml/gdb-cvs/2010-09/msg00080.html --- src/gdb/ChangeLog 2010/09/10 16:17:11 1.12170 +++ src/gdb/ChangeLog 2010/09/11 16:00:20 1.12171 @@ -1,3 +1,21 @@ +2010-09-11 Jan Kratochvil + Paul Bolle + + Redirect also uiout and stdtarg{,err} in execute_command_to_string. + * cli-logging.c (struct saved_output_files) : New. + (set_logging_redirect, pop_output_files, handle_redirections): + Redirect also gdb_stdtargerr. + * defs.h (struct ui_out, make_cleanup_ui_out_redirect_pop): New + declarations. + * event-top.c (gdb_setup_readline, gdb_disable_readline): Redirect + also gdb_stdtargerr. + * top.c (execute_command_to_string): Move make_cleanup_ui_file_delete + to the top. Redirect also gdb_stdlog, gdb_stdtarg and gdb_stdtargerr. + Use ui_out_redirect, register make_cleanup_ui_out_redirect_pop. + * tui/tui-io.c (tui_setup_io): Redirect also gdb_stdtargerr. + * utils.c (do_ui_out_redirect_pop, make_cleanup_ui_out_redirect_pop): + New functions. + 2010-09-10 Pierre Muller * hppa-tdep.c (unwind_command): Use host_address_to_string function --- src/gdb/testsuite/ChangeLog 2010/09/10 20:29:25 1.2444 +++ src/gdb/testsuite/ChangeLog 2010/09/11 16:00:26 1.2445 @@ -1,3 +1,8 @@ +2010-09-11 Jan Kratochvil + + * gdb.python/python.exp (set height 0, collect help from uiout) + (verify help to uiout): New tests. + 2010-09-10 Edjunior Barbosa Machado * gdb.base/break-interp.exp (test_ld) : Add --- src/gdb/defs.h 2010/08/31 18:08:43 1.278 +++ src/gdb/defs.h 2010/09/11 16:00:25 1.279 @@ -337,6 +337,10 @@ struct ui_file; extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *); +struct ui_out; +extern struct cleanup * + make_cleanup_ui_out_redirect_pop (struct ui_out *uiout); + struct section_addr_info; extern struct cleanup *(make_cleanup_free_section_addr_info (struct section_addr_info *)); --- src/gdb/event-top.c 2010/06/26 06:44:47 1.72 +++ src/gdb/event-top.c 2010/09/11 16:00:25 1.73 @@ -1048,6 +1048,7 @@ gdb_stderr = stdio_fileopen (stderr); gdb_stdlog = gdb_stderr; /* for moment */ gdb_stdtarg = gdb_stderr; /* for moment */ + gdb_stdtargerr = gdb_stderr; /* for moment */ /* If the input stream is connected to a terminal, turn on editing. */ @@ -1106,6 +1107,7 @@ ui_file_delete (gdb_stderr); gdb_stdlog = NULL; gdb_stdtarg = NULL; + gdb_stdtargerr = NULL; #endif rl_callback_handler_remove (); --- src/gdb/top.c 2010/08/07 15:00:37 1.183 +++ src/gdb/top.c 2010/09/11 16:00:25 1.184 @@ -475,12 +475,23 @@ str_file = mem_fileopen (); + make_cleanup_ui_file_delete (str_file); make_cleanup_restore_ui_file (&gdb_stdout); make_cleanup_restore_ui_file (&gdb_stderr); - make_cleanup_ui_file_delete (str_file); + make_cleanup_restore_ui_file (&gdb_stdlog); + make_cleanup_restore_ui_file (&gdb_stdtarg); + make_cleanup_restore_ui_file (&gdb_stdtargerr); + + if (ui_out_redirect (uiout, str_file) < 0) + warning (_("Current output protocol does not support redirection")); + else + make_cleanup_ui_out_redirect_pop (uiout); gdb_stdout = str_file; gdb_stderr = str_file; + gdb_stdlog = str_file; + gdb_stdtarg = str_file; + gdb_stdtargerr = str_file; execute_command (p, from_tty); --- src/gdb/utils.c 2010/08/07 15:00:37 1.239 +++ src/gdb/utils.c 2010/09/11 16:00:25 1.240 @@ -311,6 +311,26 @@ return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg); } +/* Helper function for make_cleanup_ui_out_redirect_pop. */ + +static void +do_ui_out_redirect_pop (void *arg) +{ + struct ui_out *uiout = arg; + + if (ui_out_redirect (uiout, NULL) < 0) + warning (_("Cannot restore redirection of the current output protocol")); +} + +/* Return a new cleanup that pops the last redirection by ui_out_redirect + with NULL parameter. */ + +struct cleanup * +make_cleanup_ui_out_redirect_pop (struct ui_out *uiout) +{ + return make_my_cleanup (&cleanup_chain, do_ui_out_redirect_pop, uiout); +} + static void do_free_section_addr_info (void *arg) { --- src/gdb/cli/cli-logging.c 2010/09/03 15:42:03 1.25 +++ src/gdb/cli/cli-logging.c 2010/09/11 16:00:26 1.26 @@ -33,6 +33,7 @@ struct ui_file *err; struct ui_file *log; struct ui_file *targ; + struct ui_file *targerr; }; static struct saved_output_files saved_output; static char *saved_filename; @@ -116,6 +117,7 @@ gdb_stderr = output; gdb_stdlog = output; gdb_stdtarg = output; + gdb_stdtargerr = output; logging_no_redirect_file = new_logging_no_redirect_file; /* There is a former output pushed on the ui_out_redirect stack. We want to @@ -154,10 +156,12 @@ gdb_stderr = saved_output.err; gdb_stdlog = saved_output.log; gdb_stdtarg = saved_output.targ; + gdb_stdtargerr = saved_output.targ; saved_output.out = NULL; saved_output.err = NULL; saved_output.log = NULL; saved_output.targ = NULL; + saved_output.targerr = NULL; ui_out_redirect (uiout, NULL); } @@ -211,11 +215,13 @@ saved_output.err = gdb_stderr; saved_output.log = gdb_stdlog; saved_output.targ = gdb_stdtarg; + saved_output.targerr = gdb_stdtargerr; gdb_stdout = output; gdb_stderr = output; gdb_stdlog = output; gdb_stdtarg = output; + gdb_stdtargerr = output; if (ui_out_redirect (uiout, output) < 0) warning (_("Current output protocol does not support redirection")); --- src/gdb/testsuite/gdb.python/python.exp 2010/08/19 17:00:58 1.14 +++ src/gdb/testsuite/gdb.python/python.exp 2010/09/11 16:00:27 1.15 @@ -149,6 +149,12 @@ } gdb_test "q" "Quit" "verify pagination afterwards: q" +gdb_test_no_output "set height 0" + +gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout" + +gdb_test "python print a" ".*aliases -- Aliases of other commands.*" "verify help to uiout" + # Start with a fresh gdb. clean_restart ${testfile} --- src/gdb/tui/tui-io.c 2010/07/28 11:56:30 1.24 +++ src/gdb/tui/tui-io.c 2010/09/11 16:00:27 1.25 @@ -545,6 +545,7 @@ gdb_stderr = tui_stderr; gdb_stdlog = gdb_stdout; /* for moment */ gdb_stdtarg = gdb_stderr; /* for moment */ + gdb_stdtargerr = gdb_stderr; /* for moment */ uiout = tui_out; /* Save tty for SIGCONT. */ @@ -557,6 +558,7 @@ gdb_stderr = tui_old_stderr; gdb_stdlog = gdb_stdout; /* for moment */ gdb_stdtarg = gdb_stderr; /* for moment */ + gdb_stdtargerr = gdb_stderr; /* for moment */ uiout = tui_old_uiout; /* Restore readline. */