* a29k-tdep.c (examine_prologue): Don't worry if the ASGEQ
authorJohn Gilmore <gnu@cygnus>
Tue, 11 Jan 1994 07:45:48 +0000 (07:45 +0000)
committerJohn Gilmore <gnu@cygnus>
Tue, 11 Jan 1994 07:45:48 +0000 (07:45 +0000)
stack overflow check isn't right after the register stack
adjustment instruction.  Metaware R2.3u compiler moves other
things in front of it.  This fix isn't perfect but is what's
running.

gdb/ChangeLog
gdb/a29k-tdep.c

index af90f3ce494bc7d7ba8cc14eb39c7fe39ae0d8b5..1a06726878e7ff7420ed713c73b5cae4afdee54d 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jan 10 23:16:42 1994  John Gilmore  (gnu@cygnus.com)
+
+       * a29k-tdep.c (examine_prologue):  Don't worry if the ASGEQ
+       stack overflow check isn't right after the register stack
+       adjustment instruction.  Metaware R2.3u compiler moves other
+       things in front of it.  This fix isn't perfect but is what's
+       running.
+
 Mon Jan 10 20:08:23 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)
 
        * c-valprint.c (c_val_print): Treat TYPE_CODE_RANGE like TYPE_CODE_INT.
index 88b630ae8e76afe6728f5d947f0416ca6511352a..20e9d53731766cda9147450e5e6ef044679204c0 100644 (file)
@@ -1,5 +1,5 @@
 /* Target-machine dependent code for the AMD 29000
-   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
    Contributed by Cygnus Support.  Written by Jim Kingdon.
 
 This file is part of GDB.
@@ -149,17 +149,18 @@ examine_prologue (pc, rsize, msize, mfp_used)
     }
   p += 4;
 
-  /* Next instruction must be asgeu V_SPILL,gr1,rab.  
+  /* Next instruction ought to be asgeu V_SPILL,gr1,rab.  
    * We don't check the vector number to allow for kernel debugging.  The 
    * kernel will use a different trap number. 
+   * If this insn is missing, we just keep going; Metaware R2.3u compiler
+   * generates prologue that intermixes initializations and puts the asgeu
+   * way down.
    */
   insn = read_memory_integer (p, 4);
-  if ((insn & 0xff00ffff) != (0x5e000100|RAB_HW_REGNUM))
+  if ((insn & 0xff00ffff) == (0x5e000100|RAB_HW_REGNUM))
     {
-      p = pc;
-      goto done;
+      p += 4;
     }
-  p += 4;
 
   /* Next instruction usually sets the frame pointer (lr1) by adding
      <size * 4> from gr1.  However, this can (and high C does) be
@@ -271,6 +272,19 @@ examine_prologue (pc, rsize, msize, mfp_used)
        }
     }
 
+  /* Next instruction might be asgeu V_SPILL,gr1,rab.  
+   * We don't check the vector number to allow for kernel debugging.  The 
+   * kernel will use a different trap number. 
+   * Metaware R2.3u compiler
+   * generates prologue that intermixes initializations and puts the asgeu
+   * way down after everything else.
+   */
+  insn = read_memory_integer (p, 4);
+  if ((insn & 0xff00ffff) == (0x5e000100|RAB_HW_REGNUM))
+    {
+      p += 4;
+    }
+
  done:
   if (msymbol != NULL)
     {