* breakpoint.c, breakpoint.h (breakpoint_init_inferior): New function
[deliverable/binutils-gdb.git] / gdb / z8k-tdep.c
index 3daf7e41f83d521d7ae44a3492d783531ab6c745..e6b5e8aff971d048b13fcc96427f8ad3504e4825 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,
@@ -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 */
@@ -208,16 +208,17 @@ print_insn (memaddr, stream)
      CORE_ADDR memaddr;
      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,18 +296,52 @@ 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;
@@ -406,7 +440,7 @@ segmented_command (args, from_tty)
      char *args;
      int from_tty;
 {
-  z8k_set_pointer_size (16);
+  z8k_set_pointer_size (32);
 }
 
 static void
This page took 0.024468 seconds and 4 git commands to generate.