]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/hppa-tdep.h
gprofng: add hardware counters for AMD Zen3
[thirdparty/binutils-gdb.git] / gdb / hppa-tdep.h
index 4afb0302aa5a222be2762aea4562d1049d530bdd..0f706536cc9d2d67488542e92c77f072d706113d 100644 (file)
@@ -1,7 +1,6 @@
 /* Target-dependent code for the HP PA-RISC architecture.
 
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2003-2024 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #ifndef HPPA_TDEP_H
 #define HPPA_TDEP_H
 
+#include "gdbarch.h"
+
 struct trad_frame_saved_reg;
 struct objfile;
-struct so_list;
+struct solib;
 
 /* Register numbers of various important registers.  */
 
@@ -51,6 +52,13 @@ enum hppa_regnum
   HPPA_ISR_REGNUM = 39,                /* Interrupt Space Register */
   HPPA_IOR_REGNUM = 40,                /* Interrupt Offset Register */
   HPPA_SR4_REGNUM = 43,                /* space register 4 */
+  HPPA_SR0_REGNUM = 44,                /* space register 0 */
+  HPPA_SR1_REGNUM = 45,                /* space register 1 */
+  HPPA_SR2_REGNUM = 46,                /* space register 2 */
+  HPPA_SR3_REGNUM = 47,                /* space register 3 */
+  HPPA_SR5_REGNUM = 48,                /* space register 5 */
+  HPPA_SR6_REGNUM = 49,                /* space register 6 */
+  HPPA_SR7_REGNUM = 50,                /* space register 7 */
   HPPA_RCR_REGNUM = 51,                /* Recover Counter (also known as cr0) */
   HPPA_PID0_REGNUM = 52,       /* Protection ID */
   HPPA_PID1_REGNUM = 53,       /* Protection ID */
@@ -76,41 +84,40 @@ enum hppa_regnum
 #define HPPA_INSN_SIZE 4
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct hppa_gdbarch_tdep : gdbarch_tdep_base
 {
   /* The number of bytes in an address.  For now, this field is designed
      to allow us to differentiate hppa32 from hppa64 targets.  */
-  int bytes_per_address;
+  int bytes_per_address = 0;
 
   /* Is this an ELF target? This can be 64-bit HP-UX, or a 32/64-bit GNU/Linux
      system.  */
-  int is_elf;
+  int is_elf = 0;
 
   /* Given a function address, try to find the global pointer for the 
      corresponding shared object.  */
-  CORE_ADDR (*find_global_pointer) (struct gdbarch *, struct value *);
+  CORE_ADDR (*find_global_pointer) (struct gdbarch *, struct value *) = nullptr;
 
   /* For shared libraries, each call goes through a small piece of
-     trampoline code in the ".plt", or equivalent, section.
-     IN_SOLIB_CALL_TRAMPOLINE evaluates to nonzero if we are currently
-     stopped in one of these.  */
+     trampoline code in the ".plt" section.  IN_SOLIB_CALL_TRAMPOLINE
+     evaluates to nonzero if we are currently stopped in one of these.  */
   int (*in_solib_call_trampoline) (struct gdbarch *gdbarch,
-                                  CORE_ADDR pc, char *name);
+                                  CORE_ADDR pc) = nullptr;
 
   /* For targets that support multiple spaces, we may have additional stubs
      in the return path.  These stubs are internal to the ABI, and users are
      not interested in them.  If we detect that we are returning to a stub,
      adjust the pc to the real caller.  This improves the behavior of commands
      that traverse frames such as "up" and "finish".  */
-  void (*unwind_adjust_stub) (struct frame_info *this_frame, CORE_ADDR base,
-                             struct trad_frame_saved_reg *saved_regs);
+  void (*unwind_adjust_stub) (const frame_info_ptr &this_frame, CORE_ADDR base,
+                             trad_frame_saved_reg *saved_regs) = nullptr;
 
   /* These are solib-dependent methods.  They are really HPUX only, but
      we don't have a HPUX-specific tdep vector at the moment.  */
