{"ip1", AARCH64_X0_REGNUM + 17}
};
+/* The required capability 'C' registers. */
+static const char *const aarch64_c_register_names[] =
+{
+ /* These registers must appear in consecutive RAW register number
+ order and they must begin with AARCH64_C0_REGNUM! */
+ "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7",
+ "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15",
+ "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23",
+ "c24", "c25", "c26", "c27", "c28", "c29", "c30", "pcc",
+ "csp", "ddc", "ctpidr", "rcsp", "rddc", "rctpidr", "cid",
+ "tag_map", "cctlr"
+};
+
/* The required core 'R' registers. */
static const char *const aarch64_r_register_names[] =
{
num_pseudo_regs += 1; /* Count RA_STATE pseudo register. */
}
+ /* Add the capability registers. */
+ const struct tdesc_feature *feature_capability
+ = tdesc_find_feature (tdesc,"org.gnu.gdb.aarch64.capability");
+ int first_cap_regnum = -1;
+
+ if (feature_capability != nullptr)
+ {
+ first_cap_regnum = num_regs;
+
+ for (i = 0; i < ARRAY_SIZE (aarch64_c_register_names); i++)
+ valid_p &= tdesc_numbered_register (feature_capability,
+ tdesc_data.get (),
+ AARCH64_C0_REGNUM + i,
+ aarch64_c_register_names[i]);
+
+ num_regs = AARCH64_C0_REGNUM + i;
+ }
+
if (!valid_p)
return nullptr;
tdep->pauth_ra_state_regnum = (feature_pauth == NULL) ? -1
: pauth_ra_state_offset + num_regs;
+ tdep->cap_reg_base = first_cap_regnum;
+
set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call);
set_gdbarch_frame_align (gdbarch, aarch64_frame_align);
--- /dev/null
+/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
+ Original: aarch64-capability.xml */
+
+#include "gdbsupport/tdesc.h"
+
+static int
+create_feature_aarch64_capability (struct target_desc *result, long regnum)
+{
+ struct tdesc_feature *feature;
+
+ feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.capability");
+
+ tdesc_create_reg (feature, "c0", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c1", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c2", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c3", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c4", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c5", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c6", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c7", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c8", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c9", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c10", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c11", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c12", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c13", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c14", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c15", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c16", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c17", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c18", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c19", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c20", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c21", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c22", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c23", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c24", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c25", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c26", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c27", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c28", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c29", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "c30", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "pcc", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "csp", regnum++, 1, "general", 128, "uintcap");
+ tdesc_create_reg (feature, "ddc", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "ctpidr", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "rcsp", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "rddc", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "rctpidr", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "cid", regnum++, 1, "system", 128, "uintcap");
+ tdesc_create_reg (feature, "tag_map", regnum++, 1, "system", 64, "uint64");
+ tdesc_create_reg (feature, "cctlr", regnum++, 1, "system", 64, "uint64");
+ return regnum;
+}
--- /dev/null
+<?xml version="1.0"?>
+<!-- Copyright (C) 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 feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.aarch64.capability">
+ <reg name="c0" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c1" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c2" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c3" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c4" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c5" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c6" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c7" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c8" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c9" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c10" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c11" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c12" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c13" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c14" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c15" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c16" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c17" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c18" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c19" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c20" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c21" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c22" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c23" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c24" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c25" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c26" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c27" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c28" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c29" bitsize="128" type="uintcap" group="general"/>
+ <reg name="c30" bitsize="128" type="uintcap" group="general"/>
+ <reg name="pcc" bitsize="128" type="uintcap" group="general"/>
+ <reg name="csp" bitsize="128" type="uintcap" group="general"/>
+ <reg name="ddc" bitsize="128" type="uintcap" group="system"/>
+ <reg name="ctpidr" bitsize="128" type="uintcap" group="system"/>
+ <reg name="rcsp" bitsize="128" type="uintcap" group="general"/>
+ <reg name="rddc" bitsize="128" type="uintcap" group="general"/>
+ <reg name="rctpidr" bitsize="128" type="uintcap" group="system"/>
+ <reg name="cid" bitsize="128" type="uintcap" group="system"/>
+ <reg name="tag_map" bitsize="64" type="uint64" group="system"/>
+ <reg name="cctlr" bitsize="64" type="uint64" group="system"/>
+</feature>