summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog28
-rw-r--r--gdb/amd64fbsd-nat.c1
-rw-r--r--gdb/amd64fbsd-tdep.c4
-rw-r--r--gdb/amd64obsd-tdep.c19
-rw-r--r--gdb/configure.tgt4
-rw-r--r--gdb/i386-cygwin-tdep.c18
-rw-r--r--gdb/i386-tdep.c26
-rw-r--r--gdb/i386-tdep.h12
-rw-r--r--gdb/i386fbsd-nat.c1
-rw-r--r--gdb/i386fbsd-tdep.c4
-rw-r--r--gdb/i386obsd-tdep.c20
11 files changed, 75 insertions, 62 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index dcc303bad47..2e749f4deeb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,33 @@
2014-09-30 Andreas Arnez <arnez@linux.vnet.ibm.com>
+ * amd64obsd-tdep.c (amd64obsd_regset_from_core_section): Remove.
+ (amd64obsd_iterate_over_regset_sections): New.
+ (amd64obsd_core_init_abi): Adjust gdbarch initialization.
+ * i386-cygwin-tdep.c (i386_windows_regset_from_core_section):
+ Remove.
+ (i386_cygwin_init_abi): Clear tdep->sizeof_fpregset. Drop
+ regset_from_core_section initialization.
+ * i386-tdep.c (i386_regset_from_core_section): Remove.
+ (i386_iterate_over_regset_sections): New.
+ (i386_gdbarch_init): Adjust gdbarch initialization.
+ * i386-tdep.h (i386_regset_from_core_section): Remove prototype.
+ (i386_iterate_over_regset_sections): New prototype.
+ * i386obsd-tdep.c (i386obsd_aout_regset_from_core_section):
+ Remove.
+ (i386obsd_aout_iterate_over_regset_sections): New.
+ (i386obsd_aout_init_abi): Adjust gdbarch initialization.
+ * configure.tgt (gdb_target_obs): Add fbsd-tdep.o for all x86 FreeBSD
+ targets.
+ * amd64fbsd-tdep.c (fbsd-tdep.h): Include.
+ (amd64fbsd_init_abi): Call fbsd_init_abi.
+ * i386fbsd-tdep.c (fbsd-tdep.h): Include.
+ (i386fbsd4_init_abi): Call fbsd_init_abi.
+ * amd64fbsd-nat.c (_initialize_amd64fbsd_nat): No longer set
+ target method 'make_corefile_notes'.
+ * i386fbsd-nat.c (_initialize_i386fbsd_nat): Likewise.
+
+2014-09-30 Andreas Arnez <arnez@linux.vnet.ibm.com>
+
* hppa-hpux-tdep.c (hppa_hpux_regset_from_core_section): Remove.
(hppa_hpux_iterate_over_regset_sections): New.
(hppa_hpux_init_abi): Adjust gdbarch initialization.
diff --git a/gdb/amd64fbsd-nat.c b/gdb/amd64fbsd-nat.c
index fe4e009b2c1..df101d0f5f3 100644
--- a/gdb/amd64fbsd-nat.c
+++ b/gdb/amd64fbsd-nat.c
@@ -183,7 +183,6 @@ _initialize_amd64fbsd_nat (void)
t->to_pid_to_exec_file = fbsd_pid_to_exec_file;
t->to_find_memory_regions = fbsd_find_memory_regions;
- t->to_make_corefile_notes = fbsd_make_corefile_notes;
add_target (t);
/* Support debugging kernel virtual memory images. */
diff --git a/gdb/amd64fbsd-tdep.c b/gdb/amd64fbsd-tdep.c
index 07b065ad725..13e14adf79f 100644
--- a/gdb/amd64fbsd-tdep.c
+++ b/gdb/amd64fbsd-tdep.c
@@ -26,6 +26,7 @@
#include "amd64-tdep.h"
#include "bsd-uthread.h"
+#include "fbsd-tdep.h"
#include "solib-svr4.h"
/* Support for signal handlers. */
@@ -182,6 +183,9 @@ amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ /* Generic FreeBSD support. */
+ fbsd_init_abi (info, gdbarch);
+
/* Obviously FreeBSD is BSD-based. */
i386bsd_init_abi (info, gdbarch);
diff --git a/gdb/amd64obsd-tdep.c b/gdb/amd64obsd-tdep.c
index ef0c0c2f853..80300c8d2a8 100644
--- a/gdb/amd64obsd-tdep.c
+++ b/gdb/amd64obsd-tdep.c
@@ -57,20 +57,19 @@ static const struct regset amd64obsd_combined_regset =
NULL, amd64obsd_supply_regset, NULL
};
-static const struct regset *
-amd64obsd_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size)
+static void
+amd64obsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
/* OpenBSD core dumps don't use seperate register sets for the
general-purpose and floating-point registers. */
- if (strcmp (sect_name, ".reg") == 0
- && sect_size >= tdep->sizeof_gregset + I387_SIZEOF_FXSAVE)
- return &amd64obsd_combined_regset;
-
- return NULL;
+ cb (".reg", tdep->sizeof_gregset + I387_SIZEOF_FXSAVE,
+ &amd64obsd_combined_regset, NULL, cb_data);
}
@@ -492,8 +491,8 @@ amd64obsd_core_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
amd64obsd_init_abi (info, gdbarch);
- set_gdbarch_regset_from_core_section
- (gdbarch, amd64obsd_regset_from_core_section);
+ set_gdbarch_iterate_over_regset_sections
+ (gdbarch, amd64obsd_iterate_over_regset_sections);
}
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 01311b248c3..4b09d3a9ef9 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -189,7 +189,7 @@ i[34567]86-*-dicos*)
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
# Target: FreeBSD/i386
gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
- bsd-uthread.o solib-svr4.o"
+ bsd-uthread.o fbsd-tdep.o solib-svr4.o"
;;
i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
# Target: NetBSD/i386
@@ -667,7 +667,7 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
# Target: FreeBSD/amd64
gdb_target_obs="amd64-tdep.o amd64fbsd-tdep.o i386-tdep.o \
i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
- bsd-uthread.o solib-svr4.o"
+ bsd-uthread.o fbsd-tdep.o solib-svr4.o"
;;
x86_64-*-mingw* | x86_64-*-cygwin*)
# Target: MingW/amd64
diff --git a/gdb/i386-cygwin-tdep.c b/gdb/i386-cygwin-tdep.c
index 47c7bde65a0..b8793c142cf 100644
--- a/gdb/i386-cygwin-tdep.c
+++ b/gdb/i386-cygwin-tdep.c
@@ -88,20 +88,6 @@ static int i386_windows_gregset_reg_offset[] =
#define I386_WINDOWS_SIZEOF_GREGSET 716
-/* Return the appropriate register set for the core section identified
- by SECT_NAME and SECT_SIZE. */
-
-static const struct regset *
-i386_windows_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size)
-{
- if (strcmp (sect_name, ".reg") == 0
- && sect_size == I386_WINDOWS_SIZEOF_GREGSET)
- return &i386_gregset;
-
- return NULL;
-}
-
struct cpms_data
{
struct gdbarch *gdbarch;
@@ -235,9 +221,9 @@ i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset);
tdep->sizeof_gregset = I386_WINDOWS_SIZEOF_GREGSET;
+ tdep->sizeof_fpregset = 0;
+
/* Core file support. */
- set_gdbarch_regset_from_core_section
- (gdbarch, i386_windows_regset_from_core_section);
set_gdbarch_core_xfer_shared_libraries
(gdbarch, windows_core_xfer_shared_libraries);
set_gdbarch_core_pid_to_str (gdbarch, i386_windows_core_pid_to_str);
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 8f8cc9972a4..f685a6af3fd 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -3818,22 +3818,19 @@ const struct regset i386_fpregset =
NULL, i386_supply_fpregset, i386_collect_fpregset
};
-/* Return the appropriate register set for the core section identified
- by SECT_NAME and SECT_SIZE. */
+/* Default iterator over core file register note sections. */
-const struct regset *
-i386_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size)
+void
+i386_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
- return &i386_gregset;
-
- if (strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
- return tdep->fpregset;
-
- return NULL;
+ cb (".reg", tdep->sizeof_gregset, &i386_gregset, NULL, cb_data);
+ if (tdep->sizeof_fpregset)
+ cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
}
@@ -8566,10 +8563,9 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* If we have a register mapping, enable the generic core file
support, unless it has already been enabled. */
if (tdep->gregset_reg_offset
- && !gdbarch_regset_from_core_section_p (gdbarch)
&& !gdbarch_iterate_over_regset_sections_p (gdbarch))
- set_gdbarch_regset_from_core_section (gdbarch,
- i386_regset_from_core_section);
+ set_gdbarch_iterate_over_regset_sections
+ (gdbarch, i386_iterate_over_regset_sections);
set_gdbarch_skip_permanent_breakpoint (gdbarch,
i386_skip_permanent_breakpoint);
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index db8f4f7c128..90f40077412 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -393,12 +393,12 @@ extern const struct regset i386_gregset;
/* Floating-point register set. */
extern const struct regset i386_fpregset;
-/* Return the appropriate register set for the core section identified
- by SECT_NAME and SECT_SIZE. */
-extern const struct regset *
- i386_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name, size_t sect_size);
-
+/* Default iterator over core file register note sections. */
+extern void
+ i386_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache);
extern struct displaced_step_closure *i386_displaced_step_copy_insn
(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to,
diff --git a/gdb/i386fbsd-nat.c b/gdb/i386fbsd-nat.c
index 754677f6640..6fafbf03d49 100644
--- a/gdb/i386fbsd-nat.c
+++ b/gdb/i386fbsd-nat.c
@@ -143,7 +143,6 @@ _initialize_i386fbsd_nat (void)
t->to_resume = i386fbsd_resume;
t->to_pid_to_exec_file = fbsd_pid_to_exec_file;
t->to_find_memory_regions = fbsd_find_memory_regions;
- t->to_make_corefile_notes = fbsd_make_corefile_notes;
add_target (t);
/* Support debugging kernel virtual memory images. */
diff --git a/gdb/i386fbsd-tdep.c b/gdb/i386fbsd-tdep.c
index 8942ad362e3..b37427f3ade 100644
--- a/gdb/i386fbsd-tdep.c
+++ b/gdb/i386fbsd-tdep.c
@@ -26,6 +26,7 @@
#include "i386-tdep.h"
#include "i387-tdep.h"
#include "bsd-uthread.h"
+#include "fbsd-tdep.h"
#include "solib-svr4.h"
/* FreeBSD 3.0-RELEASE or later. */
@@ -204,6 +205,9 @@ i386fbsd4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+ /* Generic FreeBSD support. */
+ fbsd_init_abi (info, gdbarch);
+
/* Inherit stuff from older releases. We assume that FreeBSD
4.0-RELEASE always uses ELF. */
i386fbsd_init_abi (info, gdbarch);
diff --git a/gdb/i386obsd-tdep.c b/gdb/i386obsd-tdep.c
index 2b7d48b0d17..1fd414f96c7 100644
--- a/gdb/i386obsd-tdep.c
+++ b/gdb/i386obsd-tdep.c
@@ -154,21 +154,19 @@ static const struct regset i386obsd_aout_gregset =
NULL, i386obsd_aout_supply_regset, NULL
};
-static const struct regset *
-i386obsd_aout_regset_from_core_section (struct gdbarch *gdbarch,
- const char *sect_name,
- size_t sect_size)
+static void
+i386obsd_aout_iterate_over_regset_sections (struct gdbarch *gdbarch,
+ iterate_over_regset_sections_cb *cb,
+ void *cb_data,
+ const struct regcache *regcache)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
/* OpenBSD a.out core dumps don't use seperate register sets for the
general-purpose and floating-point registers. */
- if (strcmp (sect_name, ".reg") == 0
- && sect_size >= tdep->sizeof_gregset + I387_SIZEOF_FSAVE)
- return &i386obsd_aout_gregset;
-
- return NULL;
+ cb (".reg", tdep->sizeof_gregset + I387_SIZEOF_FSAVE,
+ &i386obsd_aout_gregset, NULL, cb_data);
}
@@ -482,8 +480,8 @@ i386obsd_aout_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
i386obsd_init_abi (info, gdbarch);
/* OpenBSD a.out has a single register set. */
- set_gdbarch_regset_from_core_section
- (gdbarch, i386obsd_aout_regset_from_core_section);
+ set_gdbarch_iterate_over_regset_sections
+ (gdbarch, i386obsd_aout_iterate_over_regset_sections);
}
/* OpenBSD ELF. */