forked from Imagelibrary/binutils-gdb
arc: Migrate to new target features
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.
v2:
Removed arc.c from ALLDEPFILES in gdb/Makefile.in.
Removed vim modeline from arc-tdep.c to have it in a separate patch.
Removed braces from one line "if/else".
Undid the type change for "jb_pc" (kept it as "int").
Joined the unnecessary line breaks into one line.
No more moving around arm targets in gdb/features/Makefile.
Changed pattern checking for ARC features from "arc/{aux,core}" to "arc/".
v3:
Added include gaurds to arc.h.
Added arc_read_description to _create_ target descriptions less.
v4:
Got rid of ARC_SYS_TYPE_NONE.
Renamed ARC_SYS_TYPE_INVALID to ARC_SYS_TYPE_NUM.
Fixed a few indentations/curly braces.
Converted arc_sys_type_to_str from a macro to an inline function.
gdb/ChangeLog:
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.
This commit is contained in:
committed by
Shahab Vahedi
parent
67430cd00a
commit
817a758576
@@ -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
|
||||
@@ -147,6 +146,9 @@ static const char *const core_arcompact_register_names[] = {
|
||||
|
||||
static char *arc_disassembler_options = NULL;
|
||||
|
||||
/* Possible arc target descriptors. */
|
||||
static struct target_desc *tdesc_arc_list[ARC_SYS_TYPE_NUM];
|
||||
|
||||
/* Functions are sorted in the order as they are used in the
|
||||
_initialize_arc_tdep (), which uses the same order as gdbarch.h. Static
|
||||
functions are defined before the first invocation. */
|
||||
@@ -1750,21 +1752,13 @@ arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc,
|
||||
const char *const *core_regs;
|
||||
const char *core_feature_name;
|
||||
|
||||
/* If target doesn't provide a description - use default one. */
|
||||
/* If target doesn't provide a description, use the default ones. */
|
||||
if (!tdesc_has_registers (tdesc_loc))
|
||||
{
|
||||
if (is_arcv2)
|
||||
{
|
||||
tdesc_loc = tdesc_arc_v2;
|
||||
if (arc_debug)
|
||||
debug_printf ("arc: Using default register set for ARC v2.\n");
|
||||
}
|
||||
tdesc_loc = arc_read_description (ARC_SYS_TYPE_ARCV2);
|
||||
else
|
||||
{
|
||||
tdesc_loc = tdesc_arc_arcompact;
|
||||
if (arc_debug)
|
||||
debug_printf ("arc: Using default register set for ARCompact.\n");
|
||||
}
|
||||
tdesc_loc = arc_read_description (ARC_SYS_TYPE_ARCOMPACT);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2145,15 +2139,44 @@ dump_arc_instruction_command (const char *args, int from_tty)
|
||||
arc_insn_dump (insn);
|
||||
}
|
||||
|
||||
/* See arc-tdep.h. */
|
||||
|
||||
const target_desc *
|
||||
arc_read_description (arc_sys_type sys_type)
|
||||
{
|
||||
if (arc_debug)
|
||||
debug_printf ("arc: Reading target description for \"%s\".\n",
|
||||
arc_sys_type_to_str (sys_type));
|
||||
|
||||
gdb_assert ((sys_type >= 0) && (sys_type < ARC_SYS_TYPE_NUM));
|
||||
struct target_desc *tdesc = tdesc_arc_list[sys_type];
|
||||
|
||||
if (tdesc == nullptr)
|
||||
{
|
||||
tdesc = arc_create_target_description (sys_type);
|
||||
tdesc_arc_list[sys_type] = tdesc;
|
||||
|
||||
if (arc_debug)
|
||||
{
|
||||
const char *arch = tdesc_architecture_name (tdesc);
|
||||
const char *abi = tdesc_osabi_name (tdesc);
|
||||
arch = arch != NULL ? arch : "";
|
||||
abi = abi != NULL ? abi : "";
|
||||
debug_printf ("arc: Created target description for "
|
||||
"\"%s\": arch=\"%s\", ABI=\"%s\"\n",
|
||||
arc_sys_type_to_str (sys_type), arch, abi);
|
||||
}
|
||||
}
|
||||
|
||||
return tdesc;
|
||||
}
|
||||
|
||||
void _initialize_arc_tdep ();
|
||||
void
|
||||
_initialize_arc_tdep ()
|
||||
{
|
||||
gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep);
|
||||
|
||||
initialize_tdesc_arc_v2 ();
|
||||
initialize_tdesc_arc_arcompact ();
|
||||
|
||||
/* Register ARC-specific commands with gdb. */
|
||||
|
||||
/* Add root prefix command for "maintenance print arc" commands. */
|
||||
|
||||
Reference in New Issue
Block a user