* corelow.c, exec.c, inftarg.c, m3-nat.c, op50-rom.c, procfs.c,
[deliverable/binutils-gdb.git] / gdb / z8k-tdep.c
index bd39d00c2a7a347127b4d9c7dcacd3db38bfb935..dba58cf33f373fb9c3af3b8247f9e7fecec19d68 100644 (file)
@@ -28,7 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "symtab.h"
 #include "gdbcmd.h"
 #include "gdbtypes.h"
-
+#include "dis-asm.h"
 /* Return the saved PC from this frame.
 
    If the frame has a memory copy of SRP_REGNUM, use that.  If not,
@@ -88,50 +88,50 @@ examine_frame (pc, regs, sp)
   int regno;
 
   for (regno = 0; regno < NUM_REGS; regno++)
-   regs->regs[regno] = 0;
+    regs->regs[regno] = 0;
 
   while (IS_PUSHW (w) || IS_PUSHL (w))
-  {
-    /* work out which register is being pushed to where */
-    if (IS_PUSHL (w))
-    {
-      regs->regs[w & 0xf] = offset;
-      regs->regs[(w & 0xf) + 1] = offset + 2;
-      offset += 4;
-    }
-    else
     {
-      regs->regs[w & 0xf] = offset;
-      offset += 2;
+      /* work out which register is being pushed to where */
+      if (IS_PUSHL (w))
+       {
+         regs->regs[w & 0xf] = offset;
+         regs->regs[(w & 0xf) + 1] = offset + 2;
+         offset += 4;
+       }
+      else
+       {
+         regs->regs[w & 0xf] = offset;
+         offset += 2;
+       }
+      pc += 2;
+      w = read_memory_short (pc);
     }
-    pc += 2;
-    w = read_memory_short (pc);
-  }
 
   if (IS_MOVE_FP (w))
-  {
-    /* We know the fp */
+    {
+      /* We know the fp */
 
-  }
+    }
   else if (IS_SUB_SP (w))
-  {
-    /* Subtracting a value from the sp, so were in a function
+    {
+      /* Subtracting a value from the sp, so were in a function
        which needs stack space for locals, but has no fp.  We fake up
        the values as if we had an fp */
-    regs->regs[FP_REGNUM] = sp;
-  }
+      regs->regs[FP_REGNUM] = sp;
+    }
   else
-  {
-    /* This one didn't have an fp, we'll fake it up */
-    regs->regs[SP_REGNUM] = sp;
-  }
+    {
+      /* This one didn't have an fp, we'll fake it up */
+      regs->regs[SP_REGNUM] = sp;
+    }
   /* stack pointer contains address of next frame */
   /*  regs->regs[fp_regnum()] = fp;*/
   regs->regs[SP_REGNUM] = sp;
   return pc;
 }
 
-CORE_ADDR 
+CORE_ADDR
 z8k_skip_prologue (start_pc)
      CORE_ADDR start_pc;
 {
@@ -140,7 +140,7 @@ z8k_skip_prologue (start_pc)
   return examine_frame (start_pc, &dummy, 0);
 }
 
-CORE_ADDR 
+CORE_ADDR
 addr_bits_remove (x)
      CORE_ADDR x;
 {
@@ -180,7 +180,7 @@ init_frame_pc ()
    ways in the stack frame.  sp is even more special:
    the address we return for it IS the sp for the next frame.  */
 
-void 
+void
 get_frame_saved_regs (frame_info, frame_saved_regs)
      struct frame_info *frame_info;
      struct frame_saved_regs *frame_saved_regs;
@@ -189,7 +189,7 @@ get_frame_saved_regs (frame_info, frame_saved_regs)
   CORE_ADDR pc;
   int w;
 
-  bzero (frame_saved_regs, sizeof (*frame_saved_regs));
+  memset (frame_saved_regs, '\0', sizeof (*frame_saved_regs));
   pc = get_pc_function_start (frame_info->pc);
 
 /* wander down the instruction stream */
@@ -197,27 +197,28 @@ get_frame_saved_regs (frame_info, frame_saved_regs)
 
 }
 
-void 
+void
 z8k_push_dummy_frame ()
 {
   abort ();
 }
 
-int 
+int
 print_insn (memaddr, stream)
      CORE_ADDR memaddr;
-     FILE *stream;
+     GDB_FILE *stream;
 {
-  char temp[20];
+  disassemble_info info;
+
+  GDB_INIT_DISASSEMBLE_INFO(info, stream);
 
-  read_memory (memaddr, temp, 20);
   if (BIG)
     {
-      return print_insn_z8001 (memaddr, temp, stream);
+      return print_insn_z8001 ((bfd_vma) memaddr, &info);
     }
   else
     {
-      return print_insn_z8002 (memaddr, temp, stream);
+      return print_insn_z8002 ((bfd_vma) memaddr, &info);
     }
 }
 
