From: Alan Hayward Date: Fri, 24 Nov 2017 10:00:54 +0000 (+0000) Subject: Add aarch64_create_target_description X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=da434ccbc3e0ed843700790cd16c1d4bb5882460;p=binutils-gdb.git 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. --- 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 + + * 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 * 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 . */ + + +#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 \