2002-05-11 Daniel Jacobowitz <drow@mvista.com>
[deliverable/binutils-gdb.git] / gdb / m68k-tdep.c
index 359d61f85aa8545b0dcfeba131a1b3a6bc8a4468..1c4bc4d4d1f5f0639193bc5723056cd626792e1e 100644 (file)
@@ -1,5 +1,5 @@
 /* Target dependent code for the Motorola 68000 series.
-   Copyright (C) 1990, 1992, 1993, 1994, 1995, 1996, 1999, 2000
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, 2001
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -26,6 +26,7 @@
 #include "value.h"
 #include "gdb_string.h"
 #include "inferior.h"
+#include "regcache.h"
 \f
 
 #define P_LINKL_FP     0x480e
@@ -44,8 +45,7 @@
    was moved back here from tm-m68k.h.  FIXME? */
 
 extern CORE_ADDR
-altos_skip_prologue (pc)
-     CORE_ADDR pc;
+altos_skip_prologue (CORE_ADDR pc)
 {
   register int op = read_memory_integer (pc, 2);
   if (op == P_LINKW_FP)
@@ -53,30 +53,7 @@ altos_skip_prologue (pc)
   else if (op == P_LINKL_FP)
     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 == P_LINKW_FP)
-    pc += 4;                   /* Skip link #word */
-  else if (op == P_LINKL_FP)
-    pc += 6;                   /* Skip link #long */
-  /* Not sure why branches are here.  */
-  /* From tm-isi.h, tm-altos.h */
+  /* From tm-altos.h */
   else if (op == 0060000)
     pc += 4;                   /* Skip bra #word */
   else if (op == 00600377)
@@ -87,9 +64,7 @@ isi_skip_prologue (pc)
 }
 
 int
-delta68_in_sigtramp (pc, name)
-     CORE_ADDR pc;
-     char *name;
+delta68_in_sigtramp (CORE_ADDR pc, char *name)
 {
   if (name != NULL)
     return strcmp (name, "_sigcode") == 0;
@@ -98,8 +73,7 @@ delta68_in_sigtramp (pc, name)
 }
 
 CORE_ADDR
-delta68_frame_args_address (frame_info)
-     struct frame_info * frame_info;
+delta68_frame_args_address (struct frame_info *frame_info)
 {
   /* we assume here that the only frameless functions are the system calls
      or other functions who do not put anything on the stack. */
@@ -118,8 +92,7 @@ delta68_frame_args_address (frame_info)
 }
 
 CORE_ADDR
-delta68_frame_saved_pc (frame_info)
-     struct frame_info * frame_info;
+delta68_frame_saved_pc (struct frame_info *frame_info)
 {
   return read_memory_integer (delta68_frame_args_address (frame_info) + 4, 4);
 }
@@ -128,8 +101,7 @@ delta68_frame_saved_pc (frame_info)
    Can return -1, meaning no way to tell.  */
 
 int
-isi_frame_num_args (fi)
-     struct frame_info *fi;
+isi_frame_num_args (struct frame_info *fi)
 {
   int val;
   CORE_ADDR pc = FRAME_SAVED_PC (fi);
@@ -151,8 +123,7 @@ isi_frame_num_args (fi)
 }
 
 int
-delta68_frame_num_args (fi)
-     struct frame_info *fi;
+delta68_frame_num_args (struct frame_info *fi)
 {
   int val;
   CORE_ADDR pc = FRAME_SAVED_PC (fi);
@@ -174,8 +145,7 @@ delta68_frame_num_args (fi)
 }
 
 int
