diff options
-rw-r--r-- | gdb/ChangeLog | 16 | ||||
-rw-r--r-- | gdb/breakpoint.c | 3 | ||||
-rw-r--r-- | gdb/mips-nat.c | 2 | ||||
-rw-r--r-- | gdb/mips-tdep.c | 22 | ||||
-rw-r--r-- | gdb/mipsread.c | 7 |
5 files changed, 40 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c3f520d..3025903 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 b9c11d0..c907f77 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 d7c28b5..b585850 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 b21d269..d68fbc29 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 4577339..b6523e1 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. |