gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / ia64-tdep.h
index 7ec34c0963fde1eae90d7624886a189bbfb7d289..98ab8712a80be393ddc6d32aeb50bcefd715c9b3 100644 (file)
@@ -1,12 +1,12 @@
 /* Target-dependent code for the ia64.
 
-   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2004-2020 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 2 of the License, or
+   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,
    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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef IA64_TDEP_H
 #define IA64_TDEP_H
 
+#ifdef HAVE_LIBUNWIND_IA64_H
+#include "libunwind-ia64.h"
+#include "ia64-libunwind-tdep.h"
+#endif
+
 /* Register numbers of various important registers.  */
 
 /* General registers; there are 128 of these 64 bit wide registers.
 #define IA64_NAT32_REGNUM      (IA64_NAT0_REGNUM + 32)
 #define IA64_NAT127_REGNUM     (IA64_NAT0_REGNUM + 127)
 
+struct frame_info;
+struct regcache;
+
+/* A struction containing pointers to all the target-dependent operations
+   performed to setup an inferior function call. */
+
+struct ia64_infcall_ops
+{
+  /* Allocate a new register stack frame starting after the output
+     region of the current frame.  The new frame will contain SOF
+     registers, all in the output region.  This is one way of protecting
+     the stacked registers of the current frame.
+
+     Should do nothing if this operation is not permitted by the OS.  */
+  void (*allocate_new_rse_frame) (struct regcache *regcache, ULONGEST bsp,
+                                 int sof);
+
+  /* Store the argument stored in BUF into the appropriate location
+     given the BSP and the SLOTNUM.  */
+  void (*store_argument_in_slot) (struct regcache *regcache, CORE_ADDR bsp,
+                                  int slotnum, gdb_byte *buf);
+
+  /* For targets where we cannot call the function directly, store
+     the address of the function we want to call at the location
+     expected by the calling sequence.  */
+  void (*set_function_addr) (struct regcache *regcache, CORE_ADDR func_addr);
+};
+
 struct gdbarch_tdep
 {
-  CORE_ADDR (*sigcontext_register_address) (CORE_ADDR, int);
+  CORE_ADDR (*sigcontext_register_address) (struct gdbarch *, CORE_ADDR, int);
+  int (*pc_in_sigtramp) (CORE_ADDR);
+
+  /* Return the total size of THIS_FRAME's register frame.
+     CFM is THIS_FRAME's cfm register value.
+
+     Normally, the size of the register frame is always obtained by
+     extracting the lowest 7 bits ("cfm & 0x7f").  */
+  int (*size_of_register_frame) (struct frame_info *this_frame, ULONGEST cfm);
+
+  /* Determine the function address FADDR belongs to a shared library.
+     If it does, then return the associated global pointer.  If no shared
+     library was found to contain that function, then return zero.
+
+     This pointer may be NULL.  */
+  CORE_ADDR (*find_global_pointer_from_solib) (struct gdbarch *gdbarch,
+                                              CORE_ADDR faddr);
+
+  /* ISA-specific data types.  */
+  struct type *ia64_ext_type;
+
+  struct ia64_infcall_ops infcall_ops;
 };
 
-extern void ia64_write_pc (CORE_ADDR, ptid_t);
+extern void ia64_write_pc (struct regcache *, CORE_ADDR);
+
+#ifdef HAVE_LIBUNWIND_IA64_H
+extern unw_accessors_t ia64_unw_accessors;
+extern unw_accessors_t ia64_unw_rse_accessors;
+extern struct libunwind_descr ia64_libunwind_descr;
+#endif
 
 #endif /* ia64-tdep.h */
This page took 0.025331 seconds and 4 git commands to generate.