]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/arm/unwind-arm.h
configure.ac: Don't add ${libgcj} for arm*-*-freebsd*.
[thirdparty/gcc.git] / libgcc / config / arm / unwind-arm.h
CommitLineData
2a75c0b6 1/* Header file for the ARM EABI unwinder
5624e564 2 Copyright (C) 2003-2015 Free Software Foundation, Inc.
2a75c0b6
PB
3 Contributed by Paul Brook
4
5 This file is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
748086b7 7 Free Software Foundation; either version 3, or (at your option) any
2a75c0b6
PB
8 later version.
9
2a75c0b6
PB
10 This file is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
748086b7
JJ
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
18
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
2a75c0b6 23
619519c8
KH
24/* Language-independent unwinder header public defines. This contains both
25 ABI defined objects, and GNU support routines. */
2a75c0b6
PB
26
27#ifndef UNWIND_ARM_H
28#define UNWIND_ARM_H
29
1e874273
PB
30#include "unwind-arm-common.h"
31
32#define UNWIND_STACK_REG 13
33/* Use IP as a scratch register within the personality routine. */
34#define UNWIND_POINTER_REG 12
2a75c0b6
PB
35
36#ifdef __cplusplus
37extern "C" {
38#endif
2a75c0b6
PB
39 /* Decode an R_ARM_TARGET2 relocation. */
40 static inline _Unwind_Word
acb72498
MK
41 _Unwind_decode_typeinfo_ptr (_Unwind_Word base __attribute__ ((unused)),
42 _Unwind_Word ptr)
2a75c0b6
PB
43 {
44 _Unwind_Word tmp;
45
46 tmp = *(_Unwind_Word *) ptr;
47 /* Zero values are always NULL. */
48 if (!tmp)
49 return 0;
50
82a19768
AT
51#if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__) \
52 || defined(__FreeBSD__)
2a75c0b6 53 /* Pc-relative indirect. */
1e874273 54#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel | DW_EH_PE_indirect)
2a75c0b6
PB
55 tmp += ptr;
56 tmp = *(_Unwind_Word *) tmp;
433d52fd 57#elif defined(__symbian__) || defined(__uClinux__)
1e874273 58#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_absptr)
619519c8 59 /* Absolute pointer. Nothing more to do. */
2a75c0b6 60#else
1e874273 61#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel)
2a75c0b6
PB
62 /* Pc-relative pointer. */
63 tmp += ptr;
64#endif
65 return tmp;
66 }
67
1e874273 68 static inline _Unwind_Reason_Code
acb72498 69 __gnu_unwind_24bit (_Unwind_Context * context __attribute__ ((unused)),
7c9bc875 70 _uw data __attribute__ ((unused)),
acb72498 71 int compact __attribute__ ((unused)))
2a75c0b6 72 {
1e874273 73 return _URC_FAILURE;
2a75c0b6 74 }
2a75c0b6
PB
75 /* Return the address of the instruction, not the actual IP value. */
76#define _Unwind_GetIP(context) \
77 (_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
78
2a75c0b6
PB
79#define _Unwind_SetIP(context, val) \
80 _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
81
2a75c0b6
PB
82#ifdef __cplusplus
83} /* extern "C" */
84#endif
85
86#endif /* defined UNWIND_ARM_H */