Use gdb_bfd_sections in get_stap_base_address
[deliverable/binutils-gdb.git] / gdb / target-descriptions.h
index 96290b7d97ea27776b675224cb397b4dc680c4e0..171ef76379a7d61ee85587fb70b4d70cb584fcb4 100644 (file)
@@ -1,6 +1,6 @@
 /* Target description support for GDB.
 
-   Copyright (C) 2006-2018 Free Software Foundation, Inc.
+   Copyright (C) 2006-2020 Free Software Foundation, Inc.
 
    Contributed by CodeSourcery.
 
@@ -21,7 +21,8 @@
 
 #ifndef TARGET_DESCRIPTIONS_H
 #define TARGET_DESCRIPTIONS_H 1
-#include "common/tdesc.h"
+#include "gdbsupport/tdesc.h"
+#include "gdbarch.h"
 
 struct tdesc_arch_data;
 struct target_ops;
@@ -79,6 +80,42 @@ void set_tdesc_pseudo_register_reggroup_p
   (struct gdbarch *gdbarch,
    gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p);
 
+/* Pointer to a function that should be called for each unknown register in
+   a target description, used by TDESC_USE_REGISTERS.
+
+   GDBARCH is the architecture the target description is for, FEATURE is
+   the feature the unknown register is in, and REG_NAME is the name of the
+   register from the target description.  The POSSIBLE_REGNUM is a proposed
+   (GDB internal) number for this register.
+
+   The callback function can return, (-1) to indicate that the register
+   should not be assigned POSSIBLE_REGNUM now (though it might be later),
+   GDB will number the register automatically later on.  Return
+   POSSIBLE_REGNUM (or greater) to have this register assigned that number.
+   Returning a value less that POSSIBLE_REGNUM is also acceptable, but take
+   care not to clash with a register number that has already been
+   assigned.
+
+   The callback will always be called on the registers in the order they
+   appear in the target description.  This means all unknown registers
+   within a single feature will be called one after another.  */
+
+typedef int (*tdesc_unknown_register_ftype)
+       (struct gdbarch *gdbarch, tdesc_feature *feature,
+        const char *reg_name, int possible_regnum);
+
+/* A deleter adapter for a target arch data.  */
+
+struct tdesc_arch_data_deleter
+{
+  void operator() (struct tdesc_arch_data *data) const;
+};
+
+/* A unique pointer specialization that holds a target_desc.  */
+
+typedef std::unique_ptr<tdesc_arch_data, tdesc_arch_data_deleter>
+  tdesc_arch_data_up;
+
 /* Update GDBARCH to use the TARGET_DESC for registers.  TARGET_DESC
    may be GDBARCH's target description or (if GDBARCH does not have
    one which describes registers) another target description
@@ -94,18 +131,13 @@ void set_tdesc_pseudo_register_reggroup_p
 
 void tdesc_use_registers (struct gdbarch *gdbarch,
                          const struct target_desc *target_desc,
-                         struct tdesc_arch_data *early_data);
+                         tdesc_arch_data_up &&early_data,
+                         tdesc_unknown_register_ftype unk_reg_cb = NULL);
 
 /* Allocate initial data for validation of a target description during
    gdbarch initialization.  */
 
-struct tdesc_arch_data *tdesc_data_alloc (void);
-
-/* Clean up data allocated by tdesc_data_alloc.  This should only
-   be called to discard the data; tdesc_use_registers takes ownership
-   of its EARLY_DATA argument.  */
-
-void tdesc_data_cleanup (void *data_untyped);
+tdesc_arch_data_up tdesc_data_alloc ();
 
 /* Search FEATURE for a register named NAME.  Record REGNO and the
    register in DATA; when tdesc_use_registers is called, REGNO will be
@@ -201,7 +233,6 @@ int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
 
 /* Methods for constructing a target description.  */
 
-struct cleanup *make_cleanup_free_target_description (struct target_desc *);
 void set_tdesc_architecture (struct target_desc *,
                             const struct bfd_arch_info *);
 void set_tdesc_osabi (struct target_desc *, enum gdb_osabi osabi);
This page took 0.037796 seconds and 4 git commands to generate.