1ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux/* libunwind - a platform-independent unwind library
2ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   Copyright (C) 2001-2004 Hewlett-Packard Co
3ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux	Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
4ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   Copyright (C) 2013 Linaro Limited
5ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
6ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxThis file is part of libunwind.
7ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
8ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxPermission is hereby granted, free of charge, to any person obtaining
9ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxa copy of this software and associated documentation files (the
10ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux"Software"), to deal in the Software without restriction, including
11ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxwithout limitation the rights to use, copy, modify, merge, publish,
12ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxdistribute, sublicense, and/or sell copies of the Software, and to
13ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxpermit persons to whom the Software is furnished to do so, subject to
14ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxthe following conditions:
15ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
16ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxThe above copyright notice and this permission notice shall be
17ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxincluded in all copies or substantial portions of the Software.
18ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
19ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan RouxWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
26ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
27ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#ifndef LIBUNWIND_H
28ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define LIBUNWIND_H
29ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
30ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#if defined(__cplusplus) || defined(c_plusplus)
31ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxextern "C" {
32ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#endif
33ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
34ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <inttypes.h>
35ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <stddef.h>
36ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include <ucontext.h>
37ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
38ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define UNW_TARGET	aarch64
39ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define UNW_TARGET_AARCH64	1
40ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
41ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define _U_TDEP_QP_TRUE	0	/* see libunwind-dynamic.h  */
42ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
43ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux/* This needs to be big enough to accommodate "struct cursor", while
44ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   leaving some slack for future expansion.  Changing this value will
45ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   require recompiling all users of this library.  Stack allocation is
46ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   relatively cheap and unwind-state copying is relatively rare, so we
47ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux   want to err on making it rather too big than too small.  */
48ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
49ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define UNW_TDEP_CURSOR_LEN	4096
50ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
51ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef uint64_t unw_word_t;
52ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef int64_t unw_sword_t;
53ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
54ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef long double unw_tdep_fpreg_t;
55ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
56ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef struct
57ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  {
58ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* no aarch64-specific auxiliary proc-info */
59ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  }
60ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxunw_tdep_proc_info_t;
61ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
62ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef enum
63ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  {
64ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* 64-bit general registers.  */
65ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X0,
66ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X1,
67ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X2,
68ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X3,
69ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X4,
70ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X5,
71ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X6,
72ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X7,
73ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X8,
74ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
75ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* Temporary registers.  */
76ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X9,
77ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X10,
78ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X11,
79ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X12,
80ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X13,
81ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X14,
82ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X15,
83ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
84ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* Intra-procedure-call temporary registers.  */
85ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X16,
86ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X17,
87ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
88ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* Callee-saved registers.  */
89ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X18,
90ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X19,
91ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X20,
92ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X21,
93ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X22,
94ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X23,
95ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X24,
96ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X25,
97ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X26,
98ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X27,
99ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X28,
100ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
101ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* 64-bit frame pointer.  */
102ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X29,
103ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
104ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* 64-bit link register.  */
105ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_X30,
106ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
107ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* 64-bit stack pointer.  */
108ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_SP =  31,
109ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_PC,
110ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_PSTATE,
111ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
112ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* 128-bit FP/Advanced SIMD registers.  */
113ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V0 = 64,
114ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V1,
115ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V2,
116ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V3,
117ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V4,
118ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V5,
119ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V6,
120ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V7,
121ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V8,
122ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V9,
123ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V10,
124ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V11,
125ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V12,
126ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V13,
127ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V14,
128ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V15,
129ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V16,
130ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V17,
131ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V18,
132ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V19,
133ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V20,
134ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V21,
135ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V22,
136ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V23,
137ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V24,
138ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V25,
139ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V26,
140ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V27,
141ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V28,
142ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V29,
143ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V30,
144ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_V31,
145ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
146ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_FPSR,
147ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_FPCR,
148ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
149ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* For AArch64, the CFA is the value of SP (x31) at the call site of the
150ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux       previous frame.  */
151ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_AARCH64_CFA = UNW_AARCH64_SP,
152ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
153ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_TDEP_LAST_REG = UNW_AARCH64_FPCR,
154ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
155ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_TDEP_IP = UNW_AARCH64_X30,
156ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_TDEP_SP = UNW_AARCH64_SP,
157ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    UNW_TDEP_EH = UNW_AARCH64_X0,
158ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
159ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  }
160ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxaarch64_regnum_t;
161ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
162ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux/* Use R0 through R3 to pass exception handling information.  */
163ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define UNW_TDEP_NUM_EH_REGS	4
164ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
165ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef struct unw_tdep_save_loc
166ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  {
167ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux    /* Additional target-dependent info on a save location.  */
168ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux  }
169ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxunw_tdep_save_loc_t;
170ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
171ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
172ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux/* On AArch64, we can directly use ucontext_t as the unwind context.  */
173ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxtypedef ucontext_t unw_tdep_context_t;
174ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
175ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include "libunwind-common.h"
176ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#include "libunwind-dynamic.h"
177ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
1789fc75e8c57dbafcd5ffad208dc79d45319d3700fChristopher Ferris/* ANDROID support update. */
17925df8e67f4e800dd39e80adb574b060e5907a633Kévin PETIT/* There is no getcontext in Android. */
1809fc75e8c57dbafcd5ffad208dc79d45319d3700fChristopher Ferris#define unw_tdep_getcontext(uc) (({					\
1819fc75e8c57dbafcd5ffad208dc79d45319d3700fChristopher Ferris  unw_tdep_context_t *unw_ctx = (uc);					\
182cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris  register uint64_t *unw_base asm ("x0") = (uint64_t*) unw_ctx->uc_mcontext.regs;		\
183cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris  __asm__ __volatile__ (						\
184cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x0, x1, [%[base], #0]\n" \
185cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x2, x3, [%[base], #16]\n" \
186cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x4, x5, [%[base], #32]\n" \
187cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x6, x7, [%[base], #48]\n" \
188cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x8, x9, [%[base], #64]\n" \
189cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x10, x11, [%[base], #80]\n" \
190cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x12, x13, [%[base], #96]\n" \
191cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x14, x13, [%[base], #112]\n" \
192cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x16, x17, [%[base], #128]\n" \
193cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x18, x19, [%[base], #144]\n" \
194cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x20, x21, [%[base], #160]\n" \
195cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x22, x23, [%[base], #176]\n" \
196cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x24, x25, [%[base], #192]\n" \
197cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x26, x27, [%[base], #208]\n" \
198cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x28, x29, [%[base], #224]\n" \
199cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "str x30, [%[base], #240]\n" \
200cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "mov x1, sp\n" \
201cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     "stp x1, x30, [%[base], #248]\n" \
202cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris     : [base] "+r" (unw_base) : : "x1", "memory"); \
203cc03527798492c369019e50d1559e519f0c49bceChristopher Ferris  }), 0)
2049fc75e8c57dbafcd5ffad208dc79d45319d3700fChristopher Ferris/* End of ANDROID update. */
205ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#define unw_tdep_is_fpreg		UNW_ARCH_OBJ(is_fpreg)
206ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
207ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Rouxextern int unw_tdep_is_fpreg (int);
208ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
209ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#if defined(__cplusplus) || defined(c_plusplus)
210ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux}
211ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#endif
212ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux
213ac6c0a6535975f1dc2da6e4e2766614baac2a14aYvan Roux#endif /* LIBUNWIND_H */
214