aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2014-12-01 13:42:41 +0100
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2014-12-01 13:42:41 +0100
commitac3d87c0d256547c036067de7bceee320b9bab8f (patch)
treeab3378d16a5dab2228a874fb2d713fa18202513e
parent591f7597d447d8d038d6d8e24a706d1d5e32eba1 (diff)
downloadgdb-ac3d87c0d256547c036067de7bceee320b9bab8f.zip
gdb-ac3d87c0d256547c036067de7bceee320b9bab8f.tar.gz
gdb-ac3d87c0d256547c036067de7bceee320b9bab8f.tar.bz2
Use core regset iterators on GNU Hurd
Remove native-only core file handling on GNU Hurd. Instead, enable the x86 target generic core regset logic on the Hurd by providing an appropriate register offset map. Thanks to Samuel Thibault for testing! gdb/ * config/i386/i386gnu.mh (NATDEPFILES): Remove core-regset.o. * i386gnu-nat.c: Do not include <sys/procfs.h> or "gregset.h". (CREG_OFFSET, creg_offset, CREG_ADDR): Remove. (supply_gregset, supply_fpregset): Remove. * i386gnu-tdep.c (i386gnu_gregset_reg_offset): New variable. (i386gnu_init_abi): Set tdep->gregset_reg_offset, gregset_num_regs, and sizeof_gregset.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/config/i386/i386gnu.mh2
-rw-r--r--gdb/i386gnu-nat.c37
-rw-r--r--gdb/i386gnu-tdep.c25
4 files changed, 36 insertions, 38 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e2dbe0a..cfc41db 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,13 @@
+2014-12-01 Ulrich Weigand  <uweigand@de.ibm.com>
+
+ * config/i386/i386gnu.mh (NATDEPFILES): Remove core-regset.o.
+ * i386gnu-nat.c: Do not include <sys/procfs.h> or "gregset.h".
+ (CREG_OFFSET, creg_offset, CREG_ADDR): Remove.
+ (supply_gregset, supply_fpregset): Remove.
+ * i386gnu-tdep.c (i386gnu_gregset_reg_offset): New variable.
+ (i386gnu_init_abi): Set tdep->gregset_reg_offset, gregset_num_regs,
+ and sizeof_gregset.
+
2014-11-30 Jan Kratochvil <jan.kratochvil@redhat.com>
Add add-auto-load-scripts-directory.
diff --git a/gdb/config/i386/i386gnu.mh b/gdb/config/i386/i386gnu.mh
index 4cc23e4..f1c0c5f 100644
--- a/gdb/config/i386/i386gnu.mh
+++ b/gdb/config/i386/i386gnu.mh
@@ -1,6 +1,6 @@
# Host: Intel 386 running the GNU Hurd
NATDEPFILES= i386gnu-nat.o gnu-nat.o \
- x86-nat.o x86-dregs.o core-regset.o fork-child.o \
+ x86-nat.o x86-dregs.o fork-child.o \
notify_S.o process_reply_S.o msg_reply_S.o \
msg_U.o exc_request_U.o exc_request_S.o
HAVE_NATIVE_GCORE_HOST = 1
diff --git a/gdb/i386gnu-nat.c b/gdb/i386gnu-nat.c
index 9317d29..ab0df3e 100644
--- a/gdb/i386gnu-nat.c
+++ b/gdb/i386gnu-nat.c
@@ -34,11 +34,6 @@
#include "inf-child.h"
#include "i387-tdep.h"
-#ifdef HAVE_SYS_PROCFS_H
-# include <sys/procfs.h>
-# include "gregset.h"
-#endif
-
/* Offset to the thread_state_t location where REG is stored. */
#define REG_OFFSET(reg) offsetof (struct i386_thread_state, reg)
@@ -52,21 +47,7 @@ static int reg_offset[] =
REG_OFFSET (ds), REG_OFFSET (es), REG_OFFSET (fs), REG_OFFSET (gs)
};
-/* Offset to the greg_t location where REG is stored. */
-#define CREG_OFFSET(reg) (REG_##reg * 4)
-
-/* At CREG_OFFSET[N] is the offset to the greg_t location where
- the GDB register N is stored. */
-static int creg_offset[] =
-{
- CREG_OFFSET (EAX), CREG_OFFSET (ECX), CREG_OFFSET (EDX), CREG_OFFSET (EBX),
- CREG_OFFSET (UESP), CREG_OFFSET (EBP), CREG_OFFSET (ESI), CREG_OFFSET (EDI),
- CREG_OFFSET (EIP), CREG_OFFSET (EFL), CREG_OFFSET (CS), CREG_OFFSET (SS),
- CREG_OFFSET (DS), CREG_OFFSET (ES), CREG_OFFSET (FS), CREG_OFFSET (GS)
-};
-
#define REG_ADDR(state, regnum) ((char *)(state) + reg_offset[regnum])
-#define CREG_ADDR(state, regnum) ((const char *)(state) + creg_offset[regnum])
/* Get the whole floating-point state of THREAD and record the values
@@ -100,24 +81,6 @@ fetch_fpregs (struct regcache *regcache, struct proc *thread)
}
}
-#ifdef HAVE_SYS_PROCFS_H
-/* These two calls are used by the core-regset.c code for
- reading ELF core files. */
-void
-supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregs)
-{
- int i;
- for (i = 0; i < I386_NUM_GREGS; i++)
- regcache_raw_supply (regcache, i, CREG_ADDR (gregs, i));
-}
-
-void
-supply_fpregset (struct regcache *regcache, const gdb_fpregset_t *fpregs)
-{
- i387_supply_fsave (regcache, -1, fpregs);
-}
-#endif
-
/* Fetch register REGNO, or all regs if REGNO is -1. */
static void
gnu_fetch_registers (struct target_ops *ops,
diff --git a/gdb/i386gnu-tdep.c b/gdb/i386gnu-tdep.c
index 1c68841..be863bf 100644
--- a/gdb/i386gnu-tdep.c
+++ b/gdb/i386gnu-tdep.c
@@ -22,6 +22,27 @@
#include "i386-tdep.h"
+/* From <sys/ucontext.h>. */
+static int i386gnu_gregset_reg_offset[] =
+{
+ 11 * 4, /* %eax */
+ 10 * 4, /* %ecx */
+ 9 * 4, /* %edx */
+ 8 * 4, /* %ebx */
+ 17 * 4, /* %uesp */
+ 6 * 4, /* %ebp */
+ 5 * 4, /* %esi */
+ 4 * 4, /* %edi */
+ 14 * 4, /* %eip */
+ 16 * 4, /* %efl */
+ 15 * 4, /* %cs */
+ 18 * 4, /* %ss */
+ 3 * 4, /* %ds */
+ 2 * 4, /* %es */
+ 1 * 4, /* %fs */
+ 0 * 4, /* %gs */
+};
+
static void
i386gnu_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
@@ -33,6 +54,10 @@ i386gnu_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
+ tdep->gregset_reg_offset = i386gnu_gregset_reg_offset;
+ tdep->gregset_num_regs = ARRAY_SIZE (i386gnu_gregset_reg_offset);
+ tdep->sizeof_gregset = 19 * 4;
+
tdep->jb_pc_offset = 20; /* From <bits/setjmp.h>. */
}