diff mbox

[v2,1/4] arc: Migrate to new target features

Message ID 20171026114020.10213-1-Anton.Kolesov@synopsys.com
State New
Headers show

Commit Message

Anton Kolesov Oct. 26, 2017, 11:40 a.m. UTC
Changes in V2:

- Removed regformats .dat from this series.
- Removed selection of Linux-specific target description from arc-tdep.c. It is
  now happens in appropriate locations in arc-linux-tdep.c and arc-linux-nat.c.
  (with migration to new target description those files only specify if target
  is Linux or not).
- Use new mechanism to manage target description on per feature basis.

--

This patch replaces usage of target descriptions in ARC, where the whole
description is fixed in XML, with new target descriptions where XML describes
individual features, and GDB assembles those features into actual target
description.

gdb/ChangeLog:
yyyy-mm-dd  Anton Kolesov  <Anton.Kolesov@synopsys.com>

	* Makefile.in: Add arch/arc.o
	* configure.tgt: Likewise.
	* arc-tdep.c (arc_tdesc_init): Use arc_create_target_description.
	(_initialize_arc_tdep): Don't initialize old target descriptions.
	* 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.
---
 gdb/Makefile.in                     |  3 ++
 gdb/arc-tdep.c                      | 23 ++--------
 gdb/arch/arc.c                      | 71 ++++++++++++++++++++++++++++
 gdb/arch/arc.h                      | 21 +++++++++
 gdb/configure.tgt                   |  2 +-
 gdb/features/Makefile               |  9 ++--
 gdb/features/arc-arcompact.c        | 75 ------------------------------
 gdb/features/arc-arcompact.xml      | 85 ----------------------------------
 gdb/features/arc-v2.c               | 79 -------------------------------
 gdb/features/arc-v2.xml             | 92 -------------------------------------
 gdb/features/arc/aux-arcompact.c    | 32 +++++++++++++
 gdb/features/arc/aux-arcompact.xml  | 28 +++++++++++
 gdb/features/arc/aux-v2.c           | 36 +++++++++++++++
 gdb/features/arc/aux-v2.xml         | 32 +++++++++++++
 gdb/features/arc/core-arcompact.c   | 47 +++++++++++++++++++
 gdb/features/arc/core-arcompact.xml | 58 +++++++++++++++++++++++
 gdb/features/arc/core-v2.c          | 47 +++++++++++++++++++
 gdb/features/arc/core-v2.xml        | 61 ++++++++++++++++++++++++
 gdb/target-descriptions.c           |  4 +-
 19 files changed, 450 insertions(+), 355 deletions(-)
 create mode 100644 gdb/arch/arc.c
 create mode 100644 gdb/arch/arc.h
 delete mode 100644 gdb/features/arc-arcompact.c
 delete mode 100644 gdb/features/arc-arcompact.xml
 delete mode 100644 gdb/features/arc-v2.c
 delete mode 100644 gdb/features/arc-v2.xml
 create mode 100644 gdb/features/arc/aux-arcompact.c
 create mode 100644 gdb/features/arc/aux-arcompact.xml
 create mode 100644 gdb/features/arc/aux-v2.c
 create mode 100644 gdb/features/arc/aux-v2.xml
 create mode 100644 gdb/features/arc/core-arcompact.c
 create mode 100644 gdb/features/arc/core-arcompact.xml
 create mode 100644 gdb/features/arc/core-v2.c
 create mode 100644 gdb/features/arc/core-v2.xml

Comments

Anton Kolesov Nov. 8, 2017, 11:13 a.m. UTC | #1
Ping.

Anton

