mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-23 11:05:24 +08:00
rtl-mdreloc-arm.c was used as the basis for rtl-mdreloc-aarch64.c. This lead to some code being shared by the two files. The code was consolidated into rtl-unwind-arm.c. Closes #4686
66 lines
1.8 KiB
C
66 lines
1.8 KiB
C
#include "rtl-unwind-arm.h"
|
|
|
|
bool
|
|
rtems_rtl_elf_unwind_parse (const rtems_rtl_obj* obj,
|
|
const char* name,
|
|
uint32_t flags)
|
|
{
|
|
/*
|
|
* We location the EH sections in section flags.
|
|
*/
|
|
return false;
|
|
}
|
|
|
|
bool
|
|
rtems_rtl_elf_unwind_register (rtems_rtl_obj* obj)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
rtems_rtl_elf_unwind_deregister (rtems_rtl_obj* obj)
|
|
{
|
|
obj->loader = NULL;
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* 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)
|
|
{
|
|
rtems_rtl_data* rtl;
|
|
rtems_chain_node* node;
|
|
__EIT_entry* exidx_start = &__exidx_start;
|
|
__EIT_entry* exidx_end = &__exidx_end;
|
|
|
|
rtl = rtems_rtl_lock ();
|
|
|
|
node = rtems_chain_first (&rtl->objects);
|
|
while (!rtems_chain_is_tail (&rtl->objects, node)) {
|
|
rtems_rtl_obj* obj = (rtems_rtl_obj*) node;
|
|
if (rtems_rtl_obj_text_inside (obj, (void*) return_address)) {
|
|
exidx_start = (__EIT_entry*) obj->eh_base;
|
|
exidx_end = (__EIT_entry*) (obj->eh_base + obj->eh_size);
|
|
break;
|
|
}
|
|
node = rtems_chain_next (node);
|
|
}
|
|
|
|
rtems_rtl_unlock ();
|
|
|
|
*nrec = exidx_end - exidx_start;
|
|
|
|
return (_Unwind_Ptr) exidx_start;
|
|
}
|