aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/Makefile.in6
-rw-r--r--gdb/config/i386/interix.mh6
-rw-r--r--gdb/config/i386/interix.mt2
-rw-r--r--gdb/config/i386/nm-interix.h35
-rw-r--r--gdb/i386-interix-nat.c190
-rw-r--r--gdb/i386-interix-tdep.c354
7 files changed, 8 insertions, 593 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 55d5422..c3083d4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2004-05-04 Mark Kettenis <kettenis@gnu.org>
+
+ * i386-interix-nat.c, i386-interix-tdep.c,
+ config/i386/nm-interix.h, config/i386/interix.mh,
+ config/i386/interix.mt: Remove files.
+ * Makefile.in (i386-interix-nat.o, i386-interix-tdep.o): Remove
+ dependencies.
+
2004-05-03 Mark Kettenis <kettenis@gnu.org>
* m68k-tdep.h (struct gdbarch_tdep): Add member
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 29500d5..2ecf8c9 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1859,12 +1859,6 @@ i386gnu-nat.o: i386gnu-nat.c $(defs_h) $(inferior_h) $(floatformat_h) \
$(regcache_h) $(gdb_assert_h) $(i386_tdep_h) $(gnu_nat_h) \
$(i387_tdep_h) $(gregset_h)
i386gnu-tdep.o: i386gnu-tdep.c $(defs_h) $(osabi_h) $(i386_tdep_h)
-i386-interix-nat.o: i386-interix-nat.c $(defs_h) $(gdb_string_h) \
- $(gdbcore_h) $(gregset_h) $(regcache_h)
-i386-interix-tdep.o: i386-interix-tdep.c $(defs_h) $(arch_utils_h) \
- $(frame_h) $(gdb_string_h) $(gdb_stabs_h) $(gdbcore_h) $(gdbtypes_h) \
- $(i386_tdep_h) $(inferior_h) $(libbfd_h) $(objfiles_h) $(osabi_h) \
- $(regcache_h)
i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
$(gregset_h) $(i387_tdep_h) $(i386_tdep_h) $(i386_linux_tdep_h) \
diff --git a/gdb/config/i386/interix.mh b/gdb/config/i386/interix.mh
deleted file mode 100644
index c294dd5..0000000
--- a/gdb/config/i386/interix.mh
+++ /dev/null
@@ -1,6 +0,0 @@
-# Host: Intel 386 running Interix
-XDEPFILES=
-NATDEPFILES= corelow.o core-regset.o fork-child.o i386-interix-nat.o \
- procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o
-NAT_FILE= nm-interix.h
-XM_FILE= xm-interix.h
diff --git a/gdb/config/i386/interix.mt b/gdb/config/i386/interix.mt
deleted file mode 100644
index 21285aa..0000000
--- a/gdb/config/i386/interix.mt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Target: Intel 386 running Interix
-TDEPFILES= i386-tdep.o i387-tdep.o i386-interix-tdep.o solib.o solib-pei.o
diff --git a/gdb/config/i386/nm-interix.h b/gdb/config/i386/nm-interix.h
deleted file mode 100644
index b8b003a..0000000
--- a/gdb/config/i386/nm-interix.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Native-dependent definitions for Intel 386 running Interix, for GDB.
- Copyright 1986, 1987, 1989, 1992, 1996 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef NM_INTERIX_H
-#define NM_INTERIX_H
-
-/* Be shared lib aware. */
-#include "solib.h"
-
-/* submodes of USE_PROC_FS. */
-#define UNIXWARE
-
-/* It's ALMOST coff; bfd does the same thing. Mostly used in coffread.c. */
-#define COFF_IMAGE_WITH_PE
-
-/* Turn on our own child_pid_to_exec_file. */
-#define CHILD_PID_TO_EXEC_FILE
-
-#endif /* NM_INTERIX_H */
diff --git a/gdb/i386-interix-nat.c b/gdb/i386-interix-nat.c
deleted file mode 100644
index c45de2f..0000000
--- a/gdb/i386-interix-nat.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Native-dependent code for Interix running on i386's, for GDB.
- Copyright 2002 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "defs.h"
-
-#include <sys/procfs.h>
-#include <inferior.h>
-#include <fcntl.h>
-
-#include <i386-tdep.h>
-#include "gdb_string.h"
-#include "gdbcore.h"
-#include "gregset.h"
-#include "regcache.h"
-
-typedef unsigned long greg_t;
-
-/* This is a duplicate of the table in i386-linux-nat.c. */
-
-static int regmap[] = {
- EAX, ECX, EDX, EBX,
- UESP, EBP, ESI, EDI,
- EIP, EFL, CS, SS,
- DS, ES, FS, GS,
-};
-
-/* Forward declarations. */
-extern void _initialize_core_interix (void);
-extern initialize_file_ftype _initialize_core_interix;
-
-/* Given a pointer to a general register set in /proc format (gregset_t *),
- unpack the register contents and supply them as gdb's idea of the current
- register values. */
-
-void
-supply_gregset (gregset_t *gregsetp)
-{
- int regi;
- greg_t *regp = (greg_t *) & gregsetp->gregs;
-
- for (regi = 0; regi < I386_NUM_GREGS; regi++)
- {
- supply_register (regi, (char *) (regp + regmap[regi]));
- }
-}
-
-/* Store GDB's value for REGNO in *GREGSETP. If REGNO is -1, do all
- of them. */
-
-void
-fill_gregset (gregset_t *gregsetp, int regno)
-{
- int regi;
- greg_t *regp = (greg_t *) gregsetp->gregs;
-
- for (regi = 0; regi < I386_NUM_GREGS; regi++)
- if (regno == -1 || regi == regno)
- regcache_collect (regi, (void *) (regp + regmap[regi]));
-}
-
-/* Fill GDB's register file with the floating-point register values in
- *FPREGSETP. */
-
-void
-supply_fpregset (fpregset_t *fpregsetp)
-{
- i387_supply_fsave (current_regcache, -1, fpregsetp);
-}
-
-/* Given a pointer to a floating point register set in (fpregset_t *)
- format, update all of the registers from gdb's idea of the current
- floating point register set. */
-
-void
-fill_fpregset (fpregset_t *fpregsetp, int regno)
-{
- i387_fill_fsave ((char *) fpregsetp, regno);
-}
-
-/* Read the values of either the general register set (WHICH equals 0)
- or the floating point register set (WHICH equals 2) from the core
- file data (pointed to by CORE_REG_SECT), and update gdb's idea of
- their current values. The CORE_REG_SIZE parameter is compared to
- the size of the gregset or fpgregset structures (as appropriate) to
- validate the size of the structure from the core file. The
- REG_ADDR parameter is ignored. */
-
-static void
-fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
- CORE_ADDR reg_addr)
-{
- gdb_gregset_t gregset;
- gdb_fpregset_t fpregset;
-
- if (which == 0)
- {
- if (core_reg_size != sizeof (gregset))
- {
- warning ("wrong size gregset struct in core file");
- }
- else
- {
- memcpy ((char *) &gregset, core_reg_sect, sizeof (gregset));
- supply_gregset (&gregset);
- }
- }
- else if (which == 2)
- {
- if (core_reg_size != sizeof (fpregset))
- {
- warning ("wrong size fpregset struct in core file");
- }
- else
- {
- memcpy ((char *) &fpregset, core_reg_sect, sizeof (fpregset));
- supply_fpregset (&fpregset);
- }
- }
-}
-
-#include <setjmp.h>
-
-static struct core_fns interix_core_fns =
-{
- bfd_target_coff_flavour, /* core_flavour (more or less) */
- default_check_format, /* check_format */
- default_core_sniffer, /* core_sniffer */
- fetch_core_registers, /* core_read_registers */
- NULL /* next */
-};
-
-void
-_initialize_core_interix (void)
-{
- deprecated_add_core_fns (&interix_core_fns);
-}
-
-/* We don't have a /proc/pid/file or /proc/pid/exe to read a link from,
- so read it from the same place ps gets the name. */
-
-char *
-child_pid_to_exec_file (int pid)
-{
- char *path;
- char *buf;
- int fd, c;
- char *p;
-
- xasprintf (&path, "/proc/%d/stat", pid);
- buf = xcalloc (MAXPATHLEN + 1, sizeof (char));
- make_cleanup (xfree, path);
- make_cleanup (xfree, buf);
-
- fd = open (path, O_RDONLY);
-
- if (fd < 0)
- return NULL;
-
- /* Skip over "Argv0\t". */
- lseek (fd, 6, SEEK_SET);
-
- c = read (fd, buf, MAXPATHLEN);
- close (fd);
-
- if (c < 0)
- return NULL;
-
- buf[c] = '\0'; /* Ensure null termination. */
- p = strchr (buf, '\n');
- if (p != NULL)
- *p = '\0';
-
- return buf;
-}
diff --git a/gdb/i386-interix-tdep.c b/gdb/i386-interix-tdep.c
deleted file mode 100644
index 4461b87..0000000
--- a/gdb/i386-interix-tdep.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/* Target-dependent code for Interix running on i386's, for GDB.
- Copyright 2002 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "defs.h"
-#include "arch-utils.h"
-
-#include "frame.h"
-#include "gdb_string.h"
-#include "gdb-stabs.h"
-#include "gdbcore.h"
-#include "gdbtypes.h"
-#include "i386-tdep.h"
-#include "inferior.h"
-#include "libbfd.h"
-#include "objfiles.h"
-#include "osabi.h"
-#include "regcache.h"
-
-/* offsetof (mcontext_t, gregs.gregs[EBP]) */
-static const int mcontext_EBP_greg_offset = 180;
-
-/* offsetof (mcontext_t, gregs.gregs[EIP]) */
-static const int mcontext_EIP_greg_offset = 184;
-
-/* offsetof (mcontext_t, gregs.gregs[UESP]) */
-static const int mcontext_UESP_greg_offset = 196;
-
-/* offsetof (mcontext_t, gregs.reserved[1]) */
-static const int mcontext_syscall_greg_offset = 4;
-
-/* offsetof (_JUMP_BUFFER, Eip) */
-static const int jump_buffer_Eip_offset = 20;
-
-/* See procfs.c and *interix*.h in config/[alpha,i386]. */
-/* ??? These should be static, but this needs a bit of work before this
- can be done. */
-CORE_ADDR tramp_start;
-CORE_ADDR tramp_end;
-CORE_ADDR null_start;
-CORE_ADDR null_end;
-int winver; /* Windows NT version number */
-
-/* Forward declarations. */
-extern void _initialize_i386_interix_tdep (void);
-extern initialize_file_ftype _initialize_i386_interix_tdep;
-
-/* Adjust the section offsets in an objfile structure so that it's correct
- for the type of symbols being read (or undo it with the _restore
- arguments).
-
- If main programs ever start showing up at other than the default Image
- Base, this is where that would likely be applied. */
-
-void
-pei_adjust_objfile_offsets (struct objfile *objfile,
- enum objfile_adjusts type)
-{
- int i;
- CORE_ADDR symbols_offset;
-
- switch (type)
- {
- case adjust_for_symtab:
- symbols_offset = NONZERO_LINK_BASE (objfile->obfd);
- break;
- case adjust_for_symtab_restore:
- symbols_offset = -NONZERO_LINK_BASE (objfile->obfd);
- break;
- case adjust_for_stabs:
- case adjust_for_stabs_restore:
- case adjust_for_dwarf:
- case adjust_for_dwarf_restore:
- default:
- return;
- }
-
- for (i = 0; i < objfile->num_sections; i++)
- {
- (objfile->section_offsets)->offsets[i] += symbols_offset;
- }
-}
-
-static int
-i386_interix_pc_in_sigtramp (CORE_ADDR pc, char *name)
-{
- /* This is sufficient, where used, but is NOT a complete test; There
- is more in DEPRECATED_INIT_EXTRA_FRAME_INFO
- (a.k.a. interix_back_one_frame). */
- return ((pc >= tramp_start && pc < tramp_end)
- || (pc >= null_start && pc < null_end));
-}
-
-static int
-i386_interix_in_solib_call_trampoline (CORE_ADDR pc, char *name)
-{
- return i386_pe_skip_trampoline_code (pc, name);
-}
-
-static CORE_ADDR
-i386_interix_skip_trampoline_code (CORE_ADDR pc)
-{
- return i386_pe_skip_trampoline_code (pc, 0);
-}
-
-static int
-i386_interix_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
-{
- /* In the context where this is used, we get the saved PC before we've
- successfully unwound far enough to be sure what we've got (it may
- be a signal handler caller). If we're dealing with a signal
- handler caller, this will return valid, which is fine. If not,
- it'll make the correct test. */
- return ((get_frame_type (thisframe) == SIGTRAMP_FRAME) || chain != 0);
-}
-
-/* We want to find the previous frame, which on Interix is tricky when
- signals are involved; set frame->frame appropriately, and also get
- the pc and tweak tye frame's type; this replaces a boatload of
- nested macros, as well. */
-static void
-i386_interix_back_one_frame (int fromleaf, struct frame_info *frame)
-{
- CORE_ADDR ra;
- CORE_ADDR fm;
- CORE_ADDR context;
- long t;
-
- if (frame == NULL)
- internal_error (__FILE__, __LINE__, "unexpected NULL frame");
-
- if (fromleaf)
- {
- frame->pc = DEPRECATED_SAVED_PC_AFTER_CALL (frame->next);
- return;
- }
-
- if (!frame->next)
- {
- frame->pc = read_pc ();
-
- /* Part of the signal stuff... See below. */
- if (stopped_by_random_signal)
- {
- /* We know we're in a system call mini-frame; was it
- NullApi or something else? */
- ra = DEPRECATED_SAVED_PC_AFTER_CALL (frame);
- if (ra >= null_start && ra < null_end)
- deprecated_set_frame_type (frame, SIGTRAMP_FRAME);
- /* There might also be an indirect call to the mini-frame,
- putting one more return address on the stack. (XP only,
- I think?) This can't (reasonably) return the address of the
- signal handler caller unless it's that situation, so this
- is safe. */
- ra = read_memory_unsigned_integer (read_register (SP_REGNUM) + 4, 4);
- if (ra >= null_start && ra < null_end)
- deprecated_set_frame_type (frame, SIGTRAMP_FRAME);
- }
- return;
- }
-
- if (!(get_frame_type (frame->next) == SIGTRAMP_FRAME))
- {
- frame->pc = read_memory_integer (frame->next->frame + 4, 4);
- return;
- }
-
- /* This is messy (actually AWFUL)... The "trampoline" might be 2, 3
- or all 5 entities on the frame.
-
- Chunk 1 will be present when we're actually in a signal handler.
- Chunk 2 will be present when an asynchronous signal (one that
- didn't come in with a system call) is present.
- We may not (yet) be in the handler, if we're just returning
- from the call.
- When we're actually in a handler taken from an asynchronous
- signal, both will be present.
-
- Chunk 1:
- PdxSignalDeliverer's frame
- + Context struct -- not accounted for in any frame
-
- Chunk 2:
- + PdxNullPosixApi's frame
- + PdxNullApiCaller's frame
- + Context struct = 0x230 not accounted for in any frame
-
- The symbol names come from examining objdumps of psxdll.dll;
- they don't appear in the runtime image.
-
- For gdb's purposes, we can pile all this into one frame. */
-
- ra = frame->next->pc;
- /* Are we already pointing at PdxNullPosixApi? We are if
- this is a signal frame, we're at next-to-top, and were stopped
- by a random signal (if it wasn't the right address under
- these circumstances, we wouldn't be here at all by tests above
- on the prior frame). */
- if (frame->next->next == NULL && stopped_by_random_signal)
- {
- /* We're pointing at the frame FOR PdxNullApi. */
- fm = frame->frame;
- }
- else
- {
- /* No... We must be pointing at the frame that was called
- by PdxSignalDeliverer; back up across the whole mess. */
-
- /* Extract the frame for PdxSignalDeliverer. Note:
- DEPRECATED_FRAME_CHAIN used the "old" frame pointer because
- we were a deliverer. Get the address of the context record
- that's on here frameless. */
- context = read_memory_integer (frame->frame, 4); /* an Arg */
-
- /* Now extract the frame pointer contained in the context. */
- fm = read_memory_integer (context + mcontext_EBP_greg_offset, 4);
-
- ra = read_memory_integer (context + mcontext_EIP_greg_offset, 4);
-
- /* We need to know if we're in a system call because we'll be
- in a syscall mini-frame, if so, and the rules are different. */
- t = (long) read_memory_integer (context + mcontext_syscall_greg_offset,
- 4);
- /* t contains 0 if running free, 1 if blocked on a system call,
- and 2 if blocked on an exception message (e.g. a trap);
- we don't expect to get here with a 2. */
- if (t != 1)
- {
- /* Not at a system call, therefore it can't be NullApi. */
- frame->pc = ra;
- frame->frame = fm;
- return;
- }
-
- /* It's a system call... Mini frame, then look for NullApi. */
- /* Get the RA (on the stack) associated with this... It's
- a system call mini-frame. */
- ra = read_memory_integer (context + mcontext_UESP_greg_offset, 4);
-
- if (winver >= 51)
- {
- /* Newer versions of Windows NT interpose another return
- address (but no other "stack frame" stuff) that we need
- to simply ignore here. */
- ra += 4;
- }
-
- ra = read_memory_integer (ra, 4);
-
- if (!(ra >= null_start && ra < null_end))
- {
- /* No Null API present; we're done. */
- frame->pc = ra;
- frame->frame = fm;
- return;
- }
- }
-
- /* At this point, we're looking at the frame for PdxNullPosixApi,
- in either case.
-
- PdxNullPosixApi is called by PdxNullApiCaller (which in turn
- is called by _PdxNullApiCaller (note the _).)
- PdxNullPosixApiCaller (no _) is a frameless function.
-
- The saved frame pointer is as fm, but it's not of interest
- to us because it skips us over the saved context, which is
- the wrong thing to do, because it skips the interrrupted
- routine! PdxNullApiCaller takes as its only argument the
- address of the context of the interrupded function (which
- is really in no frame, but jammed on the stack by the system)
-
- So: fm+0: saved bp
- fm+4: return address to _PdxNullApiCaller
- fm+8: arg to PdxNullApiCaller pushed by _Pdx... */
-
- fm = read_memory_integer (fm + 0x8, 4);
-
- /* Extract the second context record. */
-
- ra = read_memory_integer (fm + mcontext_EIP_greg_offset, 4);
- fm = read_memory_integer (fm + mcontext_EBP_greg_offset, 4);
-
- frame->frame = fm;
- frame->pc = ra;
-
- return;
-}
-
-static CORE_ADDR
-i386_interix_frame_saved_pc (struct frame_info *fi)
-{
- /* Assume that we've already unwound enough to have the caller's address
- if we're dealing with a signal handler caller (And if that fails,
- return 0). */
- if ((get_frame_type (fi) == SIGTRAMP_FRAME))
- return fi->next ? fi->next->pc : 0;
- else
- return read_memory_integer (fi->frame + 4, 4);
-}
-
-static void
-i386_interix_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-{
- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-
- tdep->struct_return = reg_struct_return;
- tdep->jb_pc_offset = jump_buffer_Eip_offset;
-
- set_gdbarch_in_solib_call_trampoline (gdbarch,
- i386_interix_in_solib_call_trampoline);
- set_gdbarch_skip_trampoline_code (gdbarch,
- i386_interix_skip_trampoline_code);
- set_gdbarch_deprecated_init_extra_frame_info (gdbarch, i386_interix_back_one_frame);
- set_gdbarch_deprecated_frame_chain_valid (gdbarch, i386_interix_frame_chain_valid);
- set_gdbarch_deprecated_frame_saved_pc (gdbarch, i386_interix_frame_saved_pc);
- set_gdbarch_name_of_malloc (gdbarch, "_malloc");
-}
-
-static enum gdb_osabi
-i386_interix_osabi_sniffer (bfd * abfd)
-{
- char *target_name = bfd_get_target (abfd);
-
- if (strcmp (target_name, "pei-i386") == 0)
- return GDB_OSABI_INTERIX;
-
- return GDB_OSABI_UNKNOWN;
-}
-
-void
-_initialize_i386_interix_tdep (void)
-{
- gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour,
- i386_interix_osabi_sniffer);
-
- gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_INTERIX,
- i386_interix_init_abi);
-}