> -----Original Message-----
> From: Anton Kolesov [mailto:Anton.Kolesov@synopsys.com]
> Sent: Thursday, October 26, 2017 14:40
> To: gdb-patches@sourceware.org
> Cc: Anton Kolesov <Anton.Kolesov@synopsys.com>; Francois Bedard
> <Francois.Bedard@synopsys.com>
> Subject: [PATCH v2 1/4] arc: Migrate to new target features
> 
> Changes in V2:
> 
> - Removed regformats .dat from this series.
> - Removed selection of Linux-specific target description from arc-tdep.c. It is
>   now happens in appropriate locations in arc-linux-tdep.c and arc-linux-nat.c.
>   (with migration to new target description those files only specify if target
>   is Linux or not).
> - Use new mechanism to manage target description on per feature basis.
> 
> --
> 
> This patch replaces usage of target descriptions in ARC, where the whole
> description is fixed in XML, with new target descriptions where XML
> describes individual features, and GDB assembles those features into actual
> target description.
> 
> gdb/ChangeLog:
> yyyy-mm-dd  Anton Kolesov  <Anton.Kolesov@synopsys.com>
> 
> 	* Makefile.in: Add arch/arc.o
> 	* configure.tgt: Likewise.
> 	* arc-tdep.c (arc_tdesc_init): Use arc_create_target_description.
> 	(_initialize_arc_tdep): Don't initialize old target descriptions.
> 	* 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.
> ---
>  gdb/Makefile.in                     |  3 ++
>  gdb/arc-tdep.c                      | 23 ++--------
>  gdb/arch/arc.c                      | 71 ++++++++++++++++++++++++++++
>  gdb/arch/arc.h                      | 21 +++++++++
>  gdb/configure.tgt                   |  2 +-
>  gdb/features/Makefile               |  9 ++--
>  gdb/features/arc-arcompact.c        | 75 ------------------------------
>  gdb/features/arc-arcompact.xml      | 85 ----------------------------------
>  gdb/features/arc-v2.c               | 79 -------------------------------
>  gdb/features/arc-v2.xml             | 92 -------------------------------------
>  gdb/features/arc/aux-arcompact.c    | 32 +++++++++++++
>  gdb/features/arc/aux-arcompact.xml  | 28 +++++++++++
>  gdb/features/arc/aux-v2.c           | 36 +++++++++++++++
>  gdb/features/arc/aux-v2.xml         | 32 +++++++++++++
>  gdb/features/arc/core-arcompact.c   | 47 +++++++++++++++++++
>  gdb/features/arc/core-arcompact.xml | 58 +++++++++++++++++++++++
>  gdb/features/arc/core-v2.c          | 47 +++++++++++++++++++
>  gdb/features/arc/core-v2.xml        | 61 ++++++++++++++++++++++++
>  gdb/target-descriptions.c           |  4 +-
>  19 files changed, 450 insertions(+), 355 deletions(-)  create mode 100644
> gdb/arch/arc.c  create mode 100644 gdb/arch/arc.h  delete mode 100644
> gdb/features/arc-arcompact.c  delete mode 100644 gdb/features/arc-
> arcompact.xml  delete mode 100644 gdb/features/arc-v2.c  delete mode
> 100644 gdb/features/arc-v2.xml  create mode 100644 gdb/features/arc/aux-
> arcompact.c  create mode 100644 gdb/features/arc/aux-arcompact.xml
>  create mode 100644 gdb/features/arc/aux-v2.c  create mode 100644
> gdb/features/arc/aux-v2.xml  create mode 100644 gdb/features/arc/core-
> arcompact.c  create mode 100644 gdb/features/arc/core-arcompact.xml
>  create mode 100644 gdb/features/arc/core-v2.c  create mode 100644
> gdb/features/arc/core-v2.xml
> 
> diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 6cb0970..60d049a 100644
> --- a/gdb/Makefile.in
> +++ b/gdb/Makefile.in
> @@ -795,6 +795,7 @@ ALL_64_TARGET_OBS = \  # All other target-
> dependent objects files (used with --enable-targets=all).
>  ALL_TARGET_OBS = \
>  	arc-tdep.o \
> +	arch/arc.o \
>  	arch/arm.o \
>  	arch/arm-get-next-pcs.o \
>  	arch/arm-linux.o \
> @@ -1043,6 +1044,7 @@ SFILES = \
>  	agent.c \
>  	annotate.c \
>  	arch-utils.c \
> +	arch/arc.c \
>  	arch/i386.c \
>  	auto-load.c \
>  	auxv.c \
> @@ -1515,6 +1517,7 @@ HFILES_NO_SRCDIR = \
>  	xml-tdesc.h \
>  	xtensa-tdep.h \
>  	arch/aarch64-insn.h \
> +	arch/arc.h \
>  	arch/arm.h \
>  	arch/i386.h \
>  	cli/cli-cmds.h \
> diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c index 09572ac..6ed30da 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 <algorithm>
> 
> -/* Default target descriptions.  */
> -#include "features/arc-v2.c"
> -#include "features/arc-arcompact.c"
> -
>  /* The frame unwind cache for ARC.  */
> 
>  struct arc_frame_cache
> @@ -1793,18 +1792,7 @@ arc_tdesc_init (struct gdbarch_info info, const
> struct target_desc **tdesc,
>    /* If target doesn't provide a description - use default one.  */
>    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");
> -	}
> -      else
> -	{
> -	  tdesc_loc = tdesc_arc_arcompact;
> -	  if (arc_debug)
> -	    debug_printf ("arc: Using default register set for ARCompact.\n");
> -	}
> +      tdesc_loc = arc_create_target_description (arc_debug, is_arcv2);
>      }
>    else
>      {
> @@ -2166,9 +2154,6 @@ _initialize_arc_tdep (void)  {
>    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/arch/arc.c b/gdb/arch/arc.c new file mode 100644 index
> 0000000..8f0d8d6
> --- /dev/null
> +++ b/gdb/arch/arc.c
> @@ -0,0 +1,71 @@
> +/* 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 "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"
> +
> +/* Create target description for a target with specified parameters.
> +   PRINT_DEBUG defines whether to print debug messages to the stderr
> stream.
> +   IS_ARCV2 defines if this is an ARCv2 (ARC EM or ARC HS) target or
> ARCompact
> +   (ARC600 or ARC700); there is no use for more specific information about
> +   target processor.  */
> +
> +target_desc *
> +arc_create_target_description (bool print_debug, bool is_arcv2) {
> +  target_desc *tdesc = allocate_target_description ();
> +
> +  if (print_debug)
> +    debug_printf ("arc: Creating target description, "
> +	"is_arcv2=%i\n", is_arcv2);
> +
> +  long regnum = 0;
> +
> +#ifndef IN_PROCESS_AGENT
> +  if (is_arcv2)
> +    {
> +      set_tdesc_architecture (tdesc, "arc:ARCv2");
> +    }
> +  else
> +    {
> +      set_tdesc_architecture (tdesc, "arc:ARC700");
> +    }
> +#endif
> +
> +  if (is_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
> 0000000..2d1828e
> --- /dev/null
> +++ b/gdb/arch/arc.h
> @@ -0,0 +1,21 @@
> +/* 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 "tdesc.h"
> +
> +target_desc *arc_create_target_description (bool print_debug, bool
> +is_arcv2);
> +
> diff --git a/gdb/configure.tgt b/gdb/configure.tgt index 1fce079..8d26526
> 100644
> --- a/gdb/configure.tgt
> +++ b/gdb/configure.tgt
> @@ -55,7 +55,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
> 2d8e3fe..e30a8bd 100644
> --- a/gdb/features/Makefile
> +++ b/gdb/features/Makefile
> @@ -120,8 +120,6 @@ OUTPUTS = $(patsubst %,$(outdir)/%.dat,$(WHICH))
> # to make on the command line.
>  XMLTOC = \
>  	aarch64.xml \
> -	arc-v2.xml \
> -	arc-arcompact.xml \
>  	arm/arm-with-iwmmxt.xml \
>  	arm/arm-with-m-fpa-layout.xml \
>  	arm/arm-with-m-vfp-d16.xml \
> @@ -207,7 +205,12 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl
> gdbserver-regs.xsl
>  	  $(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp
>  	sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
> 
> -FEATURE_XMLFILES = i386/32bit-core.xml \
> +FEATURE_XMLFILES = \
> +	arc/core-v2.xml \
> +	arc/aux-v2.xml \
> +	arc/core-arcompact.xml \
> +	arc/aux-arcompact.xml \
> +	i386/32bit-core.xml \
>  	i386/32bit-sse.xml \
>  	i386/32bit-linux.xml \
>  	i386/32bit-avx.xml \
> diff --git a/gdb/features/arc-arcompact.c b/gdb/features/arc-arcompact.c
> deleted file mode 100644 index ea84a40..0000000
> --- a/gdb/features/arc-arcompact.c
> +++ /dev/null
> @@ -1,75 +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, "", 32, "code_ptr");
> -
> -  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
> -  struct tdesc_type *field_type;
> -  struct tdesc_type *type;
> -  type = tdesc_create_flags (feature, "status32_type", 4);
> -  tdesc_add_flag (type, 0, "H");
> -  tdesc_add_bitfield (type, "E", 1, 2);
> -  tdesc_add_bitfield (type, "A", 3, 4);
> -  tdesc_add_flag (type, 5, "AE");
> -  tdesc_add_flag (type, 6, "DE");
> -  tdesc_add_flag (type, 7, "U");
> -  tdesc_add_flag (type, 8, "V");
> -  tdesc_add_flag (type, 9, "C");
> -  tdesc_add_flag (type, 10, "N");
> -  tdesc_add_flag (type, 11, "Z");
> -  tdesc_add_flag (type, 12, "L");
> -  tdesc_add_flag (type, 13, "R");
> -  tdesc_add_flag (type, 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 295e635..0000000
> --- a/gdb/features/arc-arcompact.xml
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -<?xml version="1.0"?>
> -<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/features/arc-v2.c b/gdb/features/arc-v2.c deleted file mode
> 100644 index 1eefc24..0000000
> --- a/gdb/features/arc-v2.c
> +++ /dev/null
> @@ -1,79 +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, "", 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, "", 32, "code_ptr");
> -
> -  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
> -  struct tdesc_type *field_type;
> -  struct tdesc_type *type;
> -  type = tdesc_create_flags (feature, "status32_type", 4);
> -  tdesc_add_flag (type, 0, "H");
> -  tdesc_add_bitfield (type, "E", 1, 4);
> -  tdesc_add_flag (type, 5, "AE");
> -  tdesc_add_flag (type, 6, "DE");
> -  tdesc_add_flag (type, 7, "U");
> -  tdesc_add_flag (type, 8, "V");
> -  tdesc_add_flag (type, 9, "C");
> -  tdesc_add_flag (type, 10, "N");
> -  tdesc_add_flag (type, 11, "Z");
> -  tdesc_add_flag (type, 12, "L");
> -  tdesc_add_flag (type, 13, "DZ");
> -  tdesc_add_flag (type, 14, "SC");
> -  tdesc_add_flag (type, 15, "ES");
> -  tdesc_add_bitfield (type, "RB", 16, 18);
> -  tdesc_add_flag (type, 19, "AD");
> -  tdesc_add_flag (type, 20, "US");
> -  tdesc_add_flag (type, 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 4f8c9a0..0000000
> --- a/gdb/features/arc-v2.xml
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -<?xml version="1.0"?>
> -<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/features/arc/aux-arcompact.c b/gdb/features/arc/aux-
> arcompact.c
> new file mode 100644
> index 0000000..cf85ea8
> --- /dev/null
> +++ b/gdb/features/arc/aux-arcompact.c
> @@ -0,0 +1,32 @@
> +/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
> +  Original: aux-arcompact.xml */
> +
> +#include "arch/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", "aux-arcompact.xml");  struct
> + tdesc_type *field_type;  struct tdesc_type *type;  type =
> + tdesc_create_flags (feature, "status32_type", 4);  tdesc_add_flag
> + (type, 0, "H");  tdesc_add_bitfield (type, "E", 1, 2);
> + tdesc_add_bitfield (type, "A", 3, 4);  tdesc_add_flag (type, 5, "AE");
> + tdesc_add_flag (type, 6, "DE");  tdesc_add_flag (type, 7, "U");
> + tdesc_add_flag (type, 8, "V");  tdesc_add_flag (type, 9, "C");
> + tdesc_add_flag (type, 10, "N");  tdesc_add_flag (type, 11, "Z");
> + tdesc_add_flag (type, 12, "L");  tdesc_add_flag (type, 13, "R");
> + tdesc_add_flag (type, 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 0000000..d9c2f74
> --- /dev/null
> +++ b/gdb/features/arc/aux-arcompact.xml
> @@ -0,0 +1,28 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/features/arc/aux-v2.c b/gdb/features/arc/aux-v2.c new file
> mode 100644 index 0000000..f59d759
> --- /dev/null
> +++ b/gdb/features/arc/aux-v2.c
> @@ -0,0 +1,36 @@
> +/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
> +  Original: aux-v2.xml */
> +
> +#include "arch/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", "aux-v2.xml");  struct tdesc_type
> + *field_type;  struct tdesc_type *type;  type = tdesc_create_flags
> + (feature, "status32_type", 4);  tdesc_add_flag (type, 0, "H");
> + tdesc_add_bitfield (type, "E", 1, 4);  tdesc_add_flag (type, 5, "AE");
> + tdesc_add_flag (type, 6, "DE");  tdesc_add_flag (type, 7, "U");
> + tdesc_add_flag (type, 8, "V");  tdesc_add_flag (type, 9, "C");
> + tdesc_add_flag (type, 10, "N");  tdesc_add_flag (type, 11, "Z");
> + tdesc_add_flag (type, 12, "L");  tdesc_add_flag (type, 13, "DZ");
> + tdesc_add_flag (type, 14, "SC");  tdesc_add_flag (type, 15, "ES");
> + tdesc_add_bitfield (type, "RB", 16, 18);  tdesc_add_flag (type, 19,
> + "AD");  tdesc_add_flag (type, 20, "US");  tdesc_add_flag (type, 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 0000000..558a171
> --- /dev/null
> +++ b/gdb/features/arc/aux-v2.xml
> @@ -0,0 +1,32 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/features/arc/core-arcompact.c b/gdb/features/arc/core-
> arcompact.c
> new file mode 100644
> index 0000000..e08763a
> --- /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 "arch/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", "core-arcompact.xml");
> +  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, "", 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 0000000..55b566a
> --- /dev/null
> +++ b/gdb/features/arc/core-arcompact.xml
> @@ -0,0 +1,58 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/features/arc/core-v2.c b/gdb/features/arc/core-v2.c new file
> mode 100644 index 0000000..ebe33be
> --- /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 "arch/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",
> +"core-v2.xml");
> +  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, "", 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, "", 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 0000000..8c8ad39
> --- /dev/null
> +++ b/gdb/features/arc/core-v2.xml
> @@ -0,0 +1,61 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2015-2017 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>
> diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index
> 4f5e9d6..414c8b1 100644
> --- a/gdb/target-descriptions.c
> +++ b/gdb/target-descriptions.c
> @@ -2327,7 +2327,9 @@ maint_print_c_tdesc_cmd (const char *args, int
> from_tty)
>       counterparts.  */
>    if (startswith (filename_after_features.c_str (), "i386/32bit-")
>        || startswith (filename_after_features.c_str (), "i386/64bit-")
> -      || startswith (filename_after_features.c_str (), "i386/x32-core.xml"))
> +      || startswith (filename_after_features.c_str (), "i386/x32-core.xml")
> +      || startswith (filename_after_features.c_str (), "arc/core-")
> +      || startswith (filename_after_features.c_str (), "arc/aux-"))
>      {
>        print_c_feature v (filename_after_features);
> 
> --
> 2.8.3
diff mbox

Patch

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 6cb0970..60d049a 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -795,6 +795,7 @@  ALL_64_TARGET_OBS = \
 # All other target-dependent objects files (used with --enable-targets=all).
 ALL_TARGET_OBS = \
 	arc-tdep.o \
+	arch/arc.o \
 	arch/arm.o \
 	arch/arm-get-next-pcs.o \
 	arch/arm-linux.o \
@@ -1043,6 +1044,7 @@  SFILES = \
 	agent.c \
 	annotate.c \
 	arch-utils.c \
+	arch/arc.c \
 	arch/i386.c \
 	auto-load.c \
 	auxv.c \
@@ -1515,6 +1517,7 @@  HFILES_NO_SRCDIR = \
 	xml-tdesc.h \
 	xtensa-tdep.h \
 	arch/aarch64-insn.h \
+	arch/arc.h \
 	arch/arm.h \
 	arch/i386.h \
 	cli/cli-cmds.h \
diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index 09572ac..6ed30da 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 <algorithm>
 
-/* Default target descriptions.  */
-#include "features/arc-v2.c"
-#include "features/arc-arcompact.c"
-
 /* The frame unwind cache for ARC.  */
 
 struct arc_frame_cache
@@ -1793,18 +1792,7 @@  arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
   /* If target doesn't provide a description - use default one.  */
   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");
-	}
-      else
-	{
-	  tdesc_loc = tdesc_arc_arcompact;
-	  if (arc_debug)
-	    debug_printf ("arc: Using default register set for ARCompact.\n");
-	}
+      tdesc_loc = arc_create_target_description (arc_debug, is_arcv2);
     }
   else
     {
@@ -2166,9 +2154,6 @@  _initialize_arc_tdep (void)
 {
   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/arch/arc.c b/gdb/arch/arc.c
new file mode 100644
index 0000000..8f0d8d6
--- /dev/null
+++ b/gdb/arch/arc.c
@@ -0,0 +1,71 @@ 
+/* 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 "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"
+
+/* Create target description for a target with specified parameters.
+   PRINT_DEBUG defines whether to print debug messages to the stderr stream.
+   IS_ARCV2 defines if this is an ARCv2 (ARC EM or ARC HS) target or ARCompact
+   (ARC600 or ARC700); there is no use for more specific information about
+   target processor.  */
+
+target_desc *
+arc_create_target_description (bool print_debug, bool is_arcv2)
+{
+  target_desc *tdesc = allocate_target_description ();
+
+  if (print_debug)
+    debug_printf ("arc: Creating target description, "
+	"is_arcv2=%i\n", is_arcv2);
+
+  long regnum = 0;
+
+#ifndef IN_PROCESS_AGENT
+  if (is_arcv2)
+    {
+      set_tdesc_architecture (tdesc, "arc:ARCv2");
+    }
+  else
+    {
+      set_tdesc_architecture (tdesc, "arc:ARC700");
+    }
+#endif
+
+  if (is_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 0000000..2d1828e
--- /dev/null
+++ b/gdb/arch/arc.h
@@ -0,0 +1,21 @@ 
+/* 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 "tdesc.h"
+
+target_desc *arc_create_target_description (bool print_debug, bool is_arcv2);
+
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 1fce079..8d26526 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -55,7 +55,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 2d8e3fe..e30a8bd 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -120,8 +120,6 @@  OUTPUTS = $(patsubst %,$(outdir)/%.dat,$(WHICH))
 # to make on the command line.
 XMLTOC = \
 	aarch64.xml \
-	arc-v2.xml \
-	arc-arcompact.xml \
 	arm/arm-with-iwmmxt.xml \
 	arm/arm-with-m-fpa-layout.xml \
 	arm/arm-with-m-vfp-d16.xml \
@@ -207,7 +205,12 @@  $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl
 	  $(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp
 	sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat
 
-FEATURE_XMLFILES = i386/32bit-core.xml \
+FEATURE_XMLFILES = \
+	arc/core-v2.xml \
+	arc/aux-v2.xml \
+	arc/core-arcompact.xml \
+	arc/aux-arcompact.xml \
+	i386/32bit-core.xml \
 	i386/32bit-sse.xml \
 	i386/32bit-linux.xml \
 	i386/32bit-avx.xml \
diff --git a/gdb/features/arc-arcompact.c b/gdb/features/arc-arcompact.c
deleted file mode 100644
index ea84a40..0000000
--- a/gdb/features/arc-arcompact.c
+++ /dev/null
@@ -1,75 +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, "", 32, "code_ptr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "status32_type", 4);
-  tdesc_add_flag (type, 0, "H");
-  tdesc_add_bitfield (type, "E", 1, 2);
-  tdesc_add_bitfield (type, "A", 3, 4);
-  tdesc_add_flag (type, 5, "AE");
-  tdesc_add_flag (type, 6, "DE");
-  tdesc_add_flag (type, 7, "U");
-  tdesc_add_flag (type, 8, "V");
-  tdesc_add_flag (type, 9, "C");
-  tdesc_add_flag (type, 10, "N");
-  tdesc_add_flag (type, 11, "Z");
-  tdesc_add_flag (type, 12, "L");
-  tdesc_add_flag (type, 13, "R");
-  tdesc_add_flag (type, 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 295e635..0000000
--- a/gdb/features/arc-arcompact.xml
+++ /dev/null
@@ -1,85 +0,0 @@ 
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/features/arc-v2.c b/gdb/features/arc-v2.c
deleted file mode 100644
index 1eefc24..0000000
--- a/gdb/features/arc-v2.c
+++ /dev/null
@@ -1,79 +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, "", 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, "", 32, "code_ptr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "status32_type", 4);
-  tdesc_add_flag (type, 0, "H");
-  tdesc_add_bitfield (type, "E", 1, 4);
-  tdesc_add_flag (type, 5, "AE");
-  tdesc_add_flag (type, 6, "DE");
-  tdesc_add_flag (type, 7, "U");
-  tdesc_add_flag (type, 8, "V");
-  tdesc_add_flag (type, 9, "C");
-  tdesc_add_flag (type, 10, "N");
-  tdesc_add_flag (type, 11, "Z");
-  tdesc_add_flag (type, 12, "L");
-  tdesc_add_flag (type, 13, "DZ");
-  tdesc_add_flag (type, 14, "SC");
-  tdesc_add_flag (type, 15, "ES");
-  tdesc_add_bitfield (type, "RB", 16, 18);
-  tdesc_add_flag (type, 19, "AD");
-  tdesc_add_flag (type, 20, "US");
-  tdesc_add_flag (type, 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 4f8c9a0..0000000
--- a/gdb/features/arc-v2.xml
+++ /dev/null
@@ -1,92 +0,0 @@ 
-<?xml version="1.0"?>
-<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/features/arc/aux-arcompact.c b/gdb/features/arc/aux-arcompact.c
new file mode 100644
index 0000000..cf85ea8
--- /dev/null
+++ b/gdb/features/arc/aux-arcompact.c
@@ -0,0 +1,32 @@ 
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: aux-arcompact.xml */
+
+#include "arch/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", "aux-arcompact.xml");
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+  type = tdesc_create_flags (feature, "status32_type", 4);
+  tdesc_add_flag (type, 0, "H");
+  tdesc_add_bitfield (type, "E", 1, 2);
+  tdesc_add_bitfield (type, "A", 3, 4);
+  tdesc_add_flag (type, 5, "AE");
+  tdesc_add_flag (type, 6, "DE");
+  tdesc_add_flag (type, 7, "U");
+  tdesc_add_flag (type, 8, "V");
+  tdesc_add_flag (type, 9, "C");
+  tdesc_add_flag (type, 10, "N");
+  tdesc_add_flag (type, 11, "Z");
+  tdesc_add_flag (type, 12, "L");
+  tdesc_add_flag (type, 13, "R");
+  tdesc_add_flag (type, 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 0000000..d9c2f74
--- /dev/null
+++ b/gdb/features/arc/aux-arcompact.xml
@@ -0,0 +1,28 @@ 
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/features/arc/aux-v2.c b/gdb/features/arc/aux-v2.c
new file mode 100644
index 0000000..f59d759
--- /dev/null
+++ b/gdb/features/arc/aux-v2.c
@@ -0,0 +1,36 @@ 
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: aux-v2.xml */
+
+#include "arch/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", "aux-v2.xml");
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+  type = tdesc_create_flags (feature, "status32_type", 4);
+  tdesc_add_flag (type, 0, "H");
+  tdesc_add_bitfield (type, "E", 1, 4);
+  tdesc_add_flag (type, 5, "AE");
+  tdesc_add_flag (type, 6, "DE");
+  tdesc_add_flag (type, 7, "U");
+  tdesc_add_flag (type, 8, "V");
+  tdesc_add_flag (type, 9, "C");
+  tdesc_add_flag (type, 10, "N");
+  tdesc_add_flag (type, 11, "Z");
+  tdesc_add_flag (type, 12, "L");
+  tdesc_add_flag (type, 13, "DZ");
+  tdesc_add_flag (type, 14, "SC");
+  tdesc_add_flag (type, 15, "ES");
+  tdesc_add_bitfield (type, "RB", 16, 18);
+  tdesc_add_flag (type, 19, "AD");
+  tdesc_add_flag (type, 20, "US");
+  tdesc_add_flag (type, 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 0000000..558a171
--- /dev/null
+++ b/gdb/features/arc/aux-v2.xml
@@ -0,0 +1,32 @@ 
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/features/arc/core-arcompact.c b/gdb/features/arc/core-arcompact.c
new file mode 100644
index 0000000..e08763a
--- /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 "arch/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", "core-arcompact.xml");
+  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, "", 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 0000000..55b566a
--- /dev/null
+++ b/gdb/features/arc/core-arcompact.xml
@@ -0,0 +1,58 @@ 
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/features/arc/core-v2.c b/gdb/features/arc/core-v2.c
new file mode 100644
index 0000000..ebe33be
--- /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 "arch/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", "core-v2.xml");
+  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, "", 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, "", 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 0000000..8c8ad39
--- /dev/null
+++ b/gdb/features/arc/core-v2.xml
@@ -0,0 +1,61 @@ 
+<?xml version="1.0"?>
+<!-- Copyright (C) 2015-2017 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>
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 4f5e9d6..414c8b1 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -2327,7 +2327,9 @@  maint_print_c_tdesc_cmd (const char *args, int from_tty)
      counterparts.  */
   if (startswith (filename_after_features.c_str (), "i386/32bit-")
       || startswith (filename_after_features.c_str (), "i386/64bit-")
-      || startswith (filename_after_features.c_str (), "i386/x32-core.xml"))
+      || startswith (filename_after_features.c_str (), "i386/x32-core.xml")
+      || startswith (filename_after_features.c_str (), "arc/core-")
+      || startswith (filename_after_features.c_str (), "arc/aux-"))
     {
       print_c_feature v (filename_after_features);