summaryrefslogtreecommitdiff
path: root/gdb/arm-linux-nat.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-10-15 19:19:18 +0000
committerDaniel Jacobowitz <drow@false.org>2007-10-15 19:19:18 +0000
commit81adfcedc899da6e7641d2c2d6aad68f60d97735 (patch)
treee1137ec77293084d14043866ea01c9ad0badf798 /gdb/arm-linux-nat.c
parentd5d7db8e2faa95d6265cadc66bb0788ee922d9b1 (diff)
downloadbinutils-gdb-81adfcedc899da6e7641d2c2d6aad68f60d97735.tar.gz
* target-descriptions.c (tdesc_predefined_types): New.
(tdesc_named_type): Use it. (tdesc_type_id, maint_print_c_tdesc_cmd): New functions. (_intialize_target_descriptions): Register "maint print c-tdesc". * features/Makefile (XMLTOC, CFILES, GDB): New macros. (cfiles, %.c): New rules. * features/arm-with-iwmmxt.c, features/mips-linux.c, features/mips64-linux.c: New generated files. * arm-linux-nat.c: Include preparsed description instead of "xml-support.h". (super_xfer_partial, arm_linux_xfer_partial): Remove. (arm_linux_read_description): New function. (_initialize_arm_linux_nat): Set to_read_description instead of to_xfer_partial. Initialize preparsed description. * config/arm/linux.mh (TDEP_XML): Delete. * mips-linux-nat.c: Include preparsed descriptions instead of "xml-support.h". (super_xfer_partial, mips_linux_xfer_partial): Remove. (mips_linux_read_description): New function. (_initialize_mips_linux_nat): Set to_read_description instead of to_xfer_partial. Initialize preparsed description. * config/mips/linux.mh (TDEP_XML): Delete. * Makefile.in (XMLFILES): Remove $(TDEP_XML). (features_headers, arm_with_iwmmxt_c, mips_linux_c) (mips64_linux_c): New macros. (arm-linux-nat.o, mips-linux-nat.o): Update. * gdb.texinfo (Maintenance Commands): Document "maint print c-tdesc".
Diffstat (limited to 'gdb/arm-linux-nat.c')
-rw-r--r--gdb/arm-linux-nat.c59
1 files changed, 21 insertions, 38 deletions
diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
index 6f1056872a4..bc005934a9b 100644
--- a/gdb/arm-linux-nat.c
+++ b/gdb/arm-linux-nat.c
@@ -25,7 +25,6 @@
#include "target.h"
#include "linux-nat.h"
#include "target-descriptions.h"
-#include "xml-support.h"
#include "arm-tdep.h"
#include "arm-linux-tdep.h"
@@ -41,6 +40,8 @@
/* Defines ps_err_e, struct ps_prochandle. */
#include "gdb_proc_service.h"
+#include "features/arm-with-iwmmxt.c"
+
#ifndef PTRACE_GET_THREAD_AREA
#define PTRACE_GET_THREAD_AREA 22
#endif
@@ -571,42 +572,23 @@ get_linux_version (unsigned int *vmajor,
return ((*vmajor << 16) | (*vminor << 8) | *vrelease);
}
-static LONGEST (*super_xfer_partial) (struct target_ops *, enum target_object,
- const char *, gdb_byte *, const gdb_byte *,
- ULONGEST, LONGEST);
-
-static LONGEST
-arm_linux_xfer_partial (struct target_ops *ops,
- enum target_object object,
- const char *annex,
- gdb_byte *readbuf, const gdb_byte *writebuf,
- ULONGEST offset, LONGEST len)
+static const struct target_desc *
+arm_linux_read_description (struct target_ops *ops)
{
- if (object == TARGET_OBJECT_AVAILABLE_FEATURES)
- {
- if (annex != NULL && strcmp (annex, "target.xml") == 0)
- {
- int ret;
- char regbuf[IWMMXT_REGS_SIZE];
-
- ret = ptrace (PTRACE_GETWMMXREGS, GET_THREAD_ID (inferior_ptid),
- 0, regbuf);
- if (ret < 0)
- arm_linux_has_wmmx_registers = 0;
- else
- arm_linux_has_wmmx_registers = 1;
-
- if (arm_linux_has_wmmx_registers)
- annex = "arm-with-iwmmxt.xml";
- else
- return -1;
- }
-
- return xml_builtin_xfer_partial (annex, readbuf, writebuf, offset, len);
- }
+ int ret;
+ char regbuf[IWMMXT_REGS_SIZE];
- return super_xfer_partial (ops, object, annex, readbuf, writebuf,
- offset, len);
+ ret = ptrace (PTRACE_GETWMMXREGS, GET_THREAD_ID (inferior_ptid),
+ 0, regbuf);
+ if (ret < 0)
+ arm_linux_has_wmmx_registers = 0;
+ else
+ arm_linux_has_wmmx_registers = 1;
+
+ if (arm_linux_has_wmmx_registers)
+ return tdesc_arm_with_iwmmxt;
+ else
+ return NULL;
}
void _initialize_arm_linux_nat (void);
@@ -625,10 +607,11 @@ _initialize_arm_linux_nat (void)
t->to_fetch_registers = arm_linux_fetch_inferior_registers;
t->to_store_registers = arm_linux_store_inferior_registers;
- /* Override the default to_xfer_partial. */
- super_xfer_partial = t->to_xfer_partial;
- t->to_xfer_partial = arm_linux_xfer_partial;
+ t->to_read_description = arm_linux_read_description;
/* Register the target. */
linux_nat_add_target (t);
+
+ /* Initialize the standard target descriptions. */
+ initialize_tdesc_arm_with_iwmmxt ();
}