summaryrefslogtreecommitdiffstats
path: root/cpukit/libdl/rtl-unwind-arm.h
blob: 08a2660560e709f88ee2ecdbfa6b50aaec154ffe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <unwind.h>

#include <rtems/rtl/rtl.h>
#include "rtl-unwind.h"

typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
typedef _Unwind_Word _uw;

bool
rtems_rtl_elf_unwind_parse (const rtems_rtl_obj* obj,
                            const char*          name,
                            uint32_t             flags);

bool
rtems_rtl_elf_unwind_register (rtems_rtl_obj* obj);

bool
rtems_rtl_elf_unwind_deregister (rtems_rtl_obj* obj);

/* An exception index table entry.  */
typedef struct __EIT_entry
{
  _uw fnoffset;
  _uw content;
} __EIT_entry;

/* The exception index table location in the base module */
extern __EIT_entry __exidx_start;
extern __EIT_entry __exidx_end;

/*
 * A weak reference is in libgcc, provide a real version and provide a way to
 * manage loaded modules.
 *
 * Passed in the return address and a reference to the number of records
 * found. We set the start of the exidx data and the number of records.
 */
_Unwind_Ptr
__gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
                         int*        nrec) __attribute__ ((__noinline__,
                                                           __used__,
                                                           __noclone__));

_Unwind_Ptr
__gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
                         int*        nrec);