@@ -232,16 +233,15 @@ NEXT_PROLOGUE_INSN (addr, lim, pword1)
      CORE_ADDR lim;
      short *pword1;
 {
+  char buf[2];
   if (addr < lim + 8)
     {
-      read_memory (addr, pword1, sizeof (*pword1));
-      SWAP_TARGET_AND_HOST (pword1, sizeof (short));
+      read_memory (addr, buf, 2);
+      *pword1 = extract_signed_integer (buf, 2);
 
       return addr + 2;
     }
-
   return 0;
-
 }
 
 /* Put here the code to store, into a struct frame_saved_regs,
@@ -296,44 +296,77 @@ frame_find_saved_regs (fip, fsrp)
 
 }
 
+int
+saved_pc_after_call ()
+{
+  return addr_bits_remove 
+    (read_memory_integer (read_register (SP_REGNUM), PTR_SIZE));
+}
+
+
+extract_return_value(type, regbuf, valbuf)
+struct type *type;
+char *regbuf;
+char *valbuf;
+{
+  int b;
+  int len = TYPE_LENGTH(type);
+
+  for (b = 0; b < len; b += 2) {
+    int todo = len - b;
+    if (todo > 2)
+      todo = 2;
+    memcpy(valbuf + b, regbuf + b, todo);
+  }
+}
+
 void
-addr_bits_set ()
+write_return_value(type, valbuf)
+struct type *type;
+char *valbuf;
 {
-  abort ();
+  int reg;
+  int len;
+  for (len = 0; len <  TYPE_LENGTH(type); len += 2)
+    {
+      write_register_bytes(REGISTER_BYTE(len /2  + 2), valbuf + len, 2);
+    }
 }
 
-int
-saved_pc_after_call ()
+void
+store_struct_return(addr, sp)
+CORE_ADDR addr;
+CORE_ADDR sp;
 {
-  return addr_bits_remove (read_memory_integer (read_register (SP_REGNUM), PTR_SIZE));
+  write_register(2, addr);
 }
 
+
 void
 print_register_hook (regno)
      int regno;
 {
-
   if ((regno & 1) == 0 && regno < 16)
     {
       unsigned short l[2];
 
       read_relative_register_raw_bytes (regno, (char *) (l + 0));
       read_relative_register_raw_bytes (regno + 1, (char *) (l + 1));
-      printf ("\t");
-      printf ("%04x%04x", l[0], l[1]);
+      printf_unfiltered ("\t");
+      printf_unfiltered ("%04x%04x", l[0], l[1]);
     }
 
   if ((regno & 3) == 0 && regno < 16)
     {
       unsigned short l[4];
 
-      read_relative_register_raw_bytes (regno, l + 0);
-      read_relative_register_raw_bytes (regno + 1, l + 1);
-      read_relative_register_raw_bytes (regno + 2, l + 2);
-      read_relative_register_raw_bytes (regno + 3, l + 3);
+      read_relative_register_raw_bytes (regno, (char *) (l + 0));
+      read_relative_register_raw_bytes (regno + 1, (char *) (l + 1));
+      read_relative_register_raw_bytes (regno + 2, (char *) (l + 2));
+      read_relative_register_raw_bytes (regno + 3, (char *) (l + 3));
 
-      printf ("\t");
-      printf ("%04x%04x%04x%04x", l[0], l[1], l[2], l[3]);
+      printf_unfiltered ("\t");
+      printf_unfiltered ("%04x%04x%04x%04x", l[0], l[1], l[2], l[3]);
     }
   if (regno == 15)
     {
@@ -342,45 +375,23 @@ print_register_hook (regno)
 
       read_relative_register_raw_bytes (regno, (char *) (&rval));
 
-      printf ("\n");
+      printf_unfiltered ("\n");
       for (i = 0; i < 10; i += 2)
        {
-         printf ("(sp+%d=%04x)", i, read_memory_short (rval + i));
+         printf_unfiltered ("(sp+%d=%04x)", i, read_memory_short (rval + i));
        }
     }
 
 }
 
 void
-register_convert_to_virtual (regnum, from, to)
-     unsigned char *from;
-     unsigned char *to;
-{
-  to[0] = from[0];
-  to[1] = from[1];
-  to[2] = from[2];
-  to[3] = from[3];
-}
-
-void
-register_convert_to_raw (regnum, to, from)
-     char *to;
-     char *from;
-{
-  to[0] = from[0];
-  to[1] = from[1];
-  to[2] = from[2];
-  to[3] = from[3];
-}
-
-void 
 z8k_pop_frame ()
 {
 }
 
 struct cmd_list_element *setmemorylist;
 
-void 
+void
 z8k_set_pointer_size (newsize)
      int newsize;
 {
@@ -388,7 +399,7 @@ z8k_set_pointer_size (newsize)
 
   if (oldsize != newsize)
     {
-      printf ("pointer size set to %d bits\n", newsize);
+      printf_unfiltered ("pointer size set to %d bits\n", newsize);
       oldsize = newsize;
       if (newsize == 32)
        {
@@ -407,7 +418,7 @@ segmented_command (args, from_tty)
      char *args;
      int from_tty;
 {
-  z8k_set_pointer_size (16);
+  z8k_set_pointer_size (32);
 }
 
 static void
@@ -419,15 +430,17 @@ unsegmented_command (args, from_tty)
 
 }
 
+
 static void
 set_memory (args, from_tty)
      char *args;
      int from_tty;
 {
-  printf ("\"set memory\" must be followed by the name of a memory subcommand.\n");
-  help_list (setmemorylist, "set memory ", -1, stdout);
+  printf_unfiltered ("\"set memory\" must be followed by the name of a memory subcommand.\n");
+  help_list (setmemorylist, "set memory ", -1, gdb_stdout);
 }
 
+void
 _initialize_z8ktdep ()
 {
   add_prefix_cmd ("memory", no_class, set_memory,
This page took 0.027618 seconds and 4 git commands to generate.