aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/i960-pinsn.c8
-rw-r--r--gdb/source.c68
3 files changed, 64 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6eb2743..7b5ce02 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,15 @@
+Fri Nov 6 00:14:38 1992 John Gilmore (gnu@cygnus.com)
+
+ * m68k-stub.c: Remove ansidecl.h and the few uses of it.
+ Stubs should stand alone as much as possible.
+
+ * source.c (show_directories): Avoid printf_filtered length prob
+ pointed out by Jonathan Stone.
+
+ * i960-pinsn.c (MEM_MAX, MEM_SIZ): Set upper limit properly to
+ avoid accesses beyond end of table. Fix by Lee W. Cooprider,
+ <Lee_Cooprider@vos.stratus.com>.
+
Thu Nov 5 17:33:08 1992 Fred Fish (fnf@cygnus.com)
* {ser-bsd.c, ser-termios.c} (serial_close): Pass address of
diff --git a/gdb/i960-pinsn.c b/gdb/i960-pinsn.c
index 4fee194..85dc5bc 100644
--- a/gdb/i960-pinsn.c
+++ b/gdb/i960-pinsn.c
@@ -341,8 +341,12 @@ mem( memaddr, word1, word2, noprint )
* -2: 2 operands, store instruction
*/
static struct tabent *mem_tab = NULL;
- static struct { int opcode; char *name; char numops; } mem_init[] = {
+/* Opcodes of 0x8X, 9X, aX, bX, and cX must be in the table. */
#define MEM_MIN 0x80
+#define MEM_MAX 0xcf
+#define MEM_SIZ ((MEM_MAX-MEM_MIN+1) * sizeof(struct tabent))
+
+ static struct { int opcode; char *name; char numops; } mem_init[] = {
0x80, "ldob", 2,
0x82, "stob", -2,
0x84, "bx", 1,
@@ -363,8 +367,6 @@ mem( memaddr, word1, word2, noprint )
0xc2, "stib", -2,
0xc8, "ldis", 2,
0xca, "stis", -2,
-#define MEM_MAX 0xca
-#define MEM_SIZ ((MEM_MAX-MEM_MIN+1) * sizeof(struct tabent))
0, NULL, 0
};
diff --git a/gdb/source.c b/gdb/source.c
index e59079d..3869e1a 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -200,7 +200,9 @@ show_directories (ignore, from_tty)
char *ignore;
int from_tty;
{
- printf_filtered ("Source directories searched: %s\n", source_path);
+ puts_filtered ("Source directories searched: ");
+ puts_filtered (source_path);
+ puts_filtered ("\n");
}
/* Forget what we learned about line positions in source files,
@@ -608,6 +610,7 @@ find_source_lines (s, desc)
int desc;
{
struct stat st;
+ char c;
register char *data, *p, *end;
int nlines = 0;
int lines_allocated = 1000;
@@ -618,14 +621,35 @@ find_source_lines (s, desc)
line_charpos = (int *) xmmalloc (s -> objfile -> md,
lines_allocated * sizeof (int));
if (fstat (desc, &st) < 0)
- perror_with_name (s->filename);
+ perror_with_name (s->filename);
if (exec_bfd) {
exec_mtime = bfd_get_mtime(exec_bfd);
if (exec_mtime && exec_mtime < st.st_mtime)
- printf_filtered ("Source file is more recent than executable.\n");
+ printf_filtered ("Source file is more recent than executable.\n");
}
+#ifdef LSEEK_NOT_LINEAR
+ /* Have to read it byte by byte to find out where the chars live */
+
+ line_charpos[0] = tell(desc);
+ nlines = 1;
+ while (myread(desc, &c, 1)>0)
+ {
+ if (c == '\n')
+ {
+ if (nlines == lines_allocated)
+ {
+ lines_allocated *= 2;
+ line_charpos =
+ (int *) xmrealloc (s -> objfile -> md, (char *) line_charpos,
+ sizeof (int) * lines_allocated);
+ }
+ line_charpos[nlines++] = tell(desc);
+ }
+ }
+
+#else
/* st_size might be a large type, but we only support source files whose
size fits in an int. FIXME. */
size = (int) st.st_size;
@@ -637,31 +661,33 @@ find_source_lines (s, desc)
data = (char *) alloca (size);
#endif
if (myread (desc, data, size) < 0)
- perror_with_name (s->filename);
+ perror_with_name (s->filename);
end = data + size;
p = data;
line_charpos[0] = 0;
nlines = 1;
while (p != end)
+ {
+ if (*p++ == '\n'
+ /* A newline at the end does not start a new line. */
+ && p != end)
{
- if (*p++ == '\n'
- /* A newline at the end does not start a new line. */
- && p != end)
- {
- if (nlines == lines_allocated)
- {
- lines_allocated *= 2;
- line_charpos =
- (int *) xmrealloc (s -> objfile -> md, (char *) line_charpos,
- sizeof (int) * lines_allocated);
- }
- line_charpos[nlines++] = p - data;
- }
+ if (nlines == lines_allocated)
+ {
+ lines_allocated *= 2;
+ line_charpos =
+ (int *) xmrealloc (s -> objfile -> md, (char *) line_charpos,
+ sizeof (int) * lines_allocated);
+ }
+ line_charpos[nlines++] = p - data;
}
+ }
+#endif
s->nlines = nlines;
s->line_charpos =
- (int *) xmrealloc (s -> objfile -> md, (char *) line_charpos,
- nlines * sizeof (int));
+ (int *) xmrealloc (s -> objfile -> md, (char *) line_charpos,
+ nlines * sizeof (int));
+
}
/* Return the character position of a line LINE in symtab S.
@@ -821,7 +847,7 @@ print_source_lines (s, line, stopline, noerror)
printf_filtered ("%d\t", current_source_line++);
do
{
- if (c < 040 && c != '\t' && c != '\n')
+ if (c < 040 && c != '\t' && c != '\n' && c != '\r')
printf_filtered ("^%c", c + 0100);
else if (c == 0177)
printf_filtered ("^?");
@@ -1293,7 +1319,7 @@ Lines can be specified in these ways:\n\
FILE:FUNCTION, to distinguish among like-named static functions.\n\
*ADDRESS, to list around the line containing that address.\n\
With two args if one is empty it stands for ten lines away from the other arg.");
- add_com_alias ("l", "list", class_files, 0);
+ add_com_alias ("l", "list", class_files, 1);
add_show_from_set
(add_set_cmd ("listsize", class_support, var_uinteger,