diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9211708d432..7c506578738 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,29 @@ +2020-03-16 Anton Kolesov + Shahab Vahedi + + * Makefile.in: Add arch/arc.o + * configure.tgt: Likewise. + * arc-tdep.c (arc_tdesc_init): Use arc_read_description. + (_initialize_arc_tdep): Don't initialize old target descriptions. + (arc_read_description): New function to cache target descriptions. + * arc-tdep.h (arc_read_description): Add proto type. + * arch/arc.c: New file. + * arch/arc.h: Likewise. + * features/Makefile: Replace old target descriptions with new. + * features/arc-arcompact.c: Remove. + * features/arc-arcompact.xml: Likewise. + * features/arc-v2.c: Likewise + * features/arc-v2.xml: Likewise + * features/arc/aux-arcompact.xml: New file. + * features/arc/aux-v2.xml: Likewise. + * features/arc/core-arcompact.xml: Likewise. + * features/arc/core-v2.xml: Likewise. + * features/arc/aux-arcompact.c: Generate. + * features/arc/aux-v2.c: Likewise. + * features/arc/core-arcompact.c: Likewise. + * features/arc/core-v2.c: Likewise. + * target-descriptions (maint_print_c_tdesc_cmd): Support ARC features. + 2020-03-16 Tom Tromey PR gdb/25663: diff --git a/gdb/Makefile.in b/gdb/Makefile.in index d225b7d7667..0c331af4bff 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -697,6 +697,7 @@ ALL_TARGET_OBS = \ aarch32-tdep.o \ arc-tdep.o \ arch/aarch32.o \ + arch/arc.o \ arch/arm.o \ arch/arm-get-next-pcs.o \ arch/arm-linux.o \ @@ -1440,6 +1441,7 @@ HFILES_NO_SRCDIR = \ arch/aarch32.h \ arch/aarch64.h \ arch/aarch64-insn.h \ + arch/arc.h \ arch/arm.h \ arch/i386.h \ arch/ppc-linux-common.h \ diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c index ac98f03efc1..3020099c335 100644 --- a/gdb/arc-tdep.c +++ b/gdb/arc-tdep.c @@ -28,21 +28,20 @@ #include "gdbcore.h" #include "gdbcmd.h" #include "objfiles.h" +#include "osabi.h" #include "prologue-value.h" +#include "target-descriptions.h" #include "trad-frame.h" /* ARC header files. */ #include "opcode/arc.h" #include "opcodes/arc-dis.h" #include "arc-tdep.h" +#include "arch/arc.h" /* Standard headers. */ #include -/* Default target descriptions. */ -#include "features/arc-v2.c" -#include "features/arc-arcompact.c" - /* The frame unwind cache for ARC. */ struct arc_frame_cache @@ -147,6 +146,9 @@ static const char *const core_arcompact_register_names[] = { static char *arc_disassembler_options = NULL; +/* Possible arc target descriptors. */ +static struct target_desc *tdesc_arc_list[ARC_SYS_TYPE_NUM]; + /* Functions are sorted in the order as they are used in the _initialize_arc_tdep (), which uses the same order as gdbarch.h. Static functions are defined before the first invocation. */ @@ -1750,21 +1752,13 @@ arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc, const char *const *core_regs; const char *core_feature_name; - /* If target doesn't provide a description - use default one. */ + /* If target doesn't provide a description, use the default ones. */ if (!tdesc_has_registers (tdesc_loc)) { if (is_arcv2) - { - tdesc_loc = tdesc_arc_v2; - if (arc_debug) - debug_printf ("arc: Using default register set for ARC v2.\n"); - } + tdesc_loc = arc_read_description (ARC_SYS_TYPE_ARCV2); else - { - tdesc_loc = tdesc_arc_arcompact; - if (arc_debug) - debug_printf ("arc: Using default register set for ARCompact.\n"); - } + tdesc_loc = arc_read_description (ARC_SYS_TYPE_ARCOMPACT); } else { @@ -2145,15 +2139,44 @@ dump_arc_instruction_command (const char *args, int from_tty) arc_insn_dump (insn); } +/* See arc-tdep.h. */ + +const target_desc * +arc_read_description (arc_sys_type sys_type) +{ + if (arc_debug) + debug_printf ("arc: Reading target description for \"%s\".\n", + arc_sys_type_to_str (sys_type)); + + gdb_assert ((sys_type >= 0) && (sys_type < ARC_SYS_TYPE_NUM)); + struct target_desc *tdesc = tdesc_arc_list[sys_type]; + + if (tdesc == nullptr) + { + tdesc = arc_create_target_description (sys_type); + tdesc_arc_list[sys_type] = tdesc; + + if (arc_debug) + { + const char *arch = tdesc_architecture_name (tdesc); + const char *abi = tdesc_osabi_name (tdesc); + arch = arch != NULL ? arch : ""; + abi = abi != NULL ? abi : ""; + debug_printf ("arc: Created target description for " + "\"%s\": arch=\"%s\", ABI=\"%s\"\n", + arc_sys_type_to_str (sys_type), arch, abi); + } + } + + return tdesc; +} + void _initialize_arc_tdep (); void _initialize_arc_tdep () { gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep); - initialize_tdesc_arc_v2 (); - initialize_tdesc_arc_arcompact (); - /* Register ARC-specific commands with gdb. */ /* Add root prefix command for "maintenance print arc" commands. */ diff --git a/gdb/arc-tdep.h b/gdb/arc-tdep.h index bd0096741ff..d72332c7638 100644 --- a/gdb/arc-tdep.h +++ b/gdb/arc-tdep.h @@ -23,6 +23,7 @@ /* Need disassemble_info. */ #include "dis-asm.h" +#include "arch/arc.h" /* To simplify GDB code this enum assumes that internal regnums should be same as architectural register numbers, i.e. PCL regnum is 63. This allows to @@ -163,4 +164,7 @@ CORE_ADDR arc_insn_get_branch_target (const struct arc_instruction &insn); CORE_ADDR arc_insn_get_linear_next_pc (const struct arc_instruction &insn); +/* Get the correct ARC target description for the given system type. */ +const target_desc *arc_read_description (arc_sys_type sys_type); + #endif /* ARC_TDEP_H */ diff --git a/gdb/arch/arc.c b/gdb/arch/arc.c new file mode 100644 index 00000000000..9552b4aff97 --- /dev/null +++ b/gdb/arch/arc.c @@ -0,0 +1,58 @@ +/* Copyright (C) 2017-2020 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 "gdbsupport/common-defs.h" +#include + +#include "arc.h" + +/* Target description features. */ +#include "features/arc/core-v2.c" +#include "features/arc/aux-v2.c" +#include "features/arc/core-arcompact.c" +#include "features/arc/aux-arcompact.c" + +/* See arc.h. */ + +target_desc * +arc_create_target_description (arc_sys_type sys_type) +{ + target_desc *tdesc = allocate_target_description (); + + long regnum = 0; + +#ifndef IN_PROCESS_AGENT + if (sys_type == ARC_SYS_TYPE_ARCV2) + set_tdesc_architecture (tdesc, "arc:ARCv2"); + else + set_tdesc_architecture (tdesc, "arc:ARC700"); +#endif + + if (sys_type == ARC_SYS_TYPE_ARCV2) + { + regnum = create_feature_arc_core_v2 (tdesc, regnum); + regnum = create_feature_arc_aux_v2 (tdesc, regnum); + } + else + { + regnum = create_feature_arc_core_arcompact (tdesc, regnum); + regnum = create_feature_arc_aux_arcompact (tdesc, regnum); + } + + return tdesc; +} diff --git a/gdb/arch/arc.h b/gdb/arch/arc.h new file mode 100644 index 00000000000..fd806ae7d34 --- /dev/null +++ b/gdb/arch/arc.h @@ -0,0 +1,48 @@ +/* Copyright (C) 2017-2020 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 . */ + +#ifndef ARCH_ARC_H +#define ARCH_ARC_H + +#include "gdbsupport/tdesc.h" + +/* Supported ARC system hardware types. */ +enum arc_sys_type +{ + ARC_SYS_TYPE_ARCOMPACT = 0, /* ARC600 or ARC700 */ + ARC_SYS_TYPE_ARCV2, /* ARC EM or ARC HS */ + ARC_SYS_TYPE_NUM +}; + +static inline const char * +arc_sys_type_to_str (const arc_sys_type type) +{ + switch (type) + { + case ARC_SYS_TYPE_ARCOMPACT: + return "ARC_SYS_TYPE_ARCOMPACT"; + case ARC_SYS_TYPE_ARCV2: + return "ARC_SYS_TYPE_ARCV2"; + default: + return "Invalid"; + } +} + +/* Create target description for the specified system type. */ +target_desc *arc_create_target_description (arc_sys_type sys_type); + +#endif /* ARCH_ARC_H */ diff --git a/gdb/configure.tgt b/gdb/configure.tgt index 34f703009ea..b3f31af763c 100644 --- a/gdb/configure.tgt +++ b/gdb/configure.tgt @@ -59,7 +59,7 @@ alpha*-*-*) arc*-*-*) # Target: Unidentified ARC target - cpu_obs="arc-tdep.o" + cpu_obs="arc-tdep.o arch/arc.o" ;; arm*-*-*) diff --git a/gdb/features/Makefile b/gdb/features/Makefile index 9a98b0542c4..cc65baa6eda 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -108,8 +108,6 @@ OUTPUTS = $(patsubst %,$(outdir)/%.dat,$(WHICH)) # --enable-targets=all GDB. You can override this by passing XMLTOC # to make on the command line. XMLTOC = \ - arc-v2.xml \ - arc-arcompact.xml \ microblaze-with-stack-protect.xml \ microblaze.xml \ mips-dsp-linux.xml \ @@ -206,6 +204,10 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl FEATURE_XMLFILES = aarch64-core.xml \ aarch64-fpu.xml \ aarch64-pauth.xml \ + arc/core-v2.xml \ + arc/aux-v2.xml \ + arc/core-arcompact.xml \ + arc/aux-arcompact.xml \ arm/arm-core.xml \ arm/arm-fpa.xml \ arm/arm-m-profile.xml \ diff --git a/gdb/features/arc-arcompact.c b/gdb/features/arc-arcompact.c deleted file mode 100644 index f81f0a26ba2..00000000000 --- a/gdb/features/arc-arcompact.c +++ /dev/null @@ -1,74 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: arc-arcompact.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_arc_arcompact; -static void -initialize_tdesc_arc_arcompact (void) -{ - struct target_desc *result = allocate_target_description (); - set_tdesc_architecture (result, bfd_scan_arch ("ARC700")); - - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.arcompact"); - tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "ilink1", 29, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "ilink2", 30, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); - tdesc_type_with_fields *type_with_fields; - type_with_fields = tdesc_create_flags (feature, "status32_type", 4); - tdesc_add_flag (type_with_fields, 0, "H"); - tdesc_add_bitfield (type_with_fields, "E", 1, 2); - tdesc_add_bitfield (type_with_fields, "A", 3, 4); - tdesc_add_flag (type_with_fields, 5, "AE"); - tdesc_add_flag (type_with_fields, 6, "DE"); - tdesc_add_flag (type_with_fields, 7, "U"); - tdesc_add_flag (type_with_fields, 8, "V"); - tdesc_add_flag (type_with_fields, 9, "C"); - tdesc_add_flag (type_with_fields, 10, "N"); - tdesc_add_flag (type_with_fields, 11, "Z"); - tdesc_add_flag (type_with_fields, 12, "L"); - tdesc_add_flag (type_with_fields, 13, "R"); - tdesc_add_flag (type_with_fields, 14, "SE"); - - tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type"); - - tdesc_arc_arcompact = result; -} diff --git a/gdb/features/arc-arcompact.xml b/gdb/features/arc-arcompact.xml deleted file mode 100644 index 31acbaf9398..00000000000 --- a/gdb/features/arc-arcompact.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - arc:ARC700 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gdb/features/arc-v2.c b/gdb/features/arc-v2.c deleted file mode 100644 index b2254b293cf..00000000000 --- a/gdb/features/arc-v2.c +++ /dev/null @@ -1,78 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: arc-v2.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_arc_v2; -static void -initialize_tdesc_arc_v2 (void) -{ - struct target_desc *result = allocate_target_description (); - set_tdesc_architecture (result, bfd_scan_arch ("ARCv2")); - - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.v2"); - tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "ilink", 29, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); - tdesc_type_with_fields *type_with_fields; - type_with_fields = tdesc_create_flags (feature, "status32_type", 4); - tdesc_add_flag (type_with_fields, 0, "H"); - tdesc_add_bitfield (type_with_fields, "E", 1, 4); - tdesc_add_flag (type_with_fields, 5, "AE"); - tdesc_add_flag (type_with_fields, 6, "DE"); - tdesc_add_flag (type_with_fields, 7, "U"); - tdesc_add_flag (type_with_fields, 8, "V"); - tdesc_add_flag (type_with_fields, 9, "C"); - tdesc_add_flag (type_with_fields, 10, "N"); - tdesc_add_flag (type_with_fields, 11, "Z"); - tdesc_add_flag (type_with_fields, 12, "L"); - tdesc_add_flag (type_with_fields, 13, "DZ"); - tdesc_add_flag (type_with_fields, 14, "SC"); - tdesc_add_flag (type_with_fields, 15, "ES"); - tdesc_add_bitfield (type_with_fields, "RB", 16, 18); - tdesc_add_flag (type_with_fields, 19, "AD"); - tdesc_add_flag (type_with_fields, 20, "US"); - tdesc_add_flag (type_with_fields, 31, "IE"); - - tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type"); - - tdesc_arc_v2 = result; -} diff --git a/gdb/features/arc-v2.xml b/gdb/features/arc-v2.xml deleted file mode 100644 index 2dae670158c..00000000000 --- a/gdb/features/arc-v2.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - arc:ARCv2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gdb/features/arc/aux-arcompact.c b/gdb/features/arc/aux-arcompact.c new file mode 100644 index 00000000000..d8e8c74e639 --- /dev/null +++ b/gdb/features/arc/aux-arcompact.c @@ -0,0 +1,31 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aux-arcompact.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_aux_arcompact (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); + tdesc_type_with_fields *type_with_fields; + type_with_fields = tdesc_create_flags (feature, "status32_type", 4); + tdesc_add_flag (type_with_fields, 0, "H"); + tdesc_add_bitfield (type_with_fields, "E", 1, 2); + tdesc_add_bitfield (type_with_fields, "A", 3, 4); + tdesc_add_flag (type_with_fields, 5, "AE"); + tdesc_add_flag (type_with_fields, 6, "DE"); + tdesc_add_flag (type_with_fields, 7, "U"); + tdesc_add_flag (type_with_fields, 8, "V"); + tdesc_add_flag (type_with_fields, 9, "C"); + tdesc_add_flag (type_with_fields, 10, "N"); + tdesc_add_flag (type_with_fields, 11, "Z"); + tdesc_add_flag (type_with_fields, 12, "L"); + tdesc_add_flag (type_with_fields, 13, "R"); + tdesc_add_flag (type_with_fields, 14, "SE"); + + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type"); + return regnum; +} diff --git a/gdb/features/arc/aux-arcompact.xml b/gdb/features/arc/aux-arcompact.xml new file mode 100644 index 00000000000..bf68112f5db --- /dev/null +++ b/gdb/features/arc/aux-arcompact.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb/features/arc/aux-v2.c b/gdb/features/arc/aux-v2.c new file mode 100644 index 00000000000..6290b9b1a7f --- /dev/null +++ b/gdb/features/arc/aux-v2.c @@ -0,0 +1,35 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aux-v2.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_aux_v2 (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); + tdesc_type_with_fields *type_with_fields; + type_with_fields = tdesc_create_flags (feature, "status32_type", 4); + tdesc_add_flag (type_with_fields, 0, "H"); + tdesc_add_bitfield (type_with_fields, "E", 1, 4); + tdesc_add_flag (type_with_fields, 5, "AE"); + tdesc_add_flag (type_with_fields, 6, "DE"); + tdesc_add_flag (type_with_fields, 7, "U"); + tdesc_add_flag (type_with_fields, 8, "V"); + tdesc_add_flag (type_with_fields, 9, "C"); + tdesc_add_flag (type_with_fields, 10, "N"); + tdesc_add_flag (type_with_fields, 11, "Z"); + tdesc_add_flag (type_with_fields, 12, "L"); + tdesc_add_flag (type_with_fields, 13, "DZ"); + tdesc_add_flag (type_with_fields, 14, "SC"); + tdesc_add_flag (type_with_fields, 15, "ES"); + tdesc_add_bitfield (type_with_fields, "RB", 16, 18); + tdesc_add_flag (type_with_fields, 19, "AD"); + tdesc_add_flag (type_with_fields, 20, "US"); + tdesc_add_flag (type_with_fields, 31, "IE"); + + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type"); + return regnum; +} diff --git a/gdb/features/arc/aux-v2.xml b/gdb/features/arc/aux-v2.xml new file mode 100644 index 00000000000..2701fad72dc --- /dev/null +++ b/gdb/features/arc/aux-v2.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb/features/arc/core-arcompact.c b/gdb/features/arc/core-arcompact.c new file mode 100644 index 00000000000..7d9a4b23c21 --- /dev/null +++ b/gdb/features/arc/core-arcompact.c @@ -0,0 +1,47 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: core-arcompact.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_core_arcompact (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.arcompact"); + tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "ilink1", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "ilink2", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32"); + tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff --git a/gdb/features/arc/core-arcompact.xml b/gdb/features/arc/core-arcompact.xml new file mode 100644 index 00000000000..9209891b41a --- /dev/null +++ b/gdb/features/arc/core-arcompact.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb/features/arc/core-v2.c b/gdb/features/arc/core-v2.c new file mode 100644 index 00000000000..d37da990457 --- /dev/null +++ b/gdb/features/arc/core-v2.c @@ -0,0 +1,47 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: core-v2.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_core_v2 (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.v2"); + tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "ilink", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "r30", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32"); + tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff --git a/gdb/features/arc/core-v2.xml b/gdb/features/arc/core-v2.xml new file mode 100644 index 00000000000..1b17968fb2e --- /dev/null +++ b/gdb/features/arc/core-v2.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 04711ba2fa5..4194819d9ab 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -1715,7 +1715,8 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) || startswith (filename_after_features.c_str (), "riscv/") || startswith (filename_after_features.c_str (), "tic6x-") || startswith (filename_after_features.c_str (), "aarch64") - || startswith (filename_after_features.c_str (), "arm/")) + || startswith (filename_after_features.c_str (), "arm/") + || startswith (filename_after_features.c_str (), "arc/")) { print_c_feature v (filename_after_features);