+2020-03-16 Anton Kolesov <anton.kolesov@synopsys.com>
+ Shahab Vahedi <shahab@synopsys.com>
+
+ * 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 <tromey@adacore.com>
PR gdb/25663:
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 \
arch/aarch32.h \
arch/aarch64.h \
arch/aarch64-insn.h \
+ arch/arc.h \
arch/arm.h \
arch/i386.h \
arch/ppc-linux-common.h \
#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 <algorithm>
-/* Default target descriptions. */
-#include "features/arc-v2.c"
-#include "features/arc-arcompact.c"
-
/* The frame unwind cache for ARC. */
struct arc_frame_cache
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. */
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
{
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. */
/* 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
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 */
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+
+#include "gdbsupport/common-defs.h"
+#include <stdlib.h>
+
+#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;
+}
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+#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 */
arc*-*-*)
# Target: Unidentified ARC target
- cpu_obs="arc-tdep.o"
+ cpu_obs="arc-tdep.o arch/arc.o"
;;
arm*-*-*)
# --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 \
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 \
+++ /dev/null
-/* 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;
-}
+++ /dev/null
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
-
- Copying and distribution of this file, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved. -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
- <architecture>arc:ARC700</architecture>
- <!-- No OSABI for bare metal. -->
- <!-- No compatibility for ARC. -->
-
- <feature name="org.gnu.gdb.arc.core.arcompact">
- <reg name="r0" bitsize="32"/>
- <reg name="r1" bitsize="32"/>
- <reg name="r2" bitsize="32"/>
- <reg name="r3" bitsize="32"/>
- <reg name="r4" bitsize="32"/>
- <reg name="r5" bitsize="32"/>
- <reg name="r6" bitsize="32"/>
- <reg name="r7" bitsize="32"/>
- <reg name="r8" bitsize="32"/>
- <reg name="r9" bitsize="32"/>
- <reg name="r10" bitsize="32"/>
- <reg name="r11" bitsize="32"/>
- <reg name="r12" bitsize="32"/>
- <reg name="r13" bitsize="32"/>
- <reg name="r14" bitsize="32"/>
- <reg name="r15" bitsize="32"/>
- <reg name="r16" bitsize="32"/>
- <reg name="r17" bitsize="32"/>
- <reg name="r18" bitsize="32"/>
- <reg name="r19" bitsize="32"/>
- <reg name="r20" bitsize="32"/>
- <reg name="r21" bitsize="32"/>
- <reg name="r22" bitsize="32"/>
- <reg name="r23" bitsize="32"/>
- <reg name="r24" bitsize="32"/>
- <reg name="r25" bitsize="32"/>
-
- <!-- ARC core data pointer registers. -->
- <reg name="gp" bitsize="32" type="data_ptr"/>
- <reg name="fp" bitsize="32" type="data_ptr"/>
- <reg name="sp" bitsize="32" type="data_ptr"/>
-
- <!-- Code pointers. -->
- <reg name="ilink1" bitsize="32" type="code_ptr"/>
- <reg name="ilink2" bitsize="32" type="code_ptr"/>
- <reg name="blink" bitsize="32" type="code_ptr"/>
-
- <!-- Here goes extension core registers: r32 - r59 -->
-
- <!-- Loop counter. -->
- <reg name="lp_count" bitsize="32" type="uint32"/>
-
- <!-- r61 is a reserved register address. -->
-
- <!-- r62 is a long immediate value, not a real register. -->
-
- <!-- 4-byte aligned read-only program counter. -->
- <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
- </feature>
-
- <feature name="org.gnu.gdb.arc.aux-minimal">
- <flags id="status32_type" size="4">
- <field name="H" start="0" end="0"/>
- <field name="E" start="1" end="2"/>
- <field name="A" start="3" end="4"/>
- <field name="AE" start="5" end="5"/>
- <field name="DE" start="6" end="6"/>
- <field name="U" start="7" end="7"/>
- <field name="V" start="8" end="8"/>
- <field name="C" start="9" end="9"/>
- <field name="N" start="10" end="10"/>
- <field name="Z" start="11" end="11"/>
- <field name="L" start="12" end="12"/>
- <field name="R" start="13" end="13"/>
- <field name="SE" start="14" end="14"/>
- </flags>
-
- <reg name="pc" bitsize="32" type="code_ptr"/>
- <reg name="status32" bitsize="32" type="status32_type"/>
- </feature>
-</target>
+++ /dev/null
-/* 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;
-}
+++ /dev/null
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
-
- Copying and distribution of this file, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved. -->
-
-<!DOCTYPE target SYSTEM "gdb-target.dtd">
-<target>
- <architecture>arc:ARCv2</architecture>
- <!-- No OSABI for bare metal. -->
- <!-- No compatibility for ARC. -->
-
- <feature name="org.gnu.gdb.arc.core.v2">
- <reg name="r0" bitsize="32"/>
- <reg name="r1" bitsize="32"/>
- <reg name="r2" bitsize="32"/>
- <reg name="r3" bitsize="32"/>
- <reg name="r4" bitsize="32"/>
- <reg name="r5" bitsize="32"/>
- <reg name="r6" bitsize="32"/>
- <reg name="r7" bitsize="32"/>
- <reg name="r8" bitsize="32"/>
- <reg name="r9" bitsize="32"/>
- <reg name="r10" bitsize="32"/>
- <reg name="r11" bitsize="32"/>
- <reg name="r12" bitsize="32"/>
- <reg name="r13" bitsize="32"/>
- <reg name="r14" bitsize="32"/>
- <reg name="r15" bitsize="32"/>
- <reg name="r16" bitsize="32"/>
- <reg name="r17" bitsize="32"/>
- <reg name="r18" bitsize="32"/>
- <reg name="r19" bitsize="32"/>
- <reg name="r20" bitsize="32"/>
- <reg name="r21" bitsize="32"/>
- <reg name="r22" bitsize="32"/>
- <reg name="r23" bitsize="32"/>
- <reg name="r24" bitsize="32"/>
- <reg name="r25" bitsize="32"/>
-
- <!-- ARC core data pointer registers. -->
- <reg name="gp" bitsize="32" type="data_ptr"/>
- <reg name="fp" bitsize="32" type="data_ptr"/>
- <reg name="sp" bitsize="32" type="data_ptr"/>
-
- <!-- Code pointers. R30 is general purpose, but it used to be ILINK2 in
- ARCompact, thus its odd position in between of special purpose registers.
- GCC does't use this register, so it isn't a member of a general group. -->
- <reg name="ilink" bitsize="32" type="code_ptr"/>
- <reg name="r30" bitsize="32" group=""/>
- <reg name="blink" bitsize="32" type="code_ptr"/>
-
- <!-- Here goes extension core registers: r32 - r57. -->
- <!-- Here goes ACCL/ACCH registers, r58, r59. -->
-
- <!-- Loop counter. -->
- <reg name="lp_count" bitsize="32" type="uint32"/>
-
- <!-- r61 is a reserved register address. -->
-
- <!-- r62 is a long immediate value, not a real register. -->
-
- <!-- 4-byte aligned read-only program counter. -->
- <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
- </feature>
-
- <feature name="org.gnu.gdb.arc.aux-minimal">
- <flags id="status32_type" size="4">
- <field name="H" start="0" end="0"/>
- <field name="E" start="1" end="4"/>
- <field name="AE" start="5" end="5"/>
- <field name="DE" start="6" end="6"/>
- <field name="U" start="7" end="7"/>
- <field name="V" start="8" end="8"/>
- <field name="C" start="9" end="9"/>
- <field name="N" start="10" end="10"/>
- <field name="Z" start="11" end="11"/>
- <field name="L" start="12" end="12"/>
- <field name="DZ" start="13" end="13"/>
- <field name="SC" start="14" end="14"/>
- <field name="ES" start="15" end="15"/>
- <field name="RB" start="16" end="18"/>
- <field name="AD" start="19" end="19"/>
- <field name="US" start="20" end="20"/>
- <field name="IE" start="31" end="31"/>
- </flags>
-
- <reg name="pc" bitsize="32" type="code_ptr"/>
- <reg name="status32" bitsize="32" type="status32_type"/>
- </feature>
-</target>
--- /dev/null
+/* 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;
+}
--- /dev/null
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.aux-minimal">
+ <flags id="status32_type" size="4">
+ <field name="H" start="0" end="0"/>
+ <field name="E" start="1" end="2"/>
+ <field name="A" start="3" end="4"/>
+ <field name="AE" start="5" end="5"/>
+ <field name="DE" start="6" end="6"/>
+ <field name="U" start="7" end="7"/>
+ <field name="V" start="8" end="8"/>
+ <field name="C" start="9" end="9"/>
+ <field name="N" start="10" end="10"/>
+ <field name="Z" start="11" end="11"/>
+ <field name="L" start="12" end="12"/>
+ <field name="R" start="13" end="13"/>
+ <field name="SE" start="14" end="14"/>
+ </flags>
+
+ <reg name="pc" bitsize="32" type="code_ptr"/>
+ <reg name="status32" bitsize="32" type="status32_type"/>
+</feature>
--- /dev/null
+/* 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;
+}
--- /dev/null
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.aux-minimal">
+ <flags id="status32_type" size="4">
+ <field name="H" start="0" end="0"/>
+ <field name="E" start="1" end="4"/>
+ <field name="AE" start="5" end="5"/>
+ <field name="DE" start="6" end="6"/>
+ <field name="U" start="7" end="7"/>
+ <field name="V" start="8" end="8"/>
+ <field name="C" start="9" end="9"/>
+ <field name="N" start="10" end="10"/>
+ <field name="Z" start="11" end="11"/>
+ <field name="L" start="12" end="12"/>
+ <field name="DZ" start="13" end="13"/>
+ <field name="SC" start="14" end="14"/>
+ <field name="ES" start="15" end="15"/>
+ <field name="RB" start="16" end="18"/>
+ <field name="AD" start="19" end="19"/>
+ <field name="US" start="20" end="20"/>
+ <field name="IE" start="31" end="31"/>
+ </flags>
+
+ <reg name="pc" bitsize="32" type="code_ptr"/>
+ <reg name="status32" bitsize="32" type="status32_type"/>
+</feature>
--- /dev/null
+/* 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;
+}
--- /dev/null
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.core.arcompact">
+ <reg name="r0" bitsize="32"/>
+ <reg name="r1" bitsize="32"/>
+ <reg name="r2" bitsize="32"/>
+ <reg name="r3" bitsize="32"/>
+ <reg name="r4" bitsize="32"/>
+ <reg name="r5" bitsize="32"/>
+ <reg name="r6" bitsize="32"/>
+ <reg name="r7" bitsize="32"/>
+ <reg name="r8" bitsize="32"/>
+ <reg name="r9" bitsize="32"/>
+ <reg name="r10" bitsize="32"/>
+ <reg name="r11" bitsize="32"/>
+ <reg name="r12" bitsize="32"/>
+ <reg name="r13" bitsize="32"/>
+ <reg name="r14" bitsize="32"/>
+ <reg name="r15" bitsize="32"/>
+ <reg name="r16" bitsize="32"/>
+ <reg name="r17" bitsize="32"/>
+ <reg name="r18" bitsize="32"/>
+ <reg name="r19" bitsize="32"/>
+ <reg name="r20" bitsize="32"/>
+ <reg name="r21" bitsize="32"/>
+ <reg name="r22" bitsize="32"/>
+ <reg name="r23" bitsize="32"/>
+ <reg name="r24" bitsize="32"/>
+ <reg name="r25" bitsize="32"/>
+
+ <!-- ARC core data pointer registers. -->
+ <reg name="gp" bitsize="32" type="data_ptr"/>
+ <reg name="fp" bitsize="32" type="data_ptr"/>
+ <reg name="sp" bitsize="32" type="data_ptr"/>
+
+ <!-- Code pointers. -->
+ <reg name="ilink1" bitsize="32" type="code_ptr"/>
+ <reg name="ilink2" bitsize="32" type="code_ptr"/>
+ <reg name="blink" bitsize="32" type="code_ptr"/>
+
+ <!-- Here goes extension core registers: r32 - r59 -->
+
+ <!-- Loop counter. -->
+ <reg name="lp_count" bitsize="32" type="uint32"/>
+
+ <!-- r61 is a reserved register address. -->
+
+ <!-- r62 is a long immediate value, not a real register. -->
+
+ <!-- 4-byte aligned read-only program counter. -->
+ <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
+</feature>
--- /dev/null
+/* 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;
+}
--- /dev/null
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.arc.core.v2">
+ <reg name="r0" bitsize="32"/>
+ <reg name="r1" bitsize="32"/>
+ <reg name="r2" bitsize="32"/>
+ <reg name="r3" bitsize="32"/>
+ <reg name="r4" bitsize="32"/>
+ <reg name="r5" bitsize="32"/>
+ <reg name="r6" bitsize="32"/>
+ <reg name="r7" bitsize="32"/>
+ <reg name="r8" bitsize="32"/>
+ <reg name="r9" bitsize="32"/>
+ <reg name="r10" bitsize="32"/>
+ <reg name="r11" bitsize="32"/>
+ <reg name="r12" bitsize="32"/>
+ <reg name="r13" bitsize="32"/>
+ <reg name="r14" bitsize="32"/>
+ <reg name="r15" bitsize="32"/>
+ <reg name="r16" bitsize="32"/>
+ <reg name="r17" bitsize="32"/>
+ <reg name="r18" bitsize="32"/>
+ <reg name="r19" bitsize="32"/>
+ <reg name="r20" bitsize="32"/>
+ <reg name="r21" bitsize="32"/>
+ <reg name="r22" bitsize="32"/>
+ <reg name="r23" bitsize="32"/>
+ <reg name="r24" bitsize="32"/>
+ <reg name="r25" bitsize="32"/>
+
+ <!-- ARC core data pointer registers. -->
+ <reg name="gp" bitsize="32" type="data_ptr"/>
+ <reg name="fp" bitsize="32" type="data_ptr"/>
+ <reg name="sp" bitsize="32" type="data_ptr"/>
+
+ <!-- Code pointers. R30 is general purpose, but it used to be ILINK2 in
+ ARCompact, thus its odd position in between of special purpose registers.
+ GCC does't use this register, so it isn't a member of a general group. -->
+ <reg name="ilink" bitsize="32" type="code_ptr"/>
+ <reg name="r30" bitsize="32" group=""/>
+ <reg name="blink" bitsize="32" type="code_ptr"/>
+
+ <!-- Here goes extension core registers: r32 - r57. -->
+ <!-- Here goes ACCL/ACCH registers, r58, r59. -->
+
+ <!-- Loop counter. -->
+ <reg name="lp_count" bitsize="32" type="uint32"/>
+
+ <!-- r61 is a reserved register address. -->
+
+ <!-- r62 is a long immediate value, not a real register. -->
+
+ <!-- 4-byte aligned read-only program counter. -->
+ <reg name="pcl" bitsize="32" type="code_ptr" group=""/>
+</feature>
|| 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);