diff options
author | Alan Hayward <alan.hayward@arm.com> | 2017-11-24 10:00:54 +0000 |
---|---|---|
committer | Alan Hayward <alan.hayward@arm.com> | 2017-11-24 11:18:19 +0000 |
commit | da434ccbc3e0ed843700790cd16c1d4bb5882460 (patch) | |
tree | 06717af286e287317183ff9d739c142217180fe5 | |
parent | 98ead37e9735438986934f9f1f35f020a093fe07 (diff) | |
download | gdb-da434ccbc3e0ed843700790cd16c1d4bb5882460.zip gdb-da434ccbc3e0ed843700790cd16c1d4bb5882460.tar.gz gdb-da434ccbc3e0ed843700790cd16c1d4bb5882460.tar.bz2 |
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/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/Makefile.in | 2 | ||||
-rw-r--r-- | gdb/aarch64-linux-nat.c | 2 | ||||
-rw-r--r-- | gdb/aarch64-linux-tdep.c | 2 | ||||
-rw-r--r-- | gdb/aarch64-tdep.c | 16 | ||||
-rw-r--r-- | gdb/aarch64-tdep.h | 2 | ||||
-rw-r--r-- | gdb/arch/aarch64.c | 30 | ||||
-rw-r--r-- | gdb/arch/aarch64.h | 4 | ||||
-rw-r--r-- | gdb/configure.tgt | 2 |
9 files changed, 69 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c464f29..f7ad590 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 0a1a769..ec9900c 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 de18edd..9e317c0 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 b6052ba..c2c2c30 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 85cabfd..541a909 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 2597443..d9cbd35 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 0000000..95d9906 --- /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 b527405..ebb78c4 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 1fce079..daec0a7 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 \ |