diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 1997-09-23 07:10:51 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 1997-09-23 07:10:51 +0000 |
commit | 0c6c5eebf4db500b9317d3b499754dca8869856b (patch) | |
tree | 11b995b9ca85e2bebc3a86a3533954a2719f6342 | |
parent | 4141b1c63d062d782ed1f827d03dd1925ed6484c (diff) | |
download | gdb-0c6c5eebf4db500b9317d3b499754dca8869856b.zip gdb-0c6c5eebf4db500b9317d3b499754dca8869856b.tar.gz gdb-0c6c5eebf4db500b9317d3b499754dca8869856b.tar.bz2 |
* mips-tdep.c (mips_push_arguments): Tweak alignment of register
value if the remaining length of a non-integral argument is smaller
than the register size for big-endian non-EABI mode.
* rs6000-tdep.c (branch_dest): Handle return from signal
handler function via sigreturn kernel call.
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/rs6000-tdep.c | 18 |
2 files changed, 26 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 90612fa..dd4118b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Tue Sep 23 00:08:18 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) + + * mips-tdep.c (mips_push_arguments): Tweak alignment of register + value if the remaining length of a non-integral argument is smaller + than the register size for big-endian non-EABI mode. + + * rs6000-tdep.c (branch_dest): Handle return from signal + handler function via sigreturn kernel call. + Mon Sep 22 15:32:06 1997 Dawn Perchik <dawn@cygnus.com> * stabsread.h, symtab.h, dbxread.c, symtab.c, stabsread.c: diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 39d7ff4..90893c0 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -97,7 +97,23 @@ branch_dest (opcode, instr, pc, safety) ext_op = (instr>>1) & 0x3ff; if (ext_op == 16) /* br conditional register */ - dest = read_register (LR_REGNUM) & ~3; + { + dest = read_register (LR_REGNUM) & ~3; + + /* If we are about to return from a signal handler, dest is + something like 0x3c90. The current frame is a signal handler + caller frame, upon completion of the sigreturn system call + execution will return to the saved PC in the frame. */ + if (dest < TEXT_SEGMENT_BASE) + { + struct frame_info *fi; + + fi = get_current_frame (); + if (fi != NULL) + dest = read_memory_integer (fi->frame + SIG_FRAME_PC_OFFSET, + 4); + } + } else if (ext_op == 528) /* br cond to count reg */ { |