diff options
author | Mark Kettenis <kettenis@gnu.org> | 2002-06-16 02:19:22 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2002-06-16 02:19:22 +0000 |
commit | 82b47e62fc24d62eac68b49a46a4bff63a4f03a1 (patch) | |
tree | 2b5e9f37811ce7abb371d6c93e583e5c1955937a /gdb | |
parent | cc51c39866a9c18b082844688dea0e0c3d36c9af (diff) | |
download | gdb-82b47e62fc24d62eac68b49a46a4bff63a4f03a1.zip gdb-82b47e62fc24d62eac68b49a46a4bff63a4f03a1.tar.gz gdb-82b47e62fc24d62eac68b49a46a4bff63a4f03a1.tar.bz2 |
* 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/config/i386/tm-i386lynx.h | 7 | ||||
-rw-r--r-- | gdb/i386ly-tdep.c | 61 |
3 files changed, 59 insertions, 19 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 725ae61..29ba209 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/config/i386/tm-i386lynx.h b/gdb/config/i386/tm-i386lynx.h index 2da0b7c..03fe4ff 100644 --- a/gdb/config/i386/tm-i386lynx.h +++ b/gdb/config/i386/tm-i386lynx.h @@ -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 */ diff --git a/gdb/i386ly-tdep.c b/gdb/i386ly-tdep.c index 92b544d..69c3750 100644 --- a/gdb/i386ly-tdep.c +++ b/gdb/i386ly-tdep.c @@ -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" + +#include "i386-tdep.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. */ +/* 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. */ -CORE_ADDR +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_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); - return read_memory_integer (read_register (SP_REGNUM), 4); + gdbarch_register_osabi (bfd_arch_i386, GDB_OSABI_LYNXOS, + i386lynx_init_abi); } |