/* 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.
#include "value.h"
#include "gdb_string.h"
#include "inferior.h"
+#include "regcache.h"
\f
#define P_LINKL_FP 0x480e
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)
/* 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 (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 */
- 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;
-}
+/* OBSOLETE extern CORE_ADDR */
+/* OBSOLETE isi_skip_prologue (CORE_ADDR pc) */
+/* OBSOLETE { */
+/* OBSOLETE register int op = read_memory_integer (pc, 2); */
+/* OBSOLETE if (op == P_LINKW_FP) */
+/* OBSOLETE pc += 4; *//* Skip link #word */
+/* OBSOLETE else if (op == P_LINKL_FP) */
+/* OBSOLETE pc += 6; *//* Skip link #long */
+/* OBSOLETE *//* Not sure why branches are here. */
+/* OBSOLETE *//* From tm-isi.h, tm-altos.h */
+/* OBSOLETE else if (op == 0060000) */
+/* OBSOLETE pc += 4; *//* Skip bra #word */
+/* OBSOLETE else if (op == 00600377) */
+/* OBSOLETE pc += 6; *//* skip bra #long */
+/* OBSOLETE else if ((op & 0177400) == 0060000) */
+/* OBSOLETE pc += 2; *//* skip bra #char */
+/* OBSOLETE return pc; */
+/* OBSOLETE } */
int
delta68_in_sigtramp (CORE_ADDR pc, char *name)
#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 (CORE_ADDR *pc)
+m68k_get_longjmp_target (CORE_ADDR *pc)
{
+#if defined (JB_PC) && defined (JB_ELEMENT_SIZE)
char *buf;
CORE_ADDR sp, jb_addr;
*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