|
Message-ID: <20130710203518.576804e3@vostro> Date: Wed, 10 Jul 2013 20:35:18 +0300 From: Timo Teras <timo.teras@....fi> To: musl@...ts.openwall.com Subject: Re: [PATCH 2/3] Unwind support for ARM EABI On Wed, 10 Jul 2013 16:39:00 +0300 Timo Teräs <timo.teras@....fi> wrote: > ARM EABI does not use the .eh_frame and .eh_frame_hdr for unwinding. > Instead the ABI specifies it's own way to unwind using .ARM.exidx and > .ARM.extab. > > libgcc uses __gnu_Unwind_Find_exidx (libc must implement this) when > unwinding using exidx. This function is implemented here. > --- > arch/arm/src/find_exidx.c | 44 > ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 > insertions(+) create mode 100644 arch/arm/src/find_exidx.c > > diff --git a/arch/arm/src/find_exidx.c b/arch/arm/src/find_exidx.c > new file mode 100644 > index 0000000..ffbea1f > --- /dev/null > +++ b/arch/arm/src/find_exidx.c > @@ -0,0 +1,44 @@ > +#define _GNU_SOURCE > +#include <link.h> > + > +typedef unsigned _Unwind_Ptr; As noted on #musl, this has __attribute__((pointer)) in the original definition. But trying to avoid the #include <unwind.h> on GCC's headers, and the GCCisms. Would uintptr_t be more suitable here then? > +struct find_exidx_data { > + _Unwind_Ptr pc, exidx_start; > + int exidx_len; > +}; > + > +static int find_exidx(struct dl_phdr_info *info, size_t size, void > *ptr) +{ > + struct find_exidx_data *data = ptr; > + const ElfW(Phdr) *phdr = info->dlpi_phdr; > + _Unwind_Ptr addr; > + int match = 0, i; > + > + for (i = info->dlpi_phnum; i > 0; i--, phdr++) { > + addr = info->dlpi_addr + phdr->p_vaddr; > + switch (phdr->p_type) { > + case PT_LOAD: > + match |= data->pc >= addr && data->pc < addr > + phdr->p_memsz; > + break; > + case PT_ARM_EXIDX: > + data->exidx_start = addr; > + data->exidx_len = phdr->p_memsz; > + break; > + } > + } > + return match; > +} The above function has a slight bug in it, so I'll fix that for next send. Basically it can return other dso's exidx data if the matching dso did not have PT_ARM_EXIDX at all. - Timo
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.