This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gdb and binutils branch master updated. fd664c91769bf7e31c3b4d64e41d05854eecd94a


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  fd664c91769bf7e31c3b4d64e41d05854eecd94a (commit)
      from  8817a6f225766029787b5e2c1300a342b328909e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fd664c91769bf7e31c3b4d64e41d05854eecd94a

commit fd664c91769bf7e31c3b4d64e41d05854eecd94a
Author: Pedro Alves <palves@redhat.com>
Date:   Thu May 29 13:09:45 2014 +0100

    PR gdb/13860 - Make MI sync vs async output (closer to) the same.
    
    Ignoring expected and desired differences like whether the prompt is
    output after *stoppped records, GDB MI output is still different in
    sync and async modes.
    
    In sync mode, when a CLI execution command is entered, the "reason"
    field is missing in the *stopped async record.  And in async mode, for
    some events, like program exits, the corresponding CLI output is
    missing in the CLI channel.
    
    Vis, diff between sync vs async modes:
    
       run
       ^running
       *running,thread-id="1"
       (gdb)
       ...
     - ~"[Inferior 1 (process 15882) exited normally]\n"
       =thread-exited,id="1",group-id="i1"
       =thread-group-exited,id="i1",exit-code="0"
     - *stopped
     + *stopped,reason="exited-normally"
    
       si
       ...
       (gdb)
       ~"0x000000000045e033\t29\t  memset (&args, 0, sizeof args);\n"
     - *stopped,frame=...,thread-id="1",stopped-threads="all",core="0"
     + *stopped,reason="end-stepping-range",frame=...,thread-id="1",stopped-threads="all",core="0"
       (gdb)
    
    In addition, in both cases, when a MI execution command is entered,
    and a breakpoint triggers, the event is sent to the console too.  But
    some events like program exits have the CLI output missing in the CLI
    channel:
    
       -exec-run
       ^running
       *running,thread-id="1"
       (gdb)
       ...
       =thread-exited,id="1",group-id="i1"
       =thread-group-exited,id="i1",exit-code="0"
     - *stopped
     + *stopped,reason="exited-normally"
    
    We'll want to make background commands always possible by default.
    IOW, make target-async be the default.  But, in order to do that,
    we'll need to emulate MI sync on top of an async target.  That means
    we'll have yet another combination to care for in the testsuite.
    
    Rather than making the testsuite cope with all these differences, I
    thought it better to just fix GDB to always have the complete output,
    no matter whether it's in sync or async mode.
    
    This is all related to interpreter-exec, and the corresponding uiout
    switching.  (Typing a CLI command directly in MI is shorthand for
    running it through -interpreter-exec console.)
    
    In sync mode, when a CLI command is active, normal_stop is called when
    the current interpreter and uiout are CLI's.  So print_XXX_reason
    prints the stop reason to CLI uiout (only), and we don't show it in
    MI.
    
    In async mode the stop event is processed when we're back in the MI
    interpreter, so the stop reason is printed directly to the MI uiout.
    
    Fix this by making run control event printing roughly independent of
    whatever is the current interpreter or uiout.  That is, move these
    prints to interpreter observers, that know whether to print or be
    quiet, and if printing, which uiout to print to.  In the case of the
    console/tui interpreters, only print if the top interpreter.  For MI,
    always print.
    
    Breakpoint hits / normal stops are already handled similarly -- MI has
    a normal_stop observer that prints the event to both MI and the CLI,
    though that could be cleaned up further in the direction of this
    patch.
    
    This also makes all of:
    
     (gdb) foo
    and
     (gdb) interpreter-exec MI "-exec-foo"
    and
     (gdb)
     -exec-foo
    and
     (gdb)
     -interpreter-exec console "foo"
    
    print as expected.
    
    Tested on x86_64 Fedora 20, sync and async modes.
    
    gdb/
    2014-05-29  Pedro Alves  <palves@redhat.com>
    
    	PR gdb/13860
    	* cli/cli-interp.c: Include infrun.h and observer.h.
    	(cli_uiout, cli_interp): New globals.
    	(cli_on_signal_received, cli_on_end_stepping_range)
    	(cli_on_signal_exited, cli_on_exited, cli_on_no_history): New
    	functions.
    	(cli_interpreter_init): Install them as 'end_stepping_range',
    	'signal_received' 'signal_exited', 'exited' and 'no_history'
    	observers.
    	(_initialize_cli_interp): Remove cli_interp local.
    	* infrun.c (handle_inferior_event): Call the several stop reason
    	observers instead of printing the stop reason directly.
    	(end_stepping_range): New function.
    	(print_end_stepping_range_reason, print_signal_exited_reason)
    	(print_exited_reason, print_signal_received_reason)
    	(print_no_history_reason): Make static, and add an uiout
    	parameter.  Print to that instead of to CURRENT_UIOUT.
    	* infrun.h (print_end_stepping_range_reason)
    	(print_signal_exited_reason, print_exited_reason)
    	(print_signal_received_reason print_no_history_reason): New
    	declarations.
    	* mi/mi-common.h (struct mi_interp): Rename 'uiout' field to
    	'mi_uiout'.
    	<cli_uiout>: New field.
    	* mi/mi-interp.c (mi_interpreter_init): Adjust.  Create the new
    	uiout for CLI output.  Install 'signal_received',
    	'end_stepping_range', 'signal_exited', 'exited' and 'no_history'
    	observers.
    	(find_mi_interpreter, mi_interp_data, mi_on_signal_received)
    	(mi_on_end_stepping_range, mi_on_signal_exited, mi_on_exited)
    	(mi_on_no_history): New functions.
    	(ui_out_free_cleanup): Delete function.
    	(mi_on_normal_stop): Don't allocate a new uiout for CLI output,
    	instead use the one already stored in the MI interpreter data.
    	(mi_ui_out): Adjust.
    	* tui/tui-interp.c: Include infrun.h and observer.h.
    	(tui_interp): New global.
    	(tui_on_signal_received, tui_on_end_stepping_range)
    	(tui_on_signal_exited, tui_on_exited)
    	(tui_on_no_history): New functions.
    	(tui_init): Install them as 'end_stepping_range',
    	'signal_received' 'signal_exited', 'exited' and 'no_history'
    	observers.
    	(_initialize_tui_interp): Delete tui_interp local.
    
    gdb/doc/
    2014-05-29  Pedro Alves  <palves@redhat.com>
    
    	PR gdb/13860
    	* observer.texi (signal_received, end_stepping_range)
    	(signal_exited, exited, no_history): New observer subjects.
    
    gdb/testsuite/
    2014-05-29  Pedro Alves  <palves@redhat.com>
    
    	PR gdb/13860
    	* gdb.mi/mi-cli.exp: Always expect "end-stepping-range" stop
    	reason, even in sync mode.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog                   |   47 +++++++++++++
 gdb/cli/cli-interp.c            |   64 +++++++++++++++++-
 gdb/doc/ChangeLog               |    6 ++
 gdb/doc/observer.texi           |   20 ++++++
 gdb/infrun.c                    |  118 ++++++++++++++++------------------
 gdb/infrun.h                    |   22 ++++++
 gdb/mi/mi-common.h              |    5 +-
 gdb/mi/mi-interp.c              |  136 +++++++++++++++++++++++++++++++++++----
 gdb/testsuite/ChangeLog         |    6 ++
 gdb/testsuite/gdb.mi/mi-cli.exp |   23 +------
 gdb/tui/tui-interp.c            |   64 ++++++++++++++++++-
 11 files changed, 408 insertions(+), 103 deletions(-)


hooks/post-receive
-- 
gdb and binutils


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]