[MIPS] Make get_frame_info() more robust
authorFranck Bui-Huu <vagabon.xyz@gmail.com>
Thu, 3 Aug 2006 07:29:20 +0000 (09:29 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 27 Sep 2006 12:37:28 +0000 (13:37 +0100)
Now get_frame_info() wants to detect move sp instruction first. It
assumes that the save ra in the stack instruction can't happen
before allocating frame size space into the stack.

Signed-off-by: Franck Bui-Huu <vagabon.xyz@gmail.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/process.c

index da332d7..309bfa4 100644 (file)
@@ -321,17 +321,15 @@ static int get_frame_info(struct mips_frame_info *info)
 
                if (is_jal_jalr_jr_ins(ip))
                        break;
-               if (is_sp_move_ins(ip)) {
-                       if (info->frame_size)
-                               continue;
-                       info->frame_size = - ip->i_format.simmediate;
+               if (!info->frame_size) {
+                       if (is_sp_move_ins(ip))
+                               info->frame_size = - ip->i_format.simmediate;
+                       continue;
                }
-
-               if (is_ra_save_ins(ip)) {
-                       if (info->pc_offset != -1)
-                               continue;
+               if (info->pc_offset == -1 && is_ra_save_ins(ip)) {
                        info->pc_offset =
                                ip->i_format.simmediate / sizeof(long);
+                       break;
                }
        }
        if (info->frame_size && info->pc_offset >= 0) /* nested */