File indexing completed on 2025-05-11 08:24:16
0001 #include "rtl-unwind-arm.h"
0002
0003 bool
0004 rtems_rtl_elf_unwind_parse (const rtems_rtl_obj* obj,
0005 const char* name,
0006 uint32_t flags)
0007 {
0008
0009
0010
0011 return false;
0012 }
0013
0014 bool
0015 rtems_rtl_elf_unwind_register (rtems_rtl_obj* obj)
0016 {
0017 return true;
0018 }
0019
0020 bool
0021 rtems_rtl_elf_unwind_deregister (rtems_rtl_obj* obj)
0022 {
0023 obj->loader = NULL;
0024 return true;
0025 }
0026
0027
0028
0029
0030
0031
0032
0033
0034 _Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
0035 int* nrec) __attribute__ ((__noinline__,
0036 __used__,
0037 __noclone__));
0038
0039 _Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr return_address,
0040 int* nrec)
0041 {
0042 rtems_rtl_data* rtl;
0043 rtems_chain_node* node;
0044 __EIT_entry* exidx_start = &__exidx_start;
0045 __EIT_entry* exidx_end = &__exidx_end;
0046
0047 rtl = rtems_rtl_lock ();
0048
0049 node = rtems_chain_first (&rtl->objects);
0050 while (!rtems_chain_is_tail (&rtl->objects, node)) {
0051 rtems_rtl_obj* obj = (rtems_rtl_obj*) node;
0052 if (rtems_rtl_obj_text_inside (obj, (void*) return_address)) {
0053 exidx_start = (__EIT_entry*) obj->eh_base;
0054 exidx_end = (__EIT_entry*) (obj->eh_base + obj->eh_size);
0055 break;
0056 }
0057 node = rtems_chain_next (node);
0058 }
0059
0060 rtems_rtl_unlock ();
0061
0062 *nrec = exidx_end - exidx_start;
0063
0064 return (_Unwind_Ptr) exidx_start;
0065 }