summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog16
-rw-r--r--gdb/breakpoint.c3
-rw-r--r--gdb/mips-nat.c2
-rw-r--r--gdb/mips-tdep.c22
-rw-r--r--gdb/mipsread.c7
5 files changed, 40 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c3f520dc181..302590330f9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,19 @@
+Sun Mar 28 11:24:37 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * breakpoint.c (breakpoint_re_set_one): Fix storage leak.
+ * breakpoint.c (enable_breakpoint): Don't enable watchpoint if it
+ went out of scope.
+ * exec.c (exec_close): Fix storage leak.
+ * exec.c (exec_file_command): Make sure that bfd doesn't realign the
+ output sections when patching an executable.
+ * mips-nat.c (store_inferior_registers): Use REGISTER_PTRACE_ADDR
+ when writing all registers.
+ * mips-tdep.c (mips_push_dummy_frame): Save floating point registers
+ at the right offset in the dummy frame.
+ * mipsread.c (psymtab_to_symtab_1): Do not complain for stProc,
+ stStaticProc and stEnd symbols as they are generated by gcc-2.x.
+ * mipsread.c (mipscoff_new_init): Initialize stabsread and buildsym.
+
Fri Mar 26 15:25:05 1993 John Gilmore (gnu@cygnus.com)
* Makefile.in (TARFILES): Avoid trailing backslash.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index b9c11d0fe2f..c907f77131d 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -2220,6 +2220,8 @@ breakpoint_re_set_one (bint)
if (b->cond_string != NULL)
{
s = b->cond_string;
+ if (b->cond)
+ free ((PTR)b->cond);
b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
}
@@ -2408,6 +2410,7 @@ enable_breakpoint (bpt)
printf_filtered ("\
Cannot enable watchpoint %d because the block in which its expression\n\
is valid is not currently in scope.\n", bpt->number);
+ bpt->enable = disabled;
return;
}
diff --git a/gdb/mips-nat.c b/gdb/mips-nat.c
index d7c28b54874..b585850e91f 100644
--- a/gdb/mips-nat.c
+++ b/gdb/mips-nat.c
@@ -125,7 +125,7 @@ store_inferior_registers (regno)
|| regno == FCRIR_REGNUM || regno == FP_REGNUM
|| (regno >= FIRST_EMBED_REGNUM && regno <= LAST_EMBED_REGNUM))
continue;
- regaddr = register_addr (regno, 1);
+ regaddr = REGISTER_PTRACE_ADDR (regno);
errno = 0;
ptrace (6, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
read_register (regno));
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index b21d269b98e..d68fbc29b8b 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -502,8 +502,8 @@ mips_push_dummy_frame()
write_memory (save_address, (char *)&buffer, sizeof(REGISTER_TYPE));
save_address -= 4;
}
- /* save floating-points registers */
- save_address = sp + PROC_FREG_OFFSET(proc_desc);
+ /* save floating-points registers starting with high order word */
+ save_address = sp + PROC_FREG_OFFSET(proc_desc) + 4;
for (ireg = 32; --ireg >= 0; )
if (PROC_FREG_MASK(proc_desc) & (1 << ireg))
{
@@ -713,9 +713,10 @@ isa_NAN(p, len)
else return 1;
}
-/* To skip prologues, I use this predicate. Returns either PC
- itself if the code at PC does not look like a function prologue,
- PC+4 if it does (our caller does not need anything more fancy). */
+/* To skip prologues, I use this predicate. Returns either PC
+ itself if the code at PC does not look like a function prologue;
+ otherwise returns an address that (if we're lucky) follows
+ the prologue. */
CORE_ADDR
mips_skip_prologue(pc)
@@ -725,6 +726,7 @@ mips_skip_prologue(pc)
struct block *b;
unsigned long inst;
int offset;
+ int seen_sp_adjust = 0;
/* For -g modules and most functions anyways the
first instruction adjusts the stack.
@@ -733,10 +735,14 @@ mips_skip_prologue(pc)
for (offset = 0; offset < 100; offset += 4) {
inst = read_memory_integer(pc + offset, 4);
if ((inst & 0xffff0000) == 0x27bd0000) /* addiu $sp,$sp,offset */
- return pc + offset + 4;
- if ((inst & 0xFFE00000) != 0xAFA00000) /* sw reg,n($sp) */
- break;
+ seen_sp_adjust = 1;
+ else if ((inst & 0xFFE00000) == 0xAFA00000) /* sw reg,n($sp) */
+ continue;
+ else
+ break;
}
+ if (seen_sp_adjust)
+ return pc + offset;
/* Well, it looks like a frameless. Let's make sure.
Note that we are not called on the current PC,
diff --git a/gdb/mipsread.c b/gdb/mipsread.c
index 4577339df76..b6523e18f26 100644
--- a/gdb/mipsread.c
+++ b/gdb/mipsread.c
@@ -330,6 +330,8 @@ static void
mipscoff_new_init (ignore)
struct objfile *ignore;
{
+ stabsread_new_init ();
+ buildsym_new_init ();
}
static void
@@ -2459,10 +2461,13 @@ psymtab_to_symtab_1 (pst, filename)
/* Handle encoded stab line number. */
record_line (current_subfile, sh.index, valu);
}
+ else if (sh.st == stProc || sh.st == stStaticProc || sh.st == stEnd)
+ /* These are generated by gcc-2.x, do not complain */
+ ;
else
complain (&stab_unknown_complaint, name);
}
- st = end_symtab (pst->texthigh, 0, 0, pst->objfile);
+ st = end_symtab (pst->texthigh, 0, 0, pst->objfile, SECT_OFF_TEXT);
end_stabs ();
/* Sort the symbol table now, we are done adding symbols to it.