* config/i386/tm-i386lynx.h (SAVED_PC_AFTER_CALL): Remove define.

(i386lynx_saved_pc_after_call): Remove prototype.
* i386ly-tdep.c: Include "i386-tdep.h".
(i386lynx_saved_pc_after_call): Make static.  Use
read_memory_nobpt instead of read_memory.  Use
read_memory_unsigned_integer instead of read_memory_integer.
(i386lynx_init_abi): New function.
(i386lynx_coff_osabi_sniffer): New function.
(_initialize_i386bsd_tdep): New function.
This commit is contained in:
Mark Kettenis 2002-06-16 02:19:22 +00:00
parent cc51c39866
commit 82b47e62fc
3 changed files with 59 additions and 19 deletions

View File

@ -1,5 +1,15 @@
2002-06-16 Mark Kettenis <kettenis@gnu.org>
* config/i386/tm-i386lynx.h (SAVED_PC_AFTER_CALL): Remove define.
(i386lynx_saved_pc_after_call): Remove prototype.
* i386ly-tdep.c: Include "i386-tdep.h".
(i386lynx_saved_pc_after_call): Make static. Use
read_memory_nobpt instead of read_memory. Use
read_memory_unsigned_integer instead of read_memory_integer.
(i386lynx_init_abi): New function.
(i386lynx_coff_osabi_sniffer): New function.
(_initialize_i386bsd_tdep): New function.
* config/i386/tm-i386.h (PARM_BOUNDARY, CALL_DUMMY,
CALL_DUMMY_LENGTH, CALL_DUMMY_START_OFFSET,
CALL_DUMMY_BREAKPOINT_OFFSET, FIX_CALL_DUMMY): Remove defines.

View File

@ -1,5 +1,5 @@
/* Macro definitions for Intel 386 running under LynxOS.
Copyright 1993, 1995 Free Software Foundation, Inc.
Copyright 1993, 1995, 2002 Free Software Foundation, Inc.
This file is part of GDB.
@ -26,9 +26,4 @@
/* Most definitions from sysv could be used. */
#include "i386/tm-i386.h"
#undef SAVED_PC_AFTER_CALL
#define SAVED_PC_AFTER_CALL i386lynx_saved_pc_after_call
CORE_ADDR i386lynx_saved_pc_after_call ();
#endif /* TM_I386LYNX_H */

View File

@ -1,5 +1,5 @@
/* Target-dependent code for Intel 386 running LynxOS.
Copyright 1993, 1996, 2000, 2001 Free Software Foundation, Inc.
Copyright 1993, 1996, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GDB.
@ -19,27 +19,62 @@
Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "inferior.h"
#include "target.h"
#include "gdbcore.h"
#include "inferior.h"
#include "regcache.h"
#include "target.h"
/* Return the PC of the caller from the call frame. Assumes the subr prologue
has already been executed, and the frame pointer setup. If this is the
outermost frame, we check to see if we are in a system call by examining the
previous instruction. If so, then the return PC is actually at SP+4 because
system calls use a different calling sequence. */
#include "i386-tdep.h"
CORE_ADDR
/* Return the PC of the caller from the call frame. Assumes the subr
prologue has already been executed, and the frame pointer setup.
If this is the outermost frame, we check to see if we are in a
system call by examining the previous instruction. If so, then the
return PC is actually at SP+4 because system calls use a different
calling sequence. */
static CORE_ADDR
i386lynx_saved_pc_after_call (struct frame_info *frame)
{
char opcode[7];
static const unsigned char call_inst[] =
{0x9a, 0, 0, 0, 0, 8, 0}; /* lcall 0x8,0x0 */
{ 0x9a, 0, 0, 0, 0, 8, 0 }; /* lcall 0x8,0x0 */
read_memory (frame->pc - 7, opcode, 7);
read_memory_nobpt (frame->pc - 7, opcode, 7);
if (memcmp (opcode, call_inst, 7) == 0)
return read_memory_integer (read_register (SP_REGNUM) + 4, 4);
return read_memory_unsigned_integer (read_register (SP_REGNUM) + 4, 4);
return read_memory_integer (read_register (SP_REGNUM), 4);
return read_memory_unsigned_integer (read_register (SP_REGNUM), 4);
}
/* LynxOS. */
static void
i386lynx_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
set_gdbarch_saved_pc_after_call (gdbarch, i386lynx_saved_pc_after_call);
}
static enum gdb_osabi
i386lynx_coff_osabi_sniffer (bfd *abfd)
{
if (strcmp (bfd_get_target (abfd), "coff-i386-lynx") == 0)
return GDB_OSABI_LYNXOS;
return GDB_OSABI_UNKNOWN;
}
/* Provide a prototype to silence -Wmissing-prototypes. */
void _initialize_i386lynx_tdep (void);
void
_initialize_i386bsd_tdep (void)
{
gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
i386lynx_coff_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_LYNXOS,
i386lynx_init_abi);
}