unwind_i.h revision 32a1dc6be5b6caed9a3c366dab941e20b3f39ca1
17fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm/* libunwind - a platform-independent unwind library 25a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm Copyright (C) 2001-2003 Hewlett-Packard Co 37fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm Contributed by David Mosberger-Tang <davidm@hpl.hp.com> 47fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 57fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmThis file is part of libunwind. 67fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 7aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmPermission is hereby granted, free of charge, to any person obtaining 8aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidma copy of this software and associated documentation files (the 9aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidm"Software"), to deal in the Software without restriction, including 10aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmwithout limitation the rights to use, copy, modify, merge, publish, 11aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmdistribute, sublicense, and/or sell copies of the Software, and to 12aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmpermit persons to whom the Software is furnished to do so, subject to 13aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmthe following conditions: 14aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidm 15aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmThe above copyright notice and this permission notice shall be 16aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmincluded in all copies or substantial portions of the Software. 17aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidm 18aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 22aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24aca3843d6f53f2b36cb66c167a10e3e30e8ebd3amostang.com!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 257fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 269a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm#ifndef unwind_i_h 279a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm#define unwind_i_h 289a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm 297fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#include <memory.h> 307fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#include <stdint.h> 314e41f21f65d3c492bf990c8196237fef864997e5hp.com!davidm 321f20cef0573ab930e574675298a12160dcb3f18chp.com!davidm#include <libunwind-ia64.h> 337fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 34126ca1056681a08a28d7c4f16c5689b6ce9174e2hp.com!davidm#include "config.h" 3512f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm#include "internal.h" 365a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm#include "rse.h" 373fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm 387fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define struct_offset(str,fld) ((char *)&((str *)NULL)->fld - (char *) 0) 397fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 407fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_VER(x) ((x) >> 48) 417fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_FLAG_MASK 0x0000ffff00000000 427fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_FLAG_OSMASK 0x0000f00000000000 437fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_FLAG_EHANDLER(x) ((x) & 0x0000000100000000L) 447fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L) 457fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_UNW_LENGTH(x) ((x) & 0x00000000ffffffffL) 467fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 477fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define MIN(a,b) ((a) < (b) ? (a) : (b)) 487fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 4912f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm#include "tdep.h" 507fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 517fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm/* Bits 0 to 2 of an location are used to encode its type: 527fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 537fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm bit 0: set if location uses floating-point format. 547fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm bit 1: set if location is a NaT bit on memory stack 559a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm bit 2: set if location is a register (not needed for local-only). */ 567fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 577fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_LOC_TYPE_FP (1 << 0) 587fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_LOC_TYPE_MEMSTK_NAT (1 << 1) 597fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_LOC_TYPE_REG (1 << 2) 607fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 617fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_LOC(l,t) (((l) << 3) | (t)) 627fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 637fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_GET_LOC(l) ((l) >> 3) 647fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_MASK_LOC_TYPE(l) ((l) & ~0x7) 657fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_IS_FP_LOC(loc) (((loc) & IA64_LOC_TYPE_FP) != 0) 667fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_IS_MEMSTK_NAT(loc) (((loc) & IA64_LOC_TYPE_MEMSTK_NAT) != 0) 677fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 686a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm#ifdef UNW_LOCAL_ONLY 696a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm 70481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm#define IA64_REG_LOC(c,r) ((unw_word_t) tdep_uc_addr((c)->as_arg, (r))) 71481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm#define IA64_FPREG_LOC(c,r) \ 72481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm ((unw_word_t) tdep_uc_addr((c)->as_arg, (r)) | IA64_LOC_TYPE_FP) 739a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm 74481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm# define ia64_find_proc_info(c,ip,n) \ 75481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm tdep_find_proc_info(unw_local_addr_space, (ip), &(c)->pi, (n), \ 76481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm (c)->as_arg) 7712f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm# define ia64_put_unwind_info(c, pi) do { ; } while (0) 78e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm 79e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm/* Note: the register accessors (ia64_{get,set}{,fp}()) must check for 80481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm NULL locations because tdep_uc_addr() returns NULL for unsaved 81e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm registers. */ 82e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm 83e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidmstatic inline int 84481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_getfp (struct cursor *c, unw_word_t loc, unw_fpreg_t *val) 85e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm{ 86e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm if (!loc) 87e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return -1; 88e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm *val = *(unw_fpreg_t *) IA64_MASK_LOC_TYPE(loc); 89e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return 0; 90e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm} 91e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm 92e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidmstatic inline int 93481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_putfp (struct cursor *c, unw_word_t loc, unw_fpreg_t val) 94e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm{ 95e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm if (!loc) 96e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return -1; 97e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm *(unw_fpreg_t *) IA64_MASK_LOC_TYPE(loc) = val; 98e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return 0; 99e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm} 100e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm 101e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidmstatic inline int 102481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_get (struct cursor *c, unw_word_t loc, unw_word_t *val) 103e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm{ 104e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm if (!loc) 105e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return -1; 106e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm *val = *(unw_word_t *) IA64_MASK_LOC_TYPE(loc); 107e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return 0; 108e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm} 109e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm 110e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidmstatic inline int 111481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_put (struct cursor *c, unw_word_t loc, unw_word_t val) 112e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm{ 113e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm if (!loc) 114e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return -1; 115e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm *(unw_word_t *) IA64_MASK_LOC_TYPE(loc) = (val); 116e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm return 0; 117e633236827c579711822c22b65f70965f8bd0cb2mostang.com!davidm} 1186a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm 1196a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm#else /* !UNW_LOCAL_ONLY */ 1206a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm 1219a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm#define IA64_IS_REG_LOC(r) (((r) & IA64_LOC_TYPE_REG) != 0) 1229a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm#define IA64_REG_LOC(c,r) IA64_LOC((r), IA64_LOC_TYPE_REG) 123990790c880ff486703c12e6150e54117f0cd323dmostang.com!davidm#define IA64_FPREG_LOC(c,r) IA64_LOC((r), (IA64_LOC_TYPE_REG \ 1249a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm | IA64_LOC_TYPE_FP)) 1259a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm 12612f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm# define ia64_find_proc_info(c,ip,n) \ 12712f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ 12812f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm (c)->as_arg) 12912f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm# define ia64_put_unwind_info(c,pi) \ 13012f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm (*(c)->as->acc.put_unwind_info)((c)->as, (pi), (c)->as_arg) 1317fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1327fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstatic inline int 133481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_getfp (struct cursor *c, unw_word_t loc, unw_fpreg_t *val) 1347fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm{ 1357fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int ret; 1367fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1377fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (IA64_IS_REG_LOC (loc)) 138c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_fpreg) (c->as, IA64_GET_LOC (loc), 139c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm val, 0, c->as_arg); 1407fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1417fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm loc = IA64_MASK_LOC_TYPE(loc); 142c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm ret = (*c->as->acc.access_mem) (c->as, loc + 0, &val->raw.bits[0], 0, 143c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1447fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (ret < 0) 1457fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm return ret; 1467fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 147c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_mem) (c->as, loc + 8, &val->raw.bits[1], 0, 148c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1497fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm} 1507fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1517fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstatic inline int 152481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_putfp (struct cursor *c, unw_word_t loc, unw_fpreg_t val) 1537fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm{ 1547fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int ret; 1557fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1567fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (IA64_IS_REG_LOC (loc)) 157c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_fpreg) (c->as, IA64_GET_LOC (loc), &val, 1, 158c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1597fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1607fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm loc = IA64_MASK_LOC_TYPE(loc); 161c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm ret = (*c->as->acc.access_mem) (c->as, loc + 0, &val.raw.bits[0], 1, 162c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1637fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (ret < 0) 1647fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm return ret; 1657fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 166c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_mem) (c->as, loc + 8, &val.raw.bits[1], 1, 167c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1687fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm} 1697fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1707fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm/* Get the 64 data bits from location LOC. If bit 0 is cleared, LOC 1717fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm is a memory address, otherwise it is a register number. If the 1727fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm register is a floating-point register, the 64 bits are read from 1737fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm the significand bits. */ 1747fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1757fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstatic inline int 176481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_get (struct cursor *c, unw_word_t loc, unw_word_t *val) 1777fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm{ 1787fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (IA64_IS_FP_LOC (loc)) 1797fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 1807fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_fpreg_t tmp; 1817fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int ret; 1827fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1837fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm ret = ia64_getfp (c, loc, &tmp); 1847fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (ret < 0) 1857fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm return ret; 1867fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 18712f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm if (c->as->big_endian) 1887fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm *val = tmp.raw.bits[1]; 1897fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm else 1907fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm *val = tmp.raw.bits[0]; 1917fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm return 0; 1927fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm } 1937fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 1947fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (IA64_IS_REG_LOC (loc)) 195c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_reg)(c->as, IA64_GET_LOC (loc), val, 0, 196c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 1977fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm else 198c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_mem)(c->as, loc, val, 0, c->as_arg); 1997fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm} 2007fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2017fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstatic inline int 202481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmia64_put (struct cursor *c, unw_word_t loc, unw_word_t val) 2037fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm{ 2047fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm if (IA64_IS_FP_LOC (loc)) 2057fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 2067fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_fpreg_t tmp; 2077fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2087fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm memset (&tmp, 0, sizeof (tmp)); 20912f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm if (c->as->big_endian) 2107fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm tmp.raw.bits[1] = val; 2117fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm else 2127fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm tmp.raw.bits[0] = val; 2137fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm return ia64_putfp (c, loc, tmp); 2147fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm } 2157fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 216c2262737f7313096b2aaa1ebbd3c7ae062005ba2model.com!marky if (IA64_IS_REG_LOC (loc)) 217c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_reg)(c->as, IA64_GET_LOC (loc), &val, 1, 218c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm c->as_arg); 2197fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm else 220c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm return (*c->as->acc.access_mem)(c->as, loc, &val, 1, c->as_arg); 2217fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm} 2227fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2236a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm#endif /* !UNW_LOCAL_ONLY */ 2247fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2257fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstruct ia64_unwind_block 2267fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 2277fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t header; 2287fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t desc[0]; /* unwind descriptors */ 2297fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2307fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm /* Personality routine and language-specific data follow behind 2317fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm descriptors. */ 2327fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm }; 2337fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2347fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmenum ia64_where 2357fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 2367fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_NONE, /* register isn't saved at all */ 2377fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_GR, /* register is saved in a general register */ 2387fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_FR, /* register is saved in a floating-point register */ 2397fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_BR, /* register is saved in a branch register */ 2407fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_SPREL, /* register is saved on memstack (sp-relative) */ 2417fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_PSPREL, /* register is saved on memstack (psp-relative) */ 2427fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2437fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm /* At the end of each prologue these locations get resolved to 2447fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_PSPREL and IA64_WHERE_GR, respectively: */ 2457fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2467fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_SPILL_HOME, /* register is saved in its spill home */ 2477fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm IA64_WHERE_GR_SAVE /* register is saved in next general register */ 2483fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm }; 2497fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2507fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#define IA64_WHEN_NEVER 0x7fffffff 2517fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2527fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstruct ia64_reg_info 2537fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 2547fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t val; /* save location: register number or offset */ 2557fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm enum ia64_where where; /* where the register gets saved */ 2567fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int when; /* when the register gets saved */ 2577fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm }; 2587fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2596a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidmstruct ia64_labeled_state; /* opaque structure */ 2606a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm 2613fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidmstruct ia64_reg_state 2623fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm { 2633fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm struct ia64_reg_state *next; /* next (outer) element on state stack */ 2643fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm struct ia64_reg_info reg[IA64_NUM_PREGS]; /* register save locations */ 2653fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm }; 2666a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm 2677fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmstruct ia64_state_record 2687fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm { 2697fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unsigned int first_region : 1; /* is this the first region? */ 2707fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unsigned int done : 1; /* are we done scanning descriptors? */ 2717fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unsigned int any_spills : 1; /* got any register spills? */ 2727fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unsigned int in_body : 1; /* are we inside prologue or body? */ 27312f30d648157d340228b9dbb53809b52c23f5588mostang.com!davidm unsigned int is_signal_frame : 1; 2747fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2754e41f21f65d3c492bf990c8196237fef864997e5hp.com!davidm uint8_t *imask; /* imask of spill_mask record or NULL */ 2767fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t pr_val; /* predicate values */ 2777fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t pr_mask; /* predicate mask */ 2787fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2797fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm long spill_offset; /* psp-relative offset for spill base */ 2807fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int region_start; 2817fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int region_len; 2827fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int epilogue_start; 2837fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int epilogue_count; 2847fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm int when_target; 2857fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2867fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm uint8_t gr_save_loc; /* next save register */ 2877fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm uint8_t return_link_reg; /* branch register used as return pointer */ 2887fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 2896a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm struct ia64_labeled_state *labeled_states; 2906a4f3b23c1ba506fd36dee49e26e845a56451837(none)!davidm struct ia64_reg_state curr; 2913fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm }; 2923fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm 2933fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidmstruct ia64_labeled_state 2943fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm { 2953fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm struct ia64_labeled_state *next; /* next label (or NULL) */ 2963fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm unsigned long label; /* label for this state */ 2973fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm struct ia64_reg_state saved_state; 2983fbd1a1d688b8d6c55468576b55fd3a08992271emostang.com!davidm }; 2997fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 3007fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm/* Convenience macros: */ 301c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm#define ia64_make_proc_info UNW_OBJ(make_proc_info) 302bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_create_state_record UNW_OBJ(create_state_record) 303bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_free_state_record UNW_OBJ(free_state_record) 304bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_find_save_locs UNW_OBJ(find_save_locs) 305126ca1056681a08a28d7c4f16c5689b6ce9174e2hp.com!davidm#define ia64_per_thread_cache UNW_OBJ(per_thread_cache) 306126ca1056681a08a28d7c4f16c5689b6ce9174e2hp.com!davidm#define ia64_script_cache_init UNW_OBJ(script_cache_init) 307bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_access_reg UNW_OBJ(access_reg) 308bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_access_fpreg UNW_OBJ(access_fpreg) 309bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_scratch_loc UNW_OBJ(scratch_loc) 310bd228fb16a2fbf6a6bb137c582079357df11de87mostang.com!davidm#define ia64_local_resume UNW_OBJ(local_resume) 311481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm#define ia64_local_addr_space_init UNW_OBJ(local_addr_space_init) 312481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidm#define ia64_init UNW_ARCH_OBJ(init) 3135a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm#define rbs_record_switch UNW_ARCH_OBJ(rbs_record_switch) 3145a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm#define rbs_underflow UNW_ARCH_OBJ(rbs_underflow) 315eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidm#define rbs_find_stacked UNW_ARCH_OBJ(rbs_find_stacked) 31632a1dc6be5b6caed9a3c366dab941e20b3f39ca1mostang.com!davidm#define rbs_cover_and_flush UNW_ARCH_OBJ(rbs_cover_and_flush) 3177fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 318481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern int ia64_make_proc_info (struct cursor *c); 319481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern int ia64_create_state_record (struct cursor *c, 3207fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm struct ia64_state_record *sr); 3217fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmextern int ia64_free_state_record (struct ia64_state_record *sr); 322481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern int ia64_find_save_locs (struct cursor *c); 323126ca1056681a08a28d7c4f16c5689b6ce9174e2hp.com!davidmextern void ia64_script_cache_init (struct ia64_script_cache *cache); 3247fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidmextern void ia64_init (void); 325481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern int ia64_access_reg (struct cursor *c, unw_regnum_t reg, 3267fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_word_t *valp, int write); 327481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern int ia64_access_fpreg (struct cursor *c, unw_regnum_t reg, 3287fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm unw_fpreg_t *valp, int write); 329481e35c2ca6da6149db30c8572979e035cfff55dmostang.com!davidmextern unw_word_t ia64_scratch_loc (struct cursor *c, unw_regnum_t reg); 3307fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 331ebed1d6b829d3ee078ca4865298c22c177ad33b5mostang.com!davidmextern void _Uia64_install_context (struct cursor *c, unw_word_t pri_unat, 33232a1dc6be5b6caed9a3c366dab941e20b3f39ca1mostang.com!davidm unw_word_t *extra) 3339a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm __attribute__ ((noreturn)); 334c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidmextern int ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, 335c97d8cdab47236ffaa65e9a3a3f29e95b865c8e6mostang.com!davidm void *arg); 336eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidmextern int rbs_record_switch (struct cursor *c, 337eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidm unw_word_t saved_bsp, unw_word_t saved_bspstore, 3385a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm unw_word_t saved_rnat_loc); 3395a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidmextern void rbs_underflow (struct cursor *c); 3405a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidmextern int rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, 3415a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm unw_word_t *locp, unw_word_t *rnat_locp); 34232a1dc6be5b6caed9a3c366dab941e20b3f39ca1mostang.com!davidmextern int rbs_cover_and_flush (struct cursor *c, unw_word_t nregs); 3435a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm 3445a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidmstatic inline int 345eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidmia64_get_stacked (struct cursor *c, unw_word_t reg, 3465a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm unw_word_t *locp, unw_word_t *rnat_locp) 3475a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm{ 3485a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm struct rbs_area *rbs = c->rbs_area + c->rbs_curr; 349eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidm unw_word_t loc, regs_to_skip = reg - 32; 3505a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm int ret = 0; 3515a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm 352eacf0e24e15a6793a88d41b3294c2c1ee43a097emostang.com!davidm assert (reg >= 32 && reg < 128); 3535a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm 3545a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm *locp = loc = ia64_rse_skip_regs (c->bsp, regs_to_skip); 3555a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm if (rnat_locp) 3564368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm { 3574368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm *rnat_locp = ia64_rse_rnat_addr (loc); 3584368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm if (*rnat_locp >= rbs->end) 3594368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm *rnat_locp = rbs->rnat_loc; 3604368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm } 3615a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm 3624368ea4a70f9ffbf5a973519e890016b0e3aca9emostang.com!davidm if (loc >= rbs->end) 3635a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm ret = rbs_find_stacked (c, regs_to_skip, locp, rnat_locp); 3645a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm return ret; 3655a55c1d8a8b4374c487fbfa0d8045b139cd243ecmostang.com!davidm} 3669a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm 3677fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm/* XXX should be in glibc: */ 3687fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#ifndef IA64_SC_FLAG_ONSTACK 3697fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_ONSTACK_BIT 0 /* running on signal stack? */ 3707fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_IN_SYSCALL_BIT 1 /* did signal interrupt a syscall? */ 3717fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_FPH_VALID_BIT 2 /* is state in f[32]-f[127] valid? */ 3727fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm 3737fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_ONSTACK (1 << IA64_SC_FLAG_ONSTACK_BIT) 3747fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_IN_SYSCALL (1 << IA64_SC_FLAG_IN_SYSCALL_BIT) 3757fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm# define IA64_SC_FLAG_FPH_VALID (1 << IA64_SC_FLAG_FPH_VALID_BIT) 3767fbfe0a255eb7ff3f27efa5adc6ed69dab471ecfmostang.com!davidm#endif 3779a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm 3789a2039fe0179b715daed0205564f6cffa519b389mostang.com!davidm#endif /* unwind_i_h */ 379