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