X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fia64-tdep.h;h=14c7a1ef0a53c49618275d1bdc211e5febc0016d;hb=1e0baa1f26cf008198d0abf4d9f1595f464d5657;hp=6bee6008d479f9e5f474c06a894059c553a0a467;hpb=4b48ac2266039bff16ce766f6599d21940042d90;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ia64-tdep.h b/gdb/ia64-tdep.h index 6bee6008d4..14c7a1ef0a 100644 --- a/gdb/ia64-tdep.h +++ b/gdb/ia64-tdep.h @@ -1,12 +1,12 @@ /* Target-dependent code for the ia64. - Copyright 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2004-2016 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, @@ -15,13 +15,16 @@ 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., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #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. @@ -196,11 +199,66 @@ #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 */