[PATCH]: Always define tui commands

Stephane Carrez
2001-07-19T15:48:00Z

Hi!

The tui commands were defined only when the -tui option was specified.
Since we are able to switch to/from tui, it is annoying because when
gdb is started without -tui, we can switch later to TUI but the commands
are not defined.

I've committed this patch to always define the tui specific commands
and to define a help class for tui.

Stephane

2001-07-20 Stephane Carrez <Stephane.Carrez@worldnet.fr>

* tuiWin.c (_initialize_tuiWin): Always define the tui commands;
create the tui class help.
* tuiLayout.c (_initialize_tuiLayout): Always define the tui commands.
* tuiRegs.c (_initialize_tuiRegs): Likewise.
* tuiStack.c (_initialize_tuiStack): Likewise.
Index: tuiWin.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiWin.c,v
retrieving revision 1.9
diff -u -p -r1.9 tuiWin.c
--- tuiWin.c 2001/07/18 22:03:22 1.9
+++ tuiWin.c 2001/07/19 22:45:46
@@ -31,6 +31,7 @@
#include "symtab.h"
#include "breakpoint.h"
#include "frame.h"
+#include "cli/cli-cmds.h"

#include "tui.h"
#include "tuiData.h"
@@ -85,51 +86,53 @@ static void _parseScrollingArgs (char *,
void
_initialize_tuiWin (void)
{
- if (tui_version)
- {
- add_com ("refresh", class_tui, _tuiRefreshAll_command,
- "Refresh the terminal display.\n");
- if (xdb_commands)
- add_com_alias ("U", "refresh", class_tui, 0);
- add_com ("tabset", class_tui, _tuiSetTabWidth_command,
- "Set the width (in characters) of tab stops.\n\
+ /* Define the classes of commands.
+ They will appear in the help list in the reverse of this order. */
+
+ add_cmd ("tui", class_tui, NO_FUNCTION,
+ "Text User Interface commands.",
+ &cmdlist);
+
+ add_com ("refresh", class_tui, _tuiRefreshAll_command,
+ "Refresh the terminal display.\n");
+ if (xdb_commands)
+ add_com_alias ("U", "refresh", class_tui, 0);
+ add_com ("tabset", class_tui, _tuiSetTabWidth_command,
+ "Set the width (in characters) of tab stops.\n\
Usage: tabset <n>\n");
- add_com ("winheight", class_tui, _tuiSetWinHeight_command,
- "Set the height of a specified window.\n\
+ add_com ("winheight", class_tui, _tuiSetWinHeight_command,
+ "Set the height of a specified window.\n\
Usage: winheight <win_name> [+ | -] <#lines>\n\
Window names are:\n\
src : the source window\n\
cmd : the command window\n\
asm : the disassembly window\n\
regs : the register display\n");
- add_com_alias ("wh", "winheight", class_tui, 0);
- add_info ("win", _tuiAllWindowsInfo,
- "List of all displayed windows.\n");
- add_com ("focus", class_tui, _tuiSetFocus_command,
- "Set focus to named window or next/prev window.\n\
+ add_com_alias ("wh", "winheight", class_tui, 0);
+ add_info ("win", _tuiAllWindowsInfo,
+ "List of all displayed windows.\n");
+ add_com ("focus", class_tui, _tuiSetFocus_command,
+ "Set focus to named window or next/prev window.\n\
Usage: focus {<win> | next | prev}\n\
Valid Window names are:\n\
src : the source window\n\
asm : the disassembly window\n\
regs : the register display\n\
cmd : the command window\n");
- add_com_alias ("fs", "focus", class_tui, 0);
- add_com ("+", class_tui, _tuiScrollForward_command,
- "Scroll window forward.\nUsage: + [win] [n]\n");
- add_com ("-", class_tui, _tuiScrollBackward_command,
- "Scroll window backward.\nUsage: - [win] [n]\n");
- add_com ("<", class_tui, _tuiScrollLeft_command,
- "Scroll window forward.\nUsage: < [win] [n]\n");
- add_com (">", class_tui, _tuiScrollRight_command,
- "Scroll window backward.\nUsage: > [win] [n]\n");
- if (xdb_commands)
- add_com ("w", class_xdb, _tuiXDBsetWinHeight_command,
- "XDB compatibility command for setting the height of a command window.\n\
+ add_com_alias ("fs", "focus", class_tui, 0);
+ add_com ("+", class_tui, _tuiScrollForward_command,
+ "Scroll window forward.\nUsage: + [win] [n]\n");
+ add_com ("-", class_tui, _tuiScrollBackward_command,
+ "Scroll window backward.\nUsage: - [win] [n]\n");
+ add_com ("<", class_tui, _tuiScrollLeft_command,
+ "Scroll window forward.\nUsage: < [win] [n]\n");
+ add_com (">", class_tui, _tuiScrollRight_command,
+ "Scroll window backward.\nUsage: > [win] [n]\n");
+ if (xdb_commands)
+ add_com ("w", class_xdb, _tuiXDBsetWinHeight_command,
+ "XDB compatibility command for setting the height of a command window.\n\
Usage: w <#lines>\n");
- }
-
- return;
-} /* _intialize_tuiWin */
+}

/*
Index: tuiLayout.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiLayout.c,v
retrieving revision 1.11
diff -u -p -r1.11 tuiLayout.c
--- tuiLayout.c 2001/07/18 22:03:22 1.11
+++ tuiLayout.c 2001/07/19 22:45:48
@@ -435,10 +435,8 @@ tuiDefaultWinViewportHeight (TuiWinType
void
_initialize_tuiLayout (void)
{
- if (tui_version)
- {
- add_com ("layout", class_tui, _tuiLayout_command,
- "Change the layout of windows.\n\
+ add_com ("layout", class_tui, _tuiLayout_command,
+ "Change the layout of windows.\n\
Usage: layout prev | next | <layout_name> \n\
Layout names are:\n\
src : Displays source and command windows.\n\
@@ -450,18 +448,15 @@ Layout names are:\n\
source/assembly/command (split) is displayed, \n\
the register window is displayed with \n\
the window that has current logical focus.\n");
- if (xdb_commands)
- {
- add_com ("td", class_tui, _tuiToggleLayout_command,
- "Toggle between Source/Command and Disassembly/Command layouts.\n");
- add_com ("ts", class_tui, _tuiToggleSplitLayout_command,
- "Toggle between Source/Command or Disassembly/Command and \n\
+ if (xdb_commands)
+ {
+ add_com ("td", class_tui, _tuiToggleLayout_command,
+ "Toggle between Source/Command and Disassembly/Command layouts.\n");
+ add_com ("ts", class_tui, _tuiToggleSplitLayout_command,
+ "Toggle between Source/Command or Disassembly/Command and \n\
Source/Disassembly/Command layouts.\n");
- }
}
-
- return;
-} /* _intialize_tuiLayout */
+}

/*************************
Index: tuiRegs.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiRegs.c,v
retrieving revision 1.8
diff -u -p -r1.8 tuiRegs.c
--- tuiRegs.c 2001/07/18 22:03:22 1.8
+++ tuiRegs.c 2001/07/19 22:45:50
@@ -540,7 +540,7 @@ tuiToggleFloatRegs (void)
void
_initialize_tuiRegs (void)
{
- if (tui_version && xdb_commands)
+ if (xdb_commands)
{
add_com ("fr", class_tui, _tuiShowFloat_command,
"Display only floating point registers\n");
@@ -561,9 +561,7 @@ _initialize_tuiRegs (void)
registers.\n",
&togglelist);
}
-
- return;
-} /* _initialize_tuiRegs */
+}

/*****************************************
Index: tuiStack.c
===================================================================
RCS file: /cvs/src/src/gdb/tui/tuiStack.c,v
retrieving revision 1.7
diff -u -p -r1.7 tuiStack.c
--- tuiStack.c 2001/07/18 20:59:00 1.7
+++ tuiStack.c 2001/07/19 22:45:51
@@ -422,14 +422,9 @@ tui_vShowFrameInfo (va_list args)
void
_initialize_tuiStack (void)
{
- if (tui_version)
- {
- add_com ("update", class_tui, _tuiUpdateLocation_command,
- "Update the source window and locator to display the current execution point.\n");
- }
-
- return;
-} /* _initialize_tuiStack */
+ add_com ("update", class_tui, _tuiUpdateLocation_command,
+ "Update the source window and locator to display the current execution point.\n");
+}

