aboutsummaryrefslogtreecommitdiff
path: root/gdb/tui
diff options
context:
space:
mode:
authorStephane Carrez <stcarrez@nerim.fr>2001-07-20 23:06:48 +0000
committerStephane Carrez <stcarrez@nerim.fr>2001-07-20 23:06:48 +0000
commita4b99e53449d48e54a827a7bd4af282caaed0150 (patch)
treec8a98789c28683a48872862fc923552a27aff423 /gdb/tui
parent19eb139b7243abc4b725c1836ac3810b274e2637 (diff)
downloadgdb-a4b99e53449d48e54a827a7bd4af282caaed0150.zip
gdb-a4b99e53449d48e54a827a7bd4af282caaed0150.tar.gz
gdb-a4b99e53449d48e54a827a7bd4af282caaed0150.tar.bz2
* tuiWin.c (_parseScrollingArgs): Fix uninitialized variable.
(_makeVisibleWithNewHeight): Use TuiLineOrAddress type. * tuiStack.c (tuiShowFrameInfo): Use TuiLineOrAddress type. (tui_vUpdateLocatorFilename): Remove. * tuiStack.h: Update prototypes. * tuiSourceWin.c (tuiAddrIsDisplayed): New function. (tuiLineIsDisplayed): Split for address and line. (tuiUpdateSourceWindow): Use TuiLineOrAddress type. (tuiUpdateSourceWindowAsIs): Likewise. (tuiUpdateSourceWindowsWithAddr): Likewise. (tuiUpdateSourceWindowsWithLine): Likewise. (tuiHorizontalSourceScroll): Likewise. (tuiSetIsExecPointAt): Likewise. (tuiUpdateOnEnd): Likewise. * tuiSourceWin.h: Update prototypes. * tuiSource.c (tuiVerticalSourceScroll): Use TuiLineOrAddress type. (tuiShowSource): Likewise. (tuiVerticalSourceScroll): Likewise. * tuiSource.h (tuiShowSource): Update prototype. * tuiDisassem.c (tuiSetDisassemContent): Use CORE_ADDR for address. (tuiShowDisassem): Use TuiLineOrAddress type. (tuiShowDisassemAndUpdateSource): Likewise. (tuiVerticalDisassemScroll): Likewise. (tuiShowDisassemAsIs): Remove. * tuiDisassem.h (tuiSetDisassemContent): Update prototype. * tuiData.c (initWinInfo): Use CORE_ADDR for address. (clearWinDetail): Likewise. (displayableWinContentOf): Fix address conversion. (tuiNextWin): Fix crash when the window is not yet created. (partialWinByName): Likewise.
Diffstat (limited to 'gdb/tui')
-rw-r--r--gdb/tui/ChangeLog38
-rw-r--r--gdb/tui/tuiData.c24
-rw-r--r--gdb/tui/tuiDisassem.c38
-rw-r--r--gdb/tui/tuiDisassem.h2
-rw-r--r--gdb/tui/tuiSource.c26
-rw-r--r--gdb/tui/tuiSource.h6
-rw-r--r--gdb/tui/tuiSourceWin.c86
-rw-r--r--gdb/tui/tuiSourceWin.h9
-rw-r--r--gdb/tui/tuiStack.c73
-rw-r--r--gdb/tui/tuiStack.h2
-rw-r--r--gdb/tui/tuiWin.c19
11 files changed, 171 insertions, 152 deletions
diff --git a/gdb/tui/ChangeLog b/gdb/tui/ChangeLog
index 179cb26..29ddeb1 100644
--- a/gdb/tui/ChangeLog
+++ b/gdb/tui/ChangeLog
@@ -1,5 +1,43 @@
2001-07-21 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+ * tuiWin.c (_parseScrollingArgs): Fix uninitialized variable.
+ (_makeVisibleWithNewHeight): Use TuiLineOrAddress type.
+
+ * tuiStack.c (tuiShowFrameInfo): Use TuiLineOrAddress type.
+ (tui_vUpdateLocatorFilename): Remove.
+ * tuiStack.h: Update prototypes.
+
+ * tuiSourceWin.c (tuiAddrIsDisplayed): New function.
+ (tuiLineIsDisplayed): Split for address and line.
+ (tuiUpdateSourceWindow): Use TuiLineOrAddress type.
+ (tuiUpdateSourceWindowAsIs): Likewise.
+ (tuiUpdateSourceWindowsWithAddr): Likewise.
+ (tuiUpdateSourceWindowsWithLine): Likewise.
+ (tuiHorizontalSourceScroll): Likewise.
+ (tuiSetIsExecPointAt): Likewise.
+ (tuiUpdateOnEnd): Likewise.
+ * tuiSourceWin.h: Update prototypes.
+
+ * tuiSource.c (tuiVerticalSourceScroll): Use TuiLineOrAddress type.
+ (tuiShowSource): Likewise.
+ (tuiVerticalSourceScroll): Likewise.
+ * tuiSource.h (tuiShowSource): Update prototype.
+
+ * tuiDisassem.c (tuiSetDisassemContent): Use CORE_ADDR for address.
+ (tuiShowDisassem): Use TuiLineOrAddress type.
+ (tuiShowDisassemAndUpdateSource): Likewise.
+ (tuiVerticalDisassemScroll): Likewise.
+ (tuiShowDisassemAsIs): Remove.
+ * tuiDisassem.h (tuiSetDisassemContent): Update prototype.
+
+ * tuiData.c (initWinInfo): Use CORE_ADDR for address.
+ (clearWinDetail): Likewise.
+ (displayableWinContentOf): Fix address conversion.
+ (tuiNextWin): Fix crash when the window is not yet created.
+ (partialWinByName): Likewise.
+
+2001-07-21 Stephane Carrez <Stephane.Carrez@worldnet.fr>
+
* tuiSourceWin.h: Remove unused declarations.
* tuiSourceWin.c (tui_vUpdateSourceWindowsWithAddr): Remove.
(tui_vUpdateSourceWindowsWithLine): Remove.
diff --git a/gdb/tui/tuiData.c b/gdb/tui/tuiData.c
index a4a6511..5194eff 100644
--- a/gdb/tui/tuiData.c
+++ b/gdb/tui/tuiData.c
@@ -22,6 +22,7 @@
#include "defs.h"
#include "tui.h"
#include "tuiData.h"
+#include "tuiGeneralWin.h"
/****************************
** GLOBAL DECLARATIONS
@@ -236,7 +237,7 @@ clearWinDetail (TuiWinInfoPtr winInfo)
{
case SRC_WIN:
case DISASSEM_WIN:
- winInfo->detail.sourceInfo.startLineOrAddr.addr = (Opaque) NULL;
+ winInfo->detail.sourceInfo.startLineOrAddr.addr = 0;
winInfo->detail.sourceInfo.horizontalOffset = 0;
break;
case CMD_WIN:
@@ -484,7 +485,7 @@ tuiNextWin (TuiWinInfoPtr curWin)
type = curWin->generic.type + 1;
while (type != curWin->generic.type && m_winPtrIsNull (nextWin))
{
- if (winList[type]->generic.isVisible)
+ if (winList[type] && winList[type]->generic.isVisible)
nextWin = winList[type];
else
{
@@ -604,9 +605,9 @@ displayableWinContentOf (TuiGenWinInfoPtr winInfo, TuiWinElementPtr elementPtr)
else
strcpy (lineNo, "??");
if (elementPtr != (TuiWinElementPtr) NULL &&
- elementPtr->whichElement.locator.addr > (Opaque) 0)
- sprintf (pc, "0x%x",
- elementPtr->whichElement.locator.addr);
+ elementPtr->whichElement.locator.addr != 0)
+ sprintf (pc, "0x%lx",
+ (long) elementPtr->whichElement.locator.addr);
else
strcpy (pc, "??");
/*
@@ -728,10 +729,13 @@ partialWinByName (char *name)
while (i < MAX_MAJOR_WINDOWS && m_winPtrIsNull (winInfo))
{
- char *curName = winName (&winList[i]->generic);
- if (strlen (name) <= strlen (curName) &&
- strncmp (name, curName, strlen (name)) == 0)
- winInfo = winList[i];
+ if (winList[i] != 0)
+ {
+ char *curName = winName (&winList[i]->generic);
+ if (strlen (name) <= strlen (curName) &&
+ strncmp (name, curName, strlen (name)) == 0)
+ winInfo = winList[i];
+ }
i++;
}
}
@@ -889,7 +893,7 @@ initWinInfo (TuiWinInfoPtr winInfo)
winInfo->detail.sourceInfo.executionInfo = (TuiGenWinInfoPtr) NULL;
winInfo->detail.sourceInfo.hasLocator = FALSE;
winInfo->detail.sourceInfo.horizontalOffset = 0;
- winInfo->detail.sourceInfo.startLineOrAddr.addr = (Opaque) NULL;
+ winInfo->detail.sourceInfo.startLineOrAddr.addr = 0;
break;
case DATA_WIN:
winInfo->detail.dataDisplayInfo.dataContent = (TuiWinContent) NULL;
diff --git a/gdb/tui/tuiDisassem.c b/gdb/tui/tuiDisassem.c
index 4d3b61a..7bdcbf7 100644
--- a/gdb/tui/tuiDisassem.c
+++ b/gdb/tui/tuiDisassem.c
@@ -113,7 +113,7 @@ extern void strcat_address_numeric (CORE_ADDR, int, char *, int);
&(tui_file_get_strbuf (gdb_dis_out)[offset]));
else
element->whichElement.source.line[0] = '\0';
- element->whichElement.source.lineOrAddr.addr = (Opaque) pc;
+ element->whichElement.source.lineOrAddr.addr = pc;
element->whichElement.source.isExecPoint =
(pc == (CORE_ADDR) ((TuiWinElementPtr) locator->content[0])->whichElement.locator.addr);
bp = _hasBreak (pc);
@@ -146,9 +146,11 @@ tuiShowDisassem (CORE_ADDR startAddr)
{
struct symtab *s = find_pc_symtab (startAddr);
TuiWinInfoPtr winWithFocus = tuiWinWithFocus ();
+ TuiLineOrAddress val;
+ val.addr = startAddr;
tuiAddWinToLayout (DISASSEM_WIN);
- tuiUpdateSourceWindow (disassemWin, s, startAddr, FALSE);
+ tuiUpdateSourceWindow (disassemWin, s, val, FALSE);
/*
** if the focus was in the src win, put it in the asm win, if the
** source view isn't split
@@ -172,13 +174,15 @@ tuiShowDisassemAndUpdateSource (CORE_ADDR startAddr)
tuiShowDisassem (startAddr);
if (currentLayout () == SRC_DISASSEM_COMMAND)
{
+ TuiLineOrAddress val;
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
/*
** Update what is in the source window if it is displayed too,
** note that it follows what is in the disassembly window and visa-versa
*/
sal = find_pc_line (startAddr, 0);
- tuiUpdateSourceWindow (srcWin, sal.symtab, sal.line, TRUE);
+ val.lineNo = sal.line;
+ tuiUpdateSourceWindow (srcWin, sal.symtab, val, TRUE);
if (sal.symtab)
{
current_source_symtab = sal.symtab;
@@ -191,28 +195,6 @@ tuiShowDisassemAndUpdateSource (CORE_ADDR startAddr)
return;
} /* tuiShowDisassemAndUpdateSource */
-
-/*
- ** tuiShowDisassemAsIs().
- ** Function to display the disassembly window. This function shows
- ** the disassembly as specified by the horizontal offset.
- */
-void
-tuiShowDisassemAsIs (Opaque addr)
-{
- tuiAddWinToLayout (DISASSEM_WIN);
- tuiUpdateSourceWindowAsIs (disassemWin, (struct symtab *) NULL, addr, FALSE);
- /*
- ** Update what is in the source window if it is displayed too, not that it
- ** follows what is in the disassembly window and visa-versa
- */
- if (currentLayout () == SRC_DISASSEM_COMMAND)
- tuiShowSourceContent (srcWin); /*???? Need to do more? */
-
- return;
-} /* tuiShowDisassem */
-
-
/*
** tuiGetBeginAsmAddress().
*/
@@ -272,6 +254,7 @@ tuiVerticalDisassemScroll (TuiScrollDirection scrollDirection,
register int line = 0;
register CORE_ADDR newLow;
bfd_byte buffer[4];
+ TuiLineOrAddress val;
newLow = pc;
if (scrollDirection == FORWARD_SCROLL)
@@ -281,10 +264,11 @@ tuiVerticalDisassemScroll (TuiScrollDirection scrollDirection,
}
else
{
- for (; newLow >= (Opaque) 0 && line < numToScroll; line++)
+ for (; newLow != 0 && line < numToScroll; line++)
newLow -= sizeof (bfd_getb32 (buffer));
}
- tuiUpdateSourceWindowAsIs (disassemWin, s, newLow, FALSE);
+ val.addr = newLow;
+ tuiUpdateSourceWindowAsIs (disassemWin, s, val, FALSE);
}
}
diff --git a/gdb/tui/tuiDisassem.h b/gdb/tui/tuiDisassem.h
index d977fab..f0aabdf 100644
--- a/gdb/tui/tuiDisassem.h
+++ b/gdb/tui/tuiDisassem.h
@@ -33,7 +33,7 @@
******************************************/
extern TuiStatus tuiSetDisassemContent (struct symtab *, CORE_ADDR);
extern void tuiShowDisassem (CORE_ADDR);
-extern void tuiShowDisassemAndUpdateSource (Opaque);
+extern void tuiShowDisassemAndUpdateSource (CORE_ADDR);
extern void tuiVerticalDisassemScroll (TuiScrollDirection, int);
extern CORE_ADDR tuiGetBeginAsmAddress (void);
diff --git a/gdb/tui/tuiSource.c b/gdb/tui/tuiSource.c
index 2f52fc5..6c1a8fb 100644
--- a/gdb/tui/tuiSource.c
+++ b/gdb/tui/tuiSource.c
@@ -25,6 +25,7 @@
#include "frame.h"
#include "breakpoint.h"
#include "source.h"
+#include "symtab.h"
#include "tui.h"
#include "tuiData.h"
@@ -332,10 +333,10 @@ tuiSetSourceContentNil (TuiWinInfoPtr winInfo, char *warning_string)
** initializes the horizontal scroll to 0.
*/
void
-tuiShowSource (struct symtab *s, Opaque line, int noerror)
+tuiShowSource (struct symtab *s, TuiLineOrAddress line, int noerror)
{
srcWin->detail.sourceInfo.horizontalOffset = 0;
- m_tuiShowSourceAsIs (s, line, noerror);
+ tuiUpdateSourceWindowAsIs(srcWin, s, line, noerror);
return;
} /* tuiShowSource */
@@ -359,12 +360,12 @@ tuiSourceIsDisplayed (char *fname)
** Scroll the source forward or backward vertically
*/
void
-tuiVerticalSourceScroll (TuiScrollDirection scrollDirection, int numToScroll)
+tuiVerticalSourceScroll (TuiScrollDirection scrollDirection,
+ int numToScroll)
{
if (srcWin->generic.content != (OpaquePtr) NULL)
{
- int line;
- Opaque addr;
+ TuiLineOrAddress l;
struct symtab *s;
TuiWinContent content = (TuiWinContent) srcWin->generic.content;
@@ -375,21 +376,22 @@ tuiVerticalSourceScroll (TuiScrollDirection scrollDirection, int numToScroll)
if (scrollDirection == FORWARD_SCROLL)
{
- line = content[0]->whichElement.source.lineOrAddr.lineNo +
+ l.lineNo = content[0]->whichElement.source.lineOrAddr.lineNo +
numToScroll;
- if (line > s->nlines)
+ if (l.lineNo > s->nlines)
/*line = s->nlines - winInfo->generic.contentSize + 1; */
/*elz: fix for dts 23398 */
- line = content[0]->whichElement.source.lineOrAddr.lineNo;
+ l.lineNo = content[0]->whichElement.source.lineOrAddr.lineNo;
}
else
{
- line = content[0]->whichElement.source.lineOrAddr.lineNo -
+ l.lineNo = content[0]->whichElement.source.lineOrAddr.lineNo -
numToScroll;
- if (line <= 0)
- line = 1;
+ if (l.lineNo <= 0)
+ l.lineNo = 1;
}
- tuiUpdateSourceWindowAsIs (srcWin, s, (Opaque) line, FALSE);
+ if (identify_source_line (s, l.lineNo, 0, -1) == 1)
+ tuiUpdateSourceWindowAsIs (srcWin, s, l, FALSE);
}
return;
diff --git a/gdb/tui/tuiSource.h b/gdb/tui/tuiSource.h
index c19e017..2c04988 100644
--- a/gdb/tui/tuiSource.h
+++ b/gdb/tui/tuiSource.h
@@ -23,13 +23,9 @@
#define _TUI_SOURCE_H
#include "defs.h"
-#if 0
-#include "symtab.h"
-#include "breakpoint.h"
-#endif
extern TuiStatus tuiSetSourceContent (struct symtab *, int, int);
-extern void tuiShowSource (struct symtab *, Opaque, int);
+extern void tuiShowSource (struct symtab *, TuiLineOrAddress, int);
extern void tuiShowSourceAsIs (struct symtab *, Opaque, int);
extern int tuiSourceIsDisplayed (char *);
extern void tuiVerticalSourceScroll (TuiScrollDirection, int);
diff --git a/gdb/tui/tuiSourceWin.c b/gdb/tui/tuiSourceWin.c
index 9098aaf..b79404d 100644
--- a/gdb/tui/tuiSourceWin.c
+++ b/gdb/tui/tuiSourceWin.c
@@ -119,7 +119,7 @@ tuiDisplayMainFunction (void)
*/
void
tuiUpdateSourceWindow (TuiWinInfoPtr winInfo, struct symtab *s,
- Opaque lineOrAddr, int noerror)
+ TuiLineOrAddress lineOrAddr, int noerror)
{
winInfo->detail.sourceInfo.horizontalOffset = 0;
tuiUpdateSourceWindowAsIs (winInfo, s, lineOrAddr, noerror);
@@ -135,14 +135,14 @@ tuiUpdateSourceWindow (TuiWinInfoPtr winInfo, struct symtab *s,
*/
void
tuiUpdateSourceWindowAsIs (TuiWinInfoPtr winInfo, struct symtab *s,
- Opaque lineOrAddr, int noerror)
+ TuiLineOrAddress lineOrAddr, int noerror)
{
TuiStatus ret;
if (winInfo->generic.type == SRC_WIN)
- ret = tuiSetSourceContent (s, (int) lineOrAddr, noerror);
+ ret = tuiSetSourceContent (s, lineOrAddr.lineNo, noerror);
else
- ret = tuiSetDisassemContent (s, (Opaque) lineOrAddr);
+ ret = tuiSetDisassemContent (s, lineOrAddr.addr);
if (ret == TUI_FAILURE)
{
@@ -156,7 +156,7 @@ tuiUpdateSourceWindowAsIs (TuiWinInfoPtr winInfo, struct symtab *s,
tuiUpdateExecInfo (winInfo);
if (winInfo->generic.type == SRC_WIN)
{
- current_source_line = (int) lineOrAddr +
+ current_source_line = lineOrAddr.lineNo +
(winInfo->generic.contentSize - 2);
current_source_symtab = s;
/*
@@ -185,7 +185,8 @@ tuiUpdateSourceWindowsWithAddr (CORE_ADDR addr)
if (addr != 0)
{
struct symtab_and_line sal;
-
+ TuiLineOrAddress l;
+
switch (currentLayout ())
{
case DISASSEM_COMMAND:
@@ -197,7 +198,8 @@ tuiUpdateSourceWindowsWithAddr (CORE_ADDR addr)
break;
default:
sal = find_pc_line (addr, 0);
- tuiShowSource (sal.symtab, sal.line, FALSE);
+ l.lineNo = sal.line;
+ tuiShowSource (sal.symtab, l, FALSE);
break;
}
}
@@ -226,7 +228,8 @@ void
tuiUpdateSourceWindowsWithLine (struct symtab *s, int line)
{
CORE_ADDR pc;
-
+ TuiLineOrAddress l;
+
switch (currentLayout ())
{
case DISASSEM_COMMAND:
@@ -235,7 +238,8 @@ tuiUpdateSourceWindowsWithLine (struct symtab *s, int line)
tuiUpdateSourceWindowsWithAddr (pc);
break;
default:
- tuiShowSource (s, line, FALSE);
+ l.lineNo = line;
+ tuiShowSource (s, l, FALSE);
if (currentLayout () == SRC_DISASSEM_COMMAND)
{
find_line_pc (s, line, &pc);
@@ -422,12 +426,9 @@ tuiHorizontalSourceScroll (TuiWinInfoPtr winInfo,
tuiUpdateSourceWindowAsIs (
winInfo,
s,
- ((winInfo == srcWin) ?
- (Opaque) ((TuiWinElementPtr)
- winInfo->generic.content[0])->whichElement.source.lineOrAddr.lineNo :
- (Opaque) ((TuiWinElementPtr)
- winInfo->generic.content[0])->whichElement.source.lineOrAddr.addr),
- (int) FALSE);
+ ((TuiWinElementPtr)
+ winInfo->generic.content[0])->whichElement.source.lineOrAddr,
+ FALSE);
}
return;
@@ -439,7 +440,7 @@ tuiHorizontalSourceScroll (TuiWinInfoPtr winInfo,
** Set or clear the hasBreak flag in the line whose line is lineNo.
*/
void
-tuiSetIsExecPointAt (Opaque lineOrAddr, TuiWinInfoPtr winInfo)
+tuiSetIsExecPointAt (TuiLineOrAddress l, TuiWinInfoPtr winInfo)
{
int i;
TuiWinContent content = (TuiWinContent) winInfo->generic.content;
@@ -447,7 +448,7 @@ tuiSetIsExecPointAt (Opaque lineOrAddr, TuiWinInfoPtr winInfo)
i = 0;
while (i < winInfo->generic.contentSize)
{
- if (content[i]->whichElement.source.lineOrAddr.addr == lineOrAddr)
+ if (content[i]->whichElement.source.lineOrAddr.addr == l.addr)
content[i]->whichElement.source.isExecPoint = TRUE;
else
content[i]->whichElement.source.isExecPoint = FALSE;
@@ -457,7 +458,6 @@ tuiSetIsExecPointAt (Opaque lineOrAddr, TuiWinInfoPtr winInfo)
return;
} /* tuiSetIsExecPointAt */
-
/*
** tuiSetHasBreakAt().
** Set or clear the hasBreak flag in the line whose line is lineNo.
@@ -756,9 +756,13 @@ tuiUpdateOnEnd (void)
/* for all the windows (src, asm) */
for (i = 0; i < (sourceWindows ())->count; i++)
{
+ TuiLineOrAddress l;
+
winInfo = (TuiWinInfoPtr) (sourceWindows ())->list[i];
- tuiSetIsExecPointAt ((Opaque) - 1, winInfo); /* the target is'n running */
+ l.addr = -1;
+ l.lineNo = -1;
+ tuiSetIsExecPointAt (l, winInfo); /* the target is'n running */
/* -1 should not match any line number or pc */
tuiSetExecInfoContent (winInfo); /*set winInfo so that > is'n displayed */
tuiShowExecInfoContent (winInfo); /* display the new contents */
@@ -771,7 +775,7 @@ tuiUpdateOnEnd (void)
filename,
(char *) NULL,
0,
- (Opaque) NULL,
+ (CORE_ADDR) 0,
&((TuiWinElementPtr) locator->content[0])->whichElement.locator);
tuiShowLocatorContent ();
@@ -833,7 +837,7 @@ tuiAllocSourceBuffer (TuiWinInfoPtr winInfo)
** in the current source window.
*/
int
-tuiLineIsDisplayed (Opaque lineNoOrAddr, TuiWinInfoPtr winInfo,
+tuiLineIsDisplayed (int line, TuiWinInfoPtr winInfo,
int checkThreshold)
{
int isDisplayed = FALSE;
@@ -846,14 +850,9 @@ tuiLineIsDisplayed (Opaque lineNoOrAddr, TuiWinInfoPtr winInfo,
i = 0;
while (i < winInfo->generic.contentSize - threshold && !isDisplayed)
{
- if (winInfo == srcWin)
- isDisplayed = (((TuiWinElementPtr)
- winInfo->generic.content[i])->whichElement.source.lineOrAddr.lineNo
- == (int) lineNoOrAddr);
- else
- isDisplayed = (((TuiWinElementPtr)
- winInfo->generic.content[i])->whichElement.source.lineOrAddr.addr
- == lineNoOrAddr);
+ isDisplayed = (((TuiWinElementPtr)
+ winInfo->generic.content[i])->whichElement.source.lineOrAddr.lineNo
+ == (int) line);
i++;
}
@@ -861,6 +860,35 @@ tuiLineIsDisplayed (Opaque lineNoOrAddr, TuiWinInfoPtr winInfo,
} /* tuiLineIsDisplayed */
+/*
+ ** tuiLineIsDisplayed().
+ ** Answer whether the a particular line number or address is displayed
+ ** in the current source window.
+ */
+int
+tuiAddrIsDisplayed (CORE_ADDR addr, TuiWinInfoPtr winInfo,
+ int checkThreshold)
+{
+ int isDisplayed = FALSE;
+ int i, threshold;
+
+ if (checkThreshold)
+ threshold = SCROLL_THRESHOLD;
+ else
+ threshold = 0;
+ i = 0;
+ while (i < winInfo->generic.contentSize - threshold && !isDisplayed)
+ {
+ isDisplayed = (((TuiWinElementPtr)
+ winInfo->generic.content[i])->whichElement.source.lineOrAddr.addr
+ == addr);
+ i++;
+ }
+
+ return isDisplayed;
+}
+
+
/*****************************************
** STATIC LOCAL FUNCTIONS **
******************************************/
diff --git a/gdb/tui/tuiSourceWin.h b/gdb/tui/tuiSourceWin.h
index ffde656..ced01f7 100644
--- a/gdb/tui/tuiSourceWin.h
+++ b/gdb/tui/tuiSourceWin.h
@@ -23,9 +23,9 @@
#define _TUI_SOURCEWIN_H
extern void tuiDisplayMainFunction (void);
-extern void tuiUpdateSourceWindow (TuiWinInfoPtr, struct symtab *, Opaque,
+extern void tuiUpdateSourceWindow (TuiWinInfoPtr, struct symtab *, TuiLineOrAddress,
int);
-extern void tuiUpdateSourceWindowAsIs (TuiWinInfoPtr, struct symtab *, Opaque,
+extern void tuiUpdateSourceWindowAsIs (TuiWinInfoPtr, struct symtab *, TuiLineOrAddress,
int);
extern void tuiUpdateSourceWindowsWithAddr (CORE_ADDR);
extern void tuiUpdateSourceWindowsWithLine (struct symtab *, int);
@@ -51,11 +51,12 @@ extern void tuiClearAllExecInfosContent (void);
extern void tuiUpdateExecInfo (TuiWinInfoPtr);
extern void tuiUpdateAllExecInfos (void);
-extern void tuiSetIsExecPointAt (Opaque, TuiWinInfoPtr);
+extern void tuiSetIsExecPointAt (TuiLineOrAddress, TuiWinInfoPtr);
extern void tuiSetHasBreakAt (struct breakpoint *, TuiWinInfoPtr, int);
extern void tuiAllSetHasBreakAt (struct breakpoint *, int);
extern TuiStatus tuiAllocSourceBuffer (TuiWinInfoPtr);
-extern int tuiLineIsDisplayed (Opaque, TuiWinInfoPtr, int);
+extern int tuiLineIsDisplayed (int, TuiWinInfoPtr, int);
+extern int tuiAddrIsDisplayed (CORE_ADDR, TuiWinInfoPtr, int);
/*
diff --git a/gdb/tui/tuiStack.c b/gdb/tui/tuiStack.c
index ce979dd..b3e4931 100644
--- a/gdb/tui/tuiStack.c
+++ b/gdb/tui/tuiStack.c
@@ -164,23 +164,6 @@ tuiUpdateLocatorFilename (char *fileName)
return;
} /* tuiUpdateLocatorFilename */
-
-/*
- ** tui_vUpdateLocatorFilename().
- ** Update only the filename portion of the locator with args in a va_list.
- */
-void
-tui_vUpdateLocatorFilename (va_list args)
-{
- char *fileName;
-
- fileName = va_arg (args, char *);
- tuiUpdateLocatorFilename (fileName);
-
- return;
-} /* tui_vUpdateLocatorFilename */
-
-
/*
** tuiSwitchFilename().
** Update the filename portion of the locator. Clear the other info in locator.
@@ -336,16 +319,19 @@ tuiShowFrameInfo (struct frame_info *fi)
if (s == 0)
return;
+ startLine = 0;
sourceAlreadyDisplayed = tuiSourceIsDisplayed (s->filename);
tuiUpdateLocatorDisplay (fi);
for (i = 0; i < (sourceWindows ())->count; i++)
{
+ TuiWhichElement *item;
winInfo = (TuiWinInfoPtr) (sourceWindows ())->list[i];
+
+ item = &((TuiWinElementPtr) locator->content[0])->whichElement;
if (winInfo == srcWin)
{
- startLine =
- (((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo -
- (winInfo->generic.viewportHeight / 2)) + 1;
+ startLine = (item->locator.lineNo -
+ (winInfo->generic.viewportHeight / 2)) + 1;
if (startLine <= 0)
startLine = 1;
}
@@ -359,26 +345,30 @@ tuiShowFrameInfo (struct frame_info *fi)
if (winInfo == srcWin)
{
- if (!(sourceAlreadyDisplayed && m_tuiLineDisplayedWithinThreshold (
- winInfo,
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo)))
- tuiUpdateSourceWindow (winInfo, s, (Opaque) startLine, TRUE);
+ TuiLineOrAddress l;
+ l.lineNo = startLine;
+ if (!(sourceAlreadyDisplayed
+ && tuiLineIsDisplayed (item->locator.lineNo, winInfo, TRUE)))
+ tuiUpdateSourceWindow (winInfo, s, l, TRUE);
else
- tuiSetIsExecPointAt ((Opaque)
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo,
- winInfo);
+ {
+ l.lineNo = item->locator.lineNo;
+ tuiSetIsExecPointAt (l, winInfo);
+ }
}
else
{
if (winInfo == disassemWin)
{
- if (!m_tuiLineDisplayedWithinThreshold (winInfo,
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.addr))
- tuiUpdateSourceWindow (winInfo, s, (Opaque) low, TRUE);
+ TuiLineOrAddress a;
+ a.addr = low;
+ if (!tuiAddrIsDisplayed (item->locator.addr, winInfo, TRUE))
+ tuiUpdateSourceWindow (winInfo, s, a, TRUE);
else
- tuiSetIsExecPointAt ((Opaque)
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.addr,
- winInfo);
+ {
+ a.addr = item->locator.addr;
+ tuiSetIsExecPointAt (a, winInfo);
+ }
}
}
tuiUpdateExecInfo (winInfo);
@@ -398,23 +388,6 @@ tuiShowFrameInfo (struct frame_info *fi)
return;
} /* tuiShowFrameInfo */
-
-/*
- ** tui_vShowFrameInfo().
- ** Function to print the frame inforrmation for the TUI with args in a va_list.
- */
-void
-tui_vShowFrameInfo (va_list args)
-{
- struct frame_info *fi;
-
- fi = va_arg (args, struct frame_info *);
- tuiShowFrameInfo (fi);
-
- return;
-} /* tui_vShowFrameInfo */
-
-
/*
** _initialize_tuiStack().
** Function to initialize gdb commands, for tui window stack manipulation.
diff --git a/gdb/tui/tuiStack.h b/gdb/tui/tuiStack.h
index 6a987eb..77d5b85 100644
--- a/gdb/tui/tuiStack.h
+++ b/gdb/tui/tuiStack.h
@@ -28,7 +28,6 @@
extern void tuiSetLocatorInfo (char *, char *, int, CORE_ADDR,
TuiLocatorElementPtr);
extern void tuiUpdateLocatorFilename (char *);
-extern void tui_vUpdateLocatorFilename (va_list);
extern void tuiUpdateLocatorInfoFromFrame
(struct frame_info *, TuiLocatorElementPtr);
extern void tuiUpdateLocatorDisplay (struct frame_info *);
@@ -37,7 +36,6 @@ extern void tuiShowLocatorContent (void);
extern void tuiClearLocatorContent (void);
extern void tuiSwitchFilename (char *);
extern void tuiShowFrameInfo (struct frame_info *);
-extern void tui_vShowFrameInfo (va_list);
extern void tuiGetLocatorFilename (TuiGenWinInfoPtr, char **);
diff --git a/gdb/tui/tuiWin.c b/gdb/tui/tuiWin.c
index a0b9bb5..07555e5 100644
--- a/gdb/tui/tuiWin.c
+++ b/gdb/tui/tuiWin.c
@@ -1139,26 +1139,19 @@ _makeVisibleWithNewHeight (TuiWinInfoPtr winInfo)
winInfo->detail.sourceInfo.startLineOrAddr.addr;
freeWinContent (&winInfo->generic);
tuiUpdateSourceWindow (winInfo,
- current_source_symtab,
- ((winInfo->generic.type == SRC_WIN) ?
- (Opaque) lineOrAddr.lineNo :
- lineOrAddr.addr),
- TRUE);
+ current_source_symtab, lineOrAddr, TRUE);
}
else if (selected_frame != (struct frame_info *) NULL)
{
- Opaque line = 0;
+ TuiLineOrAddress line;
extern int current_source_line;
s = find_pc_symtab (selected_frame->pc);
if (winInfo->generic.type == SRC_WIN)
- line = (Opaque) current_source_line;
+ line.lineNo = current_source_line;
else
{
- CORE_ADDR pc;
-
- find_line_pc (s, current_source_line, &pc);
- line = (Opaque) pc;
+ find_line_pc (s, current_source_line, &line.addr);
}
tuiUpdateSourceWindow (winInfo, s, line, TRUE);
}
@@ -1349,7 +1342,9 @@ _parseScrollingArgs (char *arg, TuiWinInfoPtr * winToScroll, int *numToScroll)
if (*bufPtr != (char) 0)
wname = bufPtr;
-
+ else
+ wname = "?";
+
/* Validate the window name */
for (i = 0; i < strlen (wname); i++)
wname[i] = toupper (wname[i]);