/* 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 */
- 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 (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)
#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)
{
- 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 */
*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