-  CORE_ADDR (*solib_thread_start_addr) (struct so_list *so);
-  CORE_ADDR (*solib_get_got_by_pc) (CORE_ADDR addr);
-  CORE_ADDR (*solib_get_solib_by_pc) (CORE_ADDR addr);
-  CORE_ADDR (*solib_get_text_base) (struct objfile *objfile);
+  CORE_ADDR (*solib_thread_start_addr) (solib *so) = nullptr;
+  CORE_ADDR (*solib_get_got_by_pc) (CORE_ADDR addr) = nullptr;
+  CORE_ADDR (*solib_get_solib_by_pc) (CORE_ADDR addr) = nullptr;
+  CORE_ADDR (*solib_get_text_base) (struct objfile *objfile) = nullptr;
 };
 
 /*
@@ -184,39 +191,6 @@ enum unwind_stub_types
 
 struct unwind_table_entry *find_unwind_entry (CORE_ADDR);
 
-/* We use the objfile->obj_private pointer for two things:
- * 1.  An unwind table;
- *
- * 2.  A pointer to any associated shared library object.
- *
- * #defines are used to help refer to these objects.
- */
-
-/* Info about the unwind table associated with an object file.
- * This is hung off of the "objfile->obj_private" pointer, and
- * is allocated in the objfile's psymbol obstack.  This allows
- * us to have unique unwind info for each executable and shared
- * library that we are debugging.
- */
-struct hppa_unwind_info
-  {
-    struct unwind_table_entry *table;  /* Pointer to unwind info */
-    struct unwind_table_entry *cache;  /* Pointer to last entry we found */
-    int last;                          /* Index of last entry */
-  };
-
-struct hppa_objfile_private
-  {
-    struct hppa_unwind_info *unwind_info;      /* a pointer */
-    struct so_list *so_info;                   /* a pointer  */
-    CORE_ADDR dp;
-
-    int dummy_call_sequence_reg;
-    CORE_ADDR dummy_call_sequence_addr;
-  };
-
-extern const struct objfile_data *hppa_objfile_priv_data;
-
 int hppa_get_field (unsigned word, int from, int to);
 int hppa_extract_5_load (unsigned int);
 unsigned hppa_extract_5R_store (unsigned int);
@@ -227,24 +201,17 @@ int hppa_extract_14 (unsigned);
 CORE_ADDR hppa_symbol_address(const char *sym);
 
 extern struct value *
-  hppa_frame_prev_register_helper (struct frame_info *this_frame,
-                                  struct trad_frame_saved_reg *saved_regs,
+  hppa_frame_prev_register_helper (const frame_info_ptr &this_frame,
+                                  trad_frame_saved_reg *saved_regs,
                                   int regnum);
 
 extern CORE_ADDR hppa_read_pc (struct regcache *regcache);
 extern void hppa_write_pc (struct regcache *regcache, CORE_ADDR pc);
 extern CORE_ADDR hppa_unwind_pc (struct gdbarch *gdbarch,
-                                struct frame_info *next_frame);
-
-extern struct minimal_symbol *
-  hppa_lookup_stub_minimal_symbol (const char *name,
-                                   enum unwind_stub_types stub_type);
-
-extern struct hppa_objfile_private *
-hppa_init_objfile_priv_data (struct objfile *objfile);
+                                const frame_info_ptr &next_frame);
 
 extern int hppa_in_solib_call_trampoline (struct gdbarch *gdbarch,
-                                         CORE_ADDR pc, char *name);
-extern CORE_ADDR hppa_skip_trampoline_code (struct frame_info *, CORE_ADDR pc);
+                                         CORE_ADDR pc);
+extern CORE_ADDR hppa_skip_trampoline_code (const frame_info_ptr &, CORE_ADDR pc);
 
 #endif  /* hppa-tdep.h */