-news_frame_num_args (fi)
-     struct frame_info *fi;
+news_frame_num_args (struct frame_info *fi)
 {
   int val;
   CORE_ADDR pc = FRAME_SAVED_PC (fi);
@@ -199,7 +169,7 @@ news_frame_num_args (fi)
 /* Push an empty stack frame, to record the current PC, etc.  */
 
 void
-m68k_push_dummy_frame ()
+m68k_push_dummy_frame (void)
 {
   register CORE_ADDR sp = read_register (SP_REGNUM);
   register int regnum;
@@ -229,7 +199,7 @@ m68k_push_dummy_frame ()
    restoring all saved registers.  */
 
 void
-m68k_pop_frame ()
+m68k_pop_frame (void)
 {
   register struct frame_info *frame = get_current_frame ();
   register CORE_ADDR fp;
@@ -298,8 +268,7 @@ m68k_pop_frame ()
  */
 
 CORE_ADDR
-m68k_skip_prologue (ip)
-     CORE_ADDR ip;
+m68k_skip_prologue (CORE_ADDR ip)
 {
   register CORE_ADDR limit;
   struct symtab_and_line sal;
@@ -335,9 +304,8 @@ m68k_skip_prologue (ip)
 }
 
 void
-m68k_find_saved_regs (frame_info, saved_regs)
-     struct frame_info *frame_info;
-     struct frame_saved_regs *saved_regs;
+m68k_find_saved_regs (struct frame_info *frame_info,
+                     struct frame_saved_regs *saved_regs)
 {
   register int regnum;
   register int regmask;
@@ -507,6 +475,9 @@ lose:;
 
 #include <sys/procfs.h>
 
+/* Prototypes for supply_gregset etc. */
+#include "gregset.h"
+
 /*  The /proc interface divides the target machine's register set up into
    two different sets, the general register set (gregset) and the floating
    point register set (fpregset).  For each set, there is an ioctl to get
@@ -548,8 +519,7 @@ lose:;
    register values. */
 
 void
-supply_gregset (gregsetp)
-     gregset_t *gregsetp;
+supply_gregset (gregset_t *gregsetp)
 {
   register int regi;
   register greg_t *regp = (greg_t *) gregsetp;
@@ -563,9 +533,7 @@ supply_gregset (gregsetp)
 }
 
 void
-fill_gregset (gregsetp, regno)
-     gregset_t *gregsetp;
-     int regno;
+fill_gregset (gregset_t *gregsetp, int regno)
 {
   register int regi;
   register greg_t *regp = (greg_t *) gregsetp;
@@ -594,8 +562,7 @@ fill_gregset (gregsetp, regno)
    idea of the current floating point register values. */
 
 void
-supply_fpregset (fpregsetp)
-     fpregset_t *fpregsetp;
+supply_fpregset (fpregset_t *fpregsetp)
 {
   register int regi;
   char *from;
@@ -616,9 +583,7 @@ supply_fpregset (fpregsetp)
    them all. */
 
 void
-fill_fpregset (fpregsetp, regno)
-     fpregset_t *fpregsetp;
-     int regno;
+fill_fpregset (fpregset_t *fpregsetp, int regno)
 {
   int regi;
   char *to;
@@ -651,19 +616,24 @@ fill_fpregset (fpregsetp, regno)
 
 #endif /* USE_PROC_FS */
 
-#ifdef GET_LONGJMP_TARGET
 /* Figure out where the longjmp will land.  Slurp the args out of the stack.
    We expect the first arg to be a pointer to the jmp_buf structure from which
    we extract the pc (JB_PC) that we will land at.  The pc is copied into PC.
    This routine returns true on success. */
 
+/* NOTE: cagney/2000-11-08: For this function to be fully multi-arched
+   the macro's JB_PC and JB_ELEMENT_SIZE would need to be moved into
+   the ``struct gdbarch_tdep'' object and then set on a target ISA/ABI
+   dependant basis. */
+
 int
-get_longjmp_target (pc)
-     CORE_ADDR *pc;
+m68k_get_longjmp_target (CORE_ADDR *pc)
 {
-  char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT];
+#if defined (JB_PC) && defined (JB_ELEMENT_SIZE)
+  char *buf;
   CORE_ADDR sp, jb_addr;
 
+  buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT);
   sp = read_register (SP_REGNUM);
 
   if (target_read_memory (sp + SP_ARG0,                /* Offset of first arg on stack */
@@ -680,8 +650,12 @@ get_longjmp_target (pc)
   *pc = extract_address (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
 
   return 1;
+#else
+  internal_error (__FILE__, __LINE__,
+                 "m68k_get_longjmp_target: not implemented");
+  return 0;
+#endif
 }
-#endif /* GET_LONGJMP_TARGET */
 
 /* Immediately after a function call, return the saved pc before the frame
    is setup.  For sun3's, we check for the common case of being inside of a
@@ -689,8 +663,7 @@ get_longjmp_target (pc)
    prior to doing the trap. */
 
 CORE_ADDR
-m68k_saved_pc_after_call (frame)
-     struct frame_info *frame;
+m68k_saved_pc_after_call (struct frame_info *frame)
 {
 #ifdef SYSCALL_TRAP
   int op;
@@ -706,7 +679,7 @@ m68k_saved_pc_after_call (frame)
 
 
 void
-_initialize_m68k_tdep ()
+_initialize_m68k_tdep (void)
 {
   tm_print_insn = print_insn_m68k;
 }
This page took 0.027042 seconds and 4 git commands to generate.