/*****************************************
From Stephane.Carrez@worldnet.fr Thu Jul 19 15:50:00 2001
From: Stephane Carrez <Stephane.Carrez@worldnet.fr>
To: gdb-patches@sources.redhat.com
Subject: [RFA]: New function terminal_save_ours()
Date: Thu, 19 Jul 2001 15:50:00 -0000
Message-id: <3B576530.13178D50@worldnet.fr>
X-SW-Source: 2001-07/msg00497.html
Content-length: 2249

Hi!

When using gdb-tui and switching to or leaving the TUI mode, the terminal
settings are changed. This is part of the curses management (endwin).

Gdb keeps in a static variable in inflow.c for the tty setting of himself.
It switches it with the inferior terminal (terminal_inferior, terminal_ours).
The gdb terminal settings are fetched only once, the first time it is
used/checked (so we don't know when).

For the TUI to work correctly, it needs to update the gdb knowledge of
its terminal. The patch below proposes a new function `terminal_save_ours'
which is called by TUI each time the TUI changes from mode; that is
after we enter in TUI mode (curses), and after we left the TUI mode.

Can you approve this patch ?

Stephane

2001-07-20 Stephane Carrez <Stephane.Carrez@worldnet.fr>

* inferior.h (terminal_save_ours): Declare.
* inflow.c (terminal_save_ours): New function.
Index: inflow.c
===================================================================
RCS file: /cvs/src/src/gdb/inflow.c,v
retrieving revision 1.11
diff -u -p -r1.11 inflow.c
--- inflow.c 2001/07/15 20:34:13 1.11
+++ inflow.c 2001/07/19 22:48:49
@@ -200,6 +200,23 @@ terminal_init_inferior_with_pgrp (int pg
}
}

+/* Save the terminal settings again. This is necessary for the TUI
+ when it switches to TUI or non-TUI mode; curses changes the terminal
+ and gdb must be able to restore it correctly. */
+
+void
+terminal_save_ours ()
+{
+ if (gdb_has_a_terminal ())
+ {
+ /* We could just as well copy our_ttystate (if we felt like adding
+ a new function serial_copy_tty_state). */
+ if (our_ttystate)
+ xfree (our_ttystate);
+ our_ttystate = serial_get_tty_state (stdin_serial);
+ }
+}
+
void
terminal_init_inferior (void)
{
Index: inferior.h
===================================================================
RCS file: /cvs/src/src/gdb/inferior.h,v
retrieving revision 1.23
diff -u -p -r1.23 inferior.h
--- inferior.h 2001/05/15 00:03:36 1.23
+++ inferior.h 2001/07/19 22:48:51
@@ -151,6 +151,8 @@ extern void generic_mourn_inferior (void

extern void terminal_ours (void);

+extern void terminal_save_ours (void);
+
extern int run_stack_dummy (CORE_ADDR, char *);

extern CORE_ADDR read_pc (void);
From dmj+@andrew.cmu.edu Thu Jul 19 16:09:00 2001
From: Daniel Jacobowitz <dmj+@andrew.cmu.edu>
To: Elena Zannoni <ezannoni@cygnus.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC] GDB's mdebug support vs. GCC 3.0
Date: Thu, 19 Jul 2001 16:09:00 -0000
Message-id: <20010719160858.A30318@nevyn.them.org>
References: <20010629123944.A3423@nevyn.them.org> <15191.24417.472551.89834@krustylu.cygnus.com>
X-SW-Source: 2001-07/msg00498.html
Content-length: 1485

On Thu, Jul 19, 2001 at 06:29:53PM -0400, Elena Zannoni wrote:
>
> Wow, what a messy control flow. Makes me dizzy. I am starting to
> understand this patch a bit. Just a few questions. Do you go through
> mipsread.c at all? If so, does mipscoff_new_init get called? If so,
> can you try to add the call to init_header_files in there instead?

The problem is that I don't go through mipsread at all. What we have
here is mdebug-in-ELF; elfmdebug_read_psymtab is where we enter mdebug
from.

> Next problem:
>
> Can you explain a bit more what happens there? I see that your new
> code in the if branch does the same things that process_one_symbol would do.
> . Change valu by the offset
> . call end_symtab
> . call end_stabs
>
> Are you saying that the symtab would be ended twice in that case? Once
> in process_one_symbol and once in psymtab_to_symtab_1?
> I think this the problem right?
> I am going to think some more.

That bit I'm not thrilled with. You're right; we used to not get the
final N_SO at all, and so process_one_symbol would not call end_symtab,
and we'd be safe when we called it ourselves after the loop. But GCC
3.0 does emit these N_SO's. We need to prevent process_one_symbol
(whose logic I'm not convinced we should be reusing on this path at
all, it's heinous!) from ending the symtab prematurely.

--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer