* tuiStack.c (tuiSetLocatorContent): Remove.

(tuiUpdateLocatorInfoFromFrame): Remove.
	(tui_set_locator_info): Allocate the content buffer if necessary.
	(tui_set_locator_filename): Call tui_set_locator_info directly.
	(tuiShowFrameInfo): Likewise and use find_pc_line instead of
	find_pc_symtab.
This commit is contained in:
Stephane Carrez
2002-08-25 17:13:29 +00:00
parent bb4250135d
commit 7d6dd1e97d
2 changed files with 44 additions and 88 deletions

View File

@ -1,3 +1,12 @@
2002-08-25 Stephane Carrez <stcarrez@nerim.fr>
* tuiStack.c (tuiSetLocatorContent): Remove.
(tuiUpdateLocatorInfoFromFrame): Remove.
(tui_set_locator_info): Allocate the content buffer if necessary.
(tui_set_locator_filename): Call tui_set_locator_info directly.
(tuiShowFrameInfo): Likewise and use find_pc_line instead of
find_pc_symtab.
2002-08-25 Stephane Carrez <stcarrez@nerim.fr> 2002-08-25 Stephane Carrez <stcarrez@nerim.fr>
* tuiSourceWin.c (tuiDisplayMainFunction): Update to use * tuiSourceWin.c (tuiDisplayMainFunction): Update to use

View File

@ -65,13 +65,10 @@ static void tui_set_locator_filename (const char *filename);
/* Update the locator, with the provided arguments. */ /* Update the locator, with the provided arguments. */
static void tui_set_locator_info (const char *filename, const char *procname, static void tui_set_locator_info (const char *filename, const char *procname,
int lineno, CORE_ADDR addr, int lineno, CORE_ADDR addr);
TuiLocatorElementPtr element);
static void tui_update_command (char *, int); static void tui_update_command (char *, int);
/* Function to set the content of the locator. */
static void tuiSetLocatorContent (struct frame_info *frameInfo);
/* Get a printable name for the function at the address. /* Get a printable name for the function at the address.
The symbol name is demangled if demangling is turned on. The symbol name is demangled if demangling is turned on.
@ -144,7 +141,10 @@ tui_set_locator_filename (const char *filename)
TuiLocatorElementPtr element; TuiLocatorElementPtr element;
if (locator->content[0] == (Opaque) NULL) if (locator->content[0] == (Opaque) NULL)
tuiSetLocatorContent ((struct frame_info *) NULL); {
tui_set_locator_info (filename, NULL, 0, 0);
return;
}
element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator; element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator;
element->fileName[0] = 0; element->fileName[0] = 0;
@ -154,8 +154,19 @@ tui_set_locator_filename (const char *filename)
/* Update the locator, with the provided arguments. */ /* Update the locator, with the provided arguments. */
static void static void
tui_set_locator_info (const char *filename, const char *procname, int lineno, tui_set_locator_info (const char *filename, const char *procname, int lineno,
CORE_ADDR addr, TuiLocatorElementPtr element) CORE_ADDR addr)
{ {
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
TuiLocatorElementPtr element;
/* Allocate the locator content if necessary. */
if (locator->contentSize <= 0)
{
locator->content = (OpaquePtr) allocContent (1, locator->type);
locator->contentSize = 1;
}
element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator;
element->procName[0] = (char) 0; element->procName[0] = (char) 0;
strcat_to_buf (element->procName, MAX_LOCATOR_ELEMENT_LEN, procname); strcat_to_buf (element->procName, MAX_LOCATOR_ELEMENT_LEN, procname);
element->lineNo = lineno; element->lineNo = lineno;
@ -163,7 +174,6 @@ tui_set_locator_info (const char *filename, const char *procname, int lineno,
tui_set_locator_filename (filename); tui_set_locator_filename (filename);
} }
/* Update only the filename portion of the locator. */ /* Update only the filename portion of the locator. */
void void
tuiUpdateLocatorFilename (const char *filename) tuiUpdateLocatorFilename (const char *filename)
@ -172,72 +182,7 @@ tuiUpdateLocatorFilename (const char *filename)
tuiShowLocatorContent (); tuiShowLocatorContent ();
} }
/* /* Function to print the frame information for the TUI. */
** tuiUpdateLocatorInfoFromFrame().
** Function to update the locator, with the information extracted from frameInfo
*/
static void
tuiUpdateLocatorInfoFromFrame (struct frame_info *frameInfo,
TuiLocatorElementPtr element)
{
struct symtab_and_line symtabAndLine;
/* now get the new info */
symtabAndLine = find_pc_line (frameInfo->pc,
(frameInfo->next != (struct frame_info *) NULL &&
!frameInfo->next->signal_handler_caller &&
!frame_in_dummy (frameInfo->next)));
if (symtabAndLine.symtab && symtabAndLine.symtab->filename)
tui_set_locator_info (symtabAndLine.symtab->filename,
tui_get_function_from_frame (frameInfo),
symtabAndLine.line,
frameInfo->pc,
element);
else
tui_set_locator_info ((char *) NULL,
tui_get_function_from_frame (frameInfo),
0,
frameInfo->pc,
element);
return;
} /* tuiUpdateLocatorInfoFromFrame */
/* Function to set the content of the locator. */
static void
tuiSetLocatorContent (struct frame_info *frameInfo)
{
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
TuiWinElementPtr element;
struct symtab_and_line symtabAndLine;
/* Allocate the element if necessary */
if (locator->contentSize <= 0)
{
TuiWinContent contentPtr;
if ((locator->content = (OpaquePtr) allocContent (1, locator->type)) == (OpaquePtr) NULL)
error ("Unable to Allocate Memory to Display Location.");
locator->contentSize = 1;
}
if (frameInfo != (struct frame_info *) NULL)
tuiUpdateLocatorInfoFromFrame (frameInfo,
&((TuiWinElementPtr) locator->content[0])->whichElement.locator);
else
tui_set_locator_info ((char *) NULL,
(char *) NULL,
0,
(CORE_ADDR) 0,
&((TuiWinElementPtr) locator->content[0])->whichElement.locator);
return;
} /* tuiSetLocatorContent */
/*
** tuiShowFrameInfo().
** Function to print the frame inforrmation for the TUI.
*/
void void
tuiShowFrameInfo (struct frame_info *fi) tuiShowFrameInfo (struct frame_info *fi)
{ {
@ -247,20 +192,24 @@ tuiShowFrameInfo (struct frame_info *fi)
if (fi) if (fi)
{ {
register int startLine, i; register int startLine, i;
register struct symtab *s;
CORE_ADDR low; CORE_ADDR low;
TuiGenWinInfoPtr locator = locatorWinInfoPtr (); TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
int sourceAlreadyDisplayed; int sourceAlreadyDisplayed;
struct symtab_and_line sal;
sal = find_pc_line (fi->pc,
(fi->next != (struct frame_info *) NULL &&
!fi->next->signal_handler_caller &&
!frame_in_dummy (fi->next)));
s = find_pc_symtab (fi->pc); sourceAlreadyDisplayed = sal.symtab != 0
if (s == 0) && tuiSourceIsDisplayed (sal.symtab->filename);
return; tui_set_locator_info (sal.symtab == 0 ? "??" : sal.symtab->filename,
tui_get_function_from_frame (fi),
startLine = 0; sal.line,
sourceAlreadyDisplayed = tuiSourceIsDisplayed (s->filename); fi->pc);
tuiSetLocatorContent (fi);
tuiShowLocatorContent (); tuiShowLocatorContent ();
startLine = 0;
for (i = 0; i < (sourceWindows ())->count; i++) for (i = 0; i < (sourceWindows ())->count; i++)
{ {
TuiWhichElement *item; TuiWhichElement *item;
@ -288,7 +237,7 @@ tuiShowFrameInfo (struct frame_info *fi)
l.lineNo = startLine; l.lineNo = startLine;
if (!(sourceAlreadyDisplayed if (!(sourceAlreadyDisplayed
&& tuiLineIsDisplayed (item->locator.lineNo, winInfo, TRUE))) && tuiLineIsDisplayed (item->locator.lineNo, winInfo, TRUE)))
tuiUpdateSourceWindow (winInfo, s, l, TRUE); tuiUpdateSourceWindow (winInfo, sal.symtab, l, TRUE);
else else
{ {
l.lineNo = item->locator.lineNo; l.lineNo = item->locator.lineNo;
@ -302,7 +251,7 @@ tuiShowFrameInfo (struct frame_info *fi)
TuiLineOrAddress a; TuiLineOrAddress a;
a.addr = low; a.addr = low;
if (!tuiAddrIsDisplayed (item->locator.addr, winInfo, TRUE)) if (!tuiAddrIsDisplayed (item->locator.addr, winInfo, TRUE))
tuiUpdateSourceWindow (winInfo, s, a, TRUE); tuiUpdateSourceWindow (winInfo, sal.symtab, a, TRUE);
else else
{ {
a.addr = item->locator.addr; a.addr = item->locator.addr;
@ -315,7 +264,7 @@ tuiShowFrameInfo (struct frame_info *fi)
} }
else else
{ {
tuiSetLocatorContent (fi); tui_set_locator_info (NULL, NULL, 0, (CORE_ADDR) 0);
tuiShowLocatorContent (); tuiShowLocatorContent ();
for (i = 0; i < (sourceWindows ())->count; i++) for (i = 0; i < (sourceWindows ())->count; i++)
{ {
@ -324,9 +273,7 @@ tuiShowFrameInfo (struct frame_info *fi)
tuiUpdateExecInfo (winInfo); tuiUpdateExecInfo (winInfo);
} }
} }
}
return;
} /* tuiShowFrameInfo */
/* Function to initialize gdb commands, for tui window stack manipulation. */ /* Function to initialize gdb commands, for tui window stack manipulation. */
void void