Drop the dependency on dl_unwind_find_exidx().

Authored by ed on Feb 23 2017, 12:05 AM.


Drop the dependency on dl_unwind_find_exidx().

While porting libunwind over to CloudABI for ARMv6, I observed that this
source file doesn't build, as it depends on dl_unwind_find_exidx(),
which CloudABI's C library was lacking. After I added that function,
I still needed to patch up libunwind to define _Unwind_Ptr.

Taking a step back, I wonder why we need to make use of this function
anyway. The unwinder already has some nice code to use dl_iterate_phdr()
to scan for a PT_GNU_EH_FRAME header. The dl_unwind_find_exidx() does
the same thing, except matching PT_ARM_EXIDX instead. We could also do
that ourselves.

This change gets rid of the dl_unwind_find_exidx() call and extends the
dl_iterate_phdr() loop. In addition to making the code a bit shorter, it
has the advantage of getting rid of some of those OS-specific #ifdefs.

This now means that if an operating system only provides
dl_iterate_phdr(), it gets support for unwinding on all architectures.
There is no need to add more stuff, just to get ARMv6 support.

Differential Revision: https://reviews.llvm.org/D28082

llvm-svn: 295944


edFeb 23 2017, 12:05 AM
Differential Revision
D28082: Drop the dependency on dl_unwind_find_exidx().
rG21467876096f: [ELF] - Refactoring of LMA offset handling code. NFC.