aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>1997-09-23 07:10:51 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>1997-09-23 07:10:51 +0000
commit0c6c5eebf4db500b9317d3b499754dca8869856b (patch)
tree11b995b9ca85e2bebc3a86a3533954a2719f6342
parent4141b1c63d062d782ed1f827d03dd1925ed6484c (diff)
downloadgdb-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/ChangeLog9
-rw-r--r--gdb/rs6000-tdep.c18
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 */
{