* mips-tdep.c (mips_push_arguments): Tweak alignment of register
authorPeter Schauer <Peter.Schauer@mytum.de>
Tue, 23 Sep 1997 07:10:51 +0000 (07:10 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Tue, 23 Sep 1997 07:10:51 +0000 (07:10 +0000)
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.

gdb/ChangeLog
gdb/rs6000-tdep.c

index 90612fa65d5b2abdd7b9096d5034c7d5683db4ca..dd4118bf3ac87555a84aa99f3c87e0fe908c5fc5 100644 (file)
@@ -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:
index 39d7ff4e25480ad605b1eb094dc11bc64c4cb08a..90893c01347713e52a43974aaac247bf1f20c36f 100644 (file)
@@ -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 */
          {