* tuiWin.c, tuiWin.h, tui.c, tui.h, tuiCommand.c: Add FSF copyright.
tuiCommand.h, tuiIO.c, tuiIO.h, tuiData.h, tuiData.c: Likewise.
tuiDataWin.c, tuiDataWin.h, tuiDisassem.c, tuiDisassem.h: Likewise.
tuiGeneralWin.c, tuiGeneralWin.h, tuiLayout.c, tuiLayout.h: Likewise.
tuiRegs.c, tuiRegs.h, tuiSource.c, tuiSource.h: Likewise.
tuiSouceWin.c, tuiSourceWin.h, tuiStack.c, tuiStack.h: Likewise.
2001-07-14 21:01:25 +02:00
|
|
|
/* TUI display locator.
|
2004-01-29 00:16:50 +01:00
|
|
|
|
2019-01-01 07:01:51 +01:00
|
|
|
Copyright (C) 1998-2019 Free Software Foundation, Inc.
|
2004-01-29 00:16:50 +01:00
|
|
|
|
* tuiWin.c, tuiWin.h, tui.c, tui.h, tuiCommand.c: Add FSF copyright.
tuiCommand.h, tuiIO.c, tuiIO.h, tuiData.h, tuiData.c: Likewise.
tuiDataWin.c, tuiDataWin.h, tuiDisassem.c, tuiDisassem.h: Likewise.
tuiGeneralWin.c, tuiGeneralWin.h, tuiLayout.c, tuiLayout.h: Likewise.
tuiRegs.c, tuiRegs.h, tuiSource.c, tuiSource.h: Likewise.
tuiSouceWin.c, tuiSourceWin.h, tuiStack.c, tuiStack.h: Likewise.
2001-07-14 21:01:25 +02:00
|
|
|
Contributed by Hewlett-Packard Company.
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
* tuiWin.c, tuiWin.h, tui.c, tui.h, tuiCommand.c: Add FSF copyright.
tuiCommand.h, tuiIO.c, tuiIO.h, tuiData.h, tuiData.c: Likewise.
tuiDataWin.c, tuiDataWin.h, tuiDisassem.c, tuiDisassem.h: Likewise.
tuiGeneralWin.c, tuiGeneralWin.h, tuiLayout.c, tuiLayout.h: Likewise.
tuiRegs.c, tuiRegs.h, tuiSource.c, tuiSource.h: Likewise.
tuiSouceWin.c, tuiSourceWin.h, tuiStack.c, tuiStack.h: Likewise.
2001-07-14 21:01:25 +02:00
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
* tuiWin.c, tuiWin.h, tui.c, tui.h, tuiCommand.c: Add FSF copyright.
tuiCommand.h, tuiIO.c, tuiIO.h, tuiData.h, tuiData.c: Likewise.
tuiDataWin.c, tuiDataWin.h, tuiDisassem.c, tuiDisassem.h: Likewise.
tuiGeneralWin.c, tuiGeneralWin.h, tuiLayout.c, tuiLayout.h: Likewise.
tuiRegs.c, tuiRegs.h, tuiSource.c, tuiSource.h: Likewise.
tuiSouceWin.c, tuiSourceWin.h, tuiStack.c, tuiStack.h: Likewise.
2001-07-14 21:01:25 +02:00
|
|
|
|
2019-01-27 20:51:36 +01:00
|
|
|
#ifndef TUI_TUI_STACK_H
|
|
|
|
#define TUI_TUI_STACK_H
|
2004-01-29 00:16:50 +01:00
|
|
|
|
2019-07-06 19:32:06 +02:00
|
|
|
#include "tui/tui-data.h"
|
|
|
|
|
2004-01-29 00:16:50 +01:00
|
|
|
struct frame_info;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2019-07-06 19:32:06 +02:00
|
|
|
/* Locator window class. */
|
|
|
|
|
|
|
|
struct tui_locator_window : public tui_gen_win_info
|
|
|
|
{
|
|
|
|
tui_locator_window ()
|
|
|
|
: tui_gen_win_info (LOCATOR_WIN)
|
|
|
|
{
|
|
|
|
full_name[0] = 0;
|
|
|
|
proc_name[0] = 0;
|
|
|
|
}
|
|
|
|
|
2019-07-10 01:29:13 +02:00
|
|
|
void rerender () override;
|
|
|
|
|
2019-07-18 22:01:56 +02:00
|
|
|
/* Update the locator, with the provided arguments.
|
|
|
|
|
|
|
|
Returns true if any of the locator's fields were actually
|
|
|
|
changed, and false otherwise. */
|
|
|
|
bool set_locator_info (struct gdbarch *gdbarch,
|
|
|
|
const char *fullname,
|
|
|
|
const char *procname,
|
|
|
|
int lineno, CORE_ADDR addr);
|
|
|
|
|
|
|
|
/* Set the full_name portion of the locator. */
|
|
|
|
void set_locator_fullname (const char *fullname);
|
|
|
|
|
2019-09-01 16:13:24 +02:00
|
|
|
std::string full_name;
|
|
|
|
std::string proc_name;
|
2019-07-06 19:32:06 +02:00
|
|
|
int line_no = 0;
|
|
|
|
CORE_ADDR addr = 0;
|
|
|
|
/* Architecture associated with code at this location. */
|
|
|
|
struct gdbarch *gdbarch = nullptr;
|
2019-07-24 00:43:20 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
/* Create the status line to display as much information as we can
|
|
|
|
on this single line: target name, process number, current
|
|
|
|
function, current line, current PC, SingleKey mode. */
|
|
|
|
|
|
|
|
std::string make_status_line () const;
|
2019-07-06 19:32:06 +02:00
|
|
|
};
|
|
|
|
|
2013-02-03 17:16:42 +01:00
|
|
|
extern void tui_update_locator_fullname (const char *);
|
2004-01-29 00:16:50 +01:00
|
|
|
extern void tui_show_locator_content (void);
|
TUI: Make sure to update registers if frame information has changed
When I replaced TUI's frame_changed hook to fix PR tui/13378 I assumed
that there's no reason to refresh register information following a call
to "up", "down" or "frame". This assumption was made to fix the problem
of refreshing frame information twice following a sync-execution normal
stop (once in tui_normal_stop and then in tui_before_prompt) -- the
second refresh removing any highlights made by the first.
I was wrong about that -- GDB's snapshot of register information is
per-frame, and when the frame changes, registers do too (most
prominently the %rip and %rsp registers). So e.g. GDB 7.8 would
highlight such register changes after invoking "up", "down" or "frame",
and current GDB does not.
To fix this regression, this patch adds another (sufficient) condition
for refreshing register information: in
tui_refresh_frame_and_register_information, always refresh register
information if frame information has changed. This makes register
information get refreshed following a call to "up", "down" or "frame"
while still avoiding the "double refresh" issue following a normal stop.
This condition may seem to obsolete the existing registers_too_p
parameter, but it does not: following a normal stop, it is possible that
registers may have changed while frame information had not. We could be
on the exact same PC with different register values. The new condition
would not catch such a case, but the registers_too_p condition will. So
both conditions seem necessary (and either one is sufficient).
gdb/ChangeLog:
* tui/tui-hooks.c (tui_refresh_frame_and_register_information):
Update commentary. Always refresh the registers when frame
information has changed.
* tui/tui-stack.c (tui_show_frame_info): Update commentary.
Change return type to int. Return 1 if frame information has
changed, 1 otherwise.
(tui_before_prompt): Update commentary.
* tui/tui-stack.h (tui_show_frame_info): Change return type to
int.
2015-07-01 14:02:09 +02:00
|
|
|
extern int tui_show_frame_info (struct frame_info *);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2019-01-27 20:51:36 +01:00
|
|
|
#endif /* TUI_TUI_STACK_H */
|