Fix -Wuh and -Wnhu options so that they work.
[deliverable/binutils-gdb.git] / gdb / m68k-tdep.c
index d597efa0ec7eb056d30c2f15f654b0112037036a..769ffe80b50934cf71180ecf4afecf01f00403bb 100644 (file)
@@ -23,8 +23,127 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "gdbcore.h"
 #include "value.h"
 #include "gdb_string.h"
+#include "inferior.h"
 
 \f
+/* The only reason this is here is the tm-altos.h reference below.  It
+   was moved back here from tm-m68k.h.  FIXME? */
+
+extern CORE_ADDR
+altos_skip_prologue (pc)
+     CORE_ADDR pc;
+{
+  register int op = read_memory_integer (pc, 2);
+  if (op == 0047126)
+    pc += 4;   /* Skip link #word */
+  else if (op == 0044016)
+    pc += 6;   /* Skip link #long */
+  /* Not sure why branches are here.  */
+  /* From tm-isi.h, tm-altos.h */
+  else if (op == 0060000)
+    pc += 4;   /* Skip bra #word */
+  else if (op == 00600377)
+    pc += 6;   /* skip bra #long */
+  else if ((op & 0177400) == 0060000)
+    pc += 2;   /* skip bra #char */
+  return pc;
+}
+
+/* The only reason this is here is the tm-isi.h reference below.  It
+   was moved back here from tm-m68k.h.  FIXME? */
+
+extern CORE_ADDR
+isi_skip_prologue (pc)
+     CORE_ADDR pc;
+{
+  register int op = read_memory_integer (pc, 2);
+  if (op == 0047126)
+    pc += 4;   /* Skip link #word */
+  else if (op == 0044016)
+    pc += 6;   /* Skip link #long */
+  /* Not sure why branches are here.  */
+  /* From tm-isi.h, tm-altos.h */
+  else if (op == 0060000)
+    pc += 4;   /* Skip bra #word */
+  else if (op == 00600377)
+    pc += 6;   /* skip bra #long */
+  else if ((op & 0177400) == 0060000)
+    pc += 2;   /* skip bra #char */
+  return pc;
+}
+
+/* Return number of args passed to a frame.
+   Can return -1, meaning no way to tell.  */
+
+int
+isi_frame_num_args (fi)
+     struct frame_info *fi;
+{
+  int val;
+  CORE_ADDR pc = FRAME_SAVED_PC (fi);
+  int insn = 0177777 & read_memory_integer (pc, 2);
+  val = 0;
+  if (insn == 0047757 || insn == 0157374)  /* lea W(sp),sp or addaw #W,sp */
+    val = read_memory_integer (pc + 2, 2);
+  else if ((insn & 0170777) == 0050217 /* addql #N, sp */
+          || (insn & 0170777) == 0050117)  /* addqw */
+    {
+      val = (insn >> 9) & 7;
+      if (val == 0)
+       val = 8;
+    }
+  else if (insn == 0157774) /* addal #WW, sp */
+    val = read_memory_integer (pc + 2, 4);
+  val >>= 2;
+  return val;
+}
+
+int
+delta68_frame_num_args (fi)
+     struct frame_info *fi;
+{
+  int val;
+  CORE_ADDR pc = FRAME_SAVED_PC (fi);
+  int insn = 0177777 & read_memory_integer (pc, 2);
+  val = 0;
+  if (insn == 0047757 || insn == 0157374)  /* lea W(sp),sp or addaw #W,sp */
+    val = read_memory_integer (pc + 2, 2);
+  else if ((insn & 0170777) == 0050217 /* addql #N, sp */
+          || (insn & 0170777) == 0050117)  /* addqw */
+    {
+      val = (insn >> 9) & 7;
+      if (val == 0)
+       val = 8;
+    }
+  else if (insn == 0157774) /* addal #WW, sp */
+    val = read_memory_integer (pc + 2, 4);
+  val >>= 2;
+  return val;
+}
+
+int
+news_frame_num_args (fi)
+     struct frame_info *fi;
+{
+  int val;
+  CORE_ADDR pc = FRAME_SAVED_PC (fi);
+  int insn = 0177777 & read_memory_integer (pc, 2);
+  val = 0;
+  if (insn == 0047757 || insn == 0157374)  /* lea W(sp),sp or addaw #W,sp */
+    val = read_memory_integer (pc + 2, 2);
+  else if ((insn & 0170777) == 0050217 /* addql #N, sp */
+          || (insn & 0170777) == 0050117)  /* addqw */
+    {
+      val = (insn >> 9) & 7;
+      if (val == 0)
+       val = 8;
+    }
+  else if (insn == 0157774) /* addal #WW, sp */
+    val = read_memory_integer (pc + 2, 4);
+  val >>= 2;
+  return val;
+}
+
 /* Push an empty stack frame, to record the current PC, etc.  */
 
 void
@@ -372,7 +491,6 @@ int regno;
 {
   register int regi;
   register greg_t *regp = (greg_t *) gregsetp;
-  extern char registers[];
 
   for (regi = 0 ; regi < R_PC ; regi++)
     {
@@ -427,7 +545,6 @@ int regno;
   int regi;
   char *to;
   char *from;
-  extern char registers[];
 
   for (regi = FP0_REGNUM ; regi < FPC_REGNUM ; regi++)
     {
This page took 0.025118 seconds and 4 git commands to generate.