OK Nice change and clean up.
Thanks Chris On 29/7/2022 1:04 am, Ryan Long wrote: > 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 > --- > cpukit/libdl/rtl-mdreloc-aarch64.c | 79 +----------------------------- > cpukit/libdl/rtl-mdreloc-arm.c | 79 +----------------------------- > cpukit/libdl/rtl-unwind-arm.c | 69 ++++++++++++++++++++++++++ > cpukit/libdl/rtl-unwind-arm.h | 46 +++++++++++++++++ > spec/build/cpukit/objdlaarch64.yml | 1 + > spec/build/cpukit/objdlarm.yml | 1 + > 6 files changed, 119 insertions(+), 156 deletions(-) > create mode 100644 cpukit/libdl/rtl-unwind-arm.c > create mode 100644 cpukit/libdl/rtl-unwind-arm.h > > diff --git a/cpukit/libdl/rtl-mdreloc-aarch64.c > b/cpukit/libdl/rtl-mdreloc-aarch64.c > index 3b1bbff2d2..738c9eba70 100644 > --- a/cpukit/libdl/rtl-mdreloc-aarch64.c > +++ b/cpukit/libdl/rtl-mdreloc-aarch64.c > @@ -73,16 +73,12 @@ __RCSID("$NetBSD: mdreloc.c,v 1.14 2020/06/16 21:01:30 > joerg Exp $"); > #include <inttypes.h> > #include <sys/stat.h> > #include <sys/endian.h> > -#include <unwind.h> > > #include <rtems/rtl/rtl.h> > #include "rtl-elf.h" > #include "rtl-error.h" > #include <rtems/rtl/rtl-trace.h> > -#include "rtl-unwind.h" > - > -typedef unsigned _Unwind_Word __attribute__((__mode__(__word__))); > -typedef _Unwind_Word _uw; > +#include "rtl-unwind-arm.h" > > struct tls_data { > size_t td_tlsindex; > @@ -523,76 +519,3 @@ rtems_rtl_elf_relocate_rel (rtems_rtl_obj* > obj, > return rtems_rtl_elf_rel_failure; > } > > -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) > -{ > - return true; > -} > - > -/* 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) > -{ > - 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; > -} > diff --git a/cpukit/libdl/rtl-mdreloc-arm.c b/cpukit/libdl/rtl-mdreloc-arm.c > index 4950dcdab1..fbfd42dc58 100644 > --- a/cpukit/libdl/rtl-mdreloc-arm.c > +++ b/cpukit/libdl/rtl-mdreloc-arm.c > @@ -12,14 +12,12 @@ > #include <string.h> > #include <sys/types.h> > #include <sys/stat.h> > -#include <unwind.h> > -#include <unwind-arm-common.h> > > #include <rtems/rtl/rtl.h> > #include "rtl-elf.h" > #include "rtl-error.h" > #include <rtems/rtl/rtl-trace.h> > -#include "rtl-unwind.h" > +#include "rtl-unwind-arm.h" > > /* > * Set to 1 to allow untested relocations. If you tested one and it > @@ -597,78 +595,3 @@ rtems_rtl_elf_relocate_rel (rtems_rtl_obj* > obj, > symvalue, > false); > } > - > -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; > -} > - > -/* 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) > -{ > - 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; > -} > diff --git a/cpukit/libdl/rtl-unwind-arm.c b/cpukit/libdl/rtl-unwind-arm.c > new file mode 100644 > index 0000000000..a496fb3793 > --- /dev/null > +++ b/cpukit/libdl/rtl-unwind-arm.c > @@ -0,0 +1,69 @@ > +#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) > +{ > + return true; > +} > + > +/* 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) > +{ > + 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; > +} > diff --git a/cpukit/libdl/rtl-unwind-arm.h b/cpukit/libdl/rtl-unwind-arm.h > new file mode 100644 > index 0000000000..08a2660560 > --- /dev/null > +++ b/cpukit/libdl/rtl-unwind-arm.h > @@ -0,0 +1,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); > diff --git a/spec/build/cpukit/objdlaarch64.yml > b/spec/build/cpukit/objdlaarch64.yml > index 2909a902f2..1715eefd3a 100644 > --- a/spec/build/cpukit/objdlaarch64.yml > +++ b/spec/build/cpukit/objdlaarch64.yml > @@ -12,4 +12,5 @@ install: [] > links: [] > source: > - cpukit/libdl/rtl-mdreloc-aarch64.c > +- cpukit/libdl/rtl-unwind-arm.c > type: build > diff --git a/spec/build/cpukit/objdlarm.yml b/spec/build/cpukit/objdlarm.yml > index 6edb3653f2..f3e1d37668 100644 > --- a/spec/build/cpukit/objdlarm.yml > +++ b/spec/build/cpukit/objdlarm.yml > @@ -12,4 +12,5 @@ install: [] > links: [] > source: > - cpukit/libdl/rtl-mdreloc-arm.c > +- cpukit/libdl/rtl-unwind-arm.c > type: build _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel