summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2017-11-24 10:00:54 +0000
committerAlan Hayward <alan.hayward@arm.com>2017-11-24 11:18:19 +0000
commitda434ccbc3e0ed843700790cd16c1d4bb5882460 (patch)
tree06717af286e287317183ff9d739c142217180fe5
parent98ead37e9735438986934f9f1f35f020a093fe07 (diff)
downloadbinutils-gdb-da434ccbc3e0ed843700790cd16c1d4bb5882460.tar.gz
Add aarch64_create_target_description
gdb/ * Makefile.in: Add new files. * aarch64-linux-nat.c (aarch64_linux_read_description): Call aarch64_read_description. * aarch64-linux-tdep.c (aarch64_linux_core_read_description): Call aarch64_read_description. * aarch64-tdep.c (aarch64_read_description): New function. (aarch64_gdbarch_init): Call aarch64_read_description. * aarch64-tdep.h (aarch64_read_description): New function. * arch/aarch64.c: New file. * configure.tgt: Add new files.
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/Makefile.in2
-rw-r--r--gdb/aarch64-linux-nat.c2
-rw-r--r--gdb/aarch64-linux-tdep.c2
-rw-r--r--gdb/aarch64-tdep.c16
-rw-r--r--gdb/aarch64-tdep.h2
-rw-r--r--gdb/arch/aarch64.c30
-rw-r--r--gdb/arch/aarch64.h4
-rw-r--r--gdb/configure.tgt2
9 files changed, 69 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c464f295ebf..f7ad590d188 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+
+2017-11-24 Alan Hayward <alan.hayward@arm.com>
+
+ * Makefile.in: Add new files.
+ * aarch64-linux-nat.c (aarch64_linux_read_description): Call
+ aarch64_read_description.
+ * aarch64-linux-tdep.c (aarch64_linux_core_read_description):
+ Call aarch64_read_description.
+ * aarch64-tdep.c (aarch64_read_description): New function.
+ (aarch64_gdbarch_init): Call aarch64_read_description.
+ * aarch64-tdep.h (aarch64_read_description): New function.
+ * arch/aarch64.c: New file.
+ * configure.tgt: Add new files.
+
2017-11-24 Yao Qi <yao.qi@linaro.org>
* mi/mi-main.c (register_changed_p): Update.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 0a1a7695413..ec9900ca1df 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -783,6 +783,7 @@ ALL_64_TARGET_OBS = \
amd64-sol2-tdep.o \
amd64-tdep.o \
amd64-windows-tdep.o \
+ arch/aarch64.o \
arch/aarch64-insn.o \
arch/amd64.o \
ia64-linux-tdep.o \
@@ -1515,6 +1516,7 @@ HFILES_NO_SRCDIR = \
xml-syscall.h \
xml-tdesc.h \
xtensa-tdep.h \
+ arch/aarch64.h \
arch/aarch64-insn.h \
arch/arm.h \
arch/i386.h \
diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index de18eddbaba..9e317c04e4b 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -501,7 +501,7 @@ aarch64_linux_read_description (struct target_ops *ops)
if (ret == 0)
return tdesc_arm_with_neon;
else
- return tdesc_aarch64;
+ return aarch64_read_description ();
}
/* Convert a native/host siginfo object, into/from the siginfo in the
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index b6052bafd6d..c2c2c309338 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -244,7 +244,7 @@ aarch64_linux_core_read_description (struct gdbarch *gdbarch,
if (target_auxv_search (target, AT_HWCAP, &aarch64_hwcap) != 1)
return NULL;
- return tdesc_aarch64;
+ return aarch64_read_description ();
}
/* Implementation of `gdbarch_stap_is_single_operand', as defined in
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 85cabfd215c..541a909edaa 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -2828,6 +2828,20 @@ aarch64_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
return 1;
}
+/* Get the correct target description. */
+
+const target_desc *
+aarch64_read_description ()
+{
+ static target_desc *aarch64_tdesc = NULL;
+ target_desc **tdesc = &aarch64_tdesc;
+
+ if (*tdesc == NULL)
+ *tdesc = aarch64_create_target_description ();
+
+ return *tdesc;
+}
+
/* Initialize the current architecture based on INFO. If possible,
re-use an architecture from ARCHES, which is a list of
architectures already created during this debugging session.
@@ -2851,7 +2865,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Ensure we always have a target descriptor. */
if (!tdesc_has_registers (tdesc))
- tdesc = tdesc_aarch64;
+ tdesc = aarch64_read_description ();
gdb_assert (tdesc);
diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h
index 2597443560f..d9cbd353f3f 100644
--- a/gdb/aarch64-tdep.h
+++ b/gdb/aarch64-tdep.h
@@ -75,7 +75,7 @@ struct gdbarch_tdep
int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number);
};
-extern struct target_desc *tdesc_aarch64;
+const target_desc *aarch64_read_description ();
extern int aarch64_process_record (struct gdbarch *gdbarch,
struct regcache *regcache, CORE_ADDR addr);
diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c
new file mode 100644
index 00000000000..95d9906f10e
--- /dev/null
+++ b/gdb/arch/aarch64.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2017 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 3 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, see <http://www.gnu.org/licenses/>. */
+
+
+#include "aarch64.h"
+
+extern struct target_desc *tdesc_aarch64;
+
+/* Create the aarch64 target description. */
+
+target_desc *
+aarch64_create_target_description ()
+{
+ return tdesc_aarch64;
+}
+
diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h
index b52740529b1..ebb78c4fa80 100644
--- a/gdb/arch/aarch64.h
+++ b/gdb/arch/aarch64.h
@@ -20,6 +20,10 @@
#ifndef ARCH_AARCH64_H
#define ARCH_AARCH64_H
+#include "tdesc.h"
+
+target_desc *aarch64_create_target_description ();
+
/* Register numbers of various important registers. */
enum aarch64_regnum
{
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 1fce0798e24..daec0a7bcd3 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -114,7 +114,7 @@ aarch64*-*-freebsd*)
aarch64*-*-linux*)
# Target: AArch64 linux
- gdb_target_obs="aarch64-linux-tdep.o \
+ gdb_target_obs="aarch64-linux-tdep.o arch/aarch64.o\
arch/arm.o arch/arm-linux.o arch/arm-get-next-pcs.o \
arm-tdep.o arm-linux-tdep.o \
glibc-tdep.o linux-tdep.o solib-svr4.o \