Hi Ed, Could you please always include cfe-commits as a subscriber in you phab reviews?
We would like to be aware of these changes in advance before they land. Thanks. / Asiri On 7 Mar 2017 6:27 p.m., "Ed Schouten via cfe-commits" < cfe-commits@lists.llvm.org> wrote: > Author: ed > Date: Tue Mar 7 12:15:52 2017 > New Revision: 297174 > > URL: http://llvm.org/viewvc/llvm-project?rev=297174&view=rev > Log: > Improve readability and correctness of the OS specific libunwind bits. > > All of the access to __exidx_*, dl_iterate_phdr(), etc. is specific to > the findUnwindSections() function. Right now all of the includes and > declarations related to them are scattered throughout the source file. > For example, for <link.h>, we have a full list of operating systems > guarding the #include, even though the code that uses dl_iterate_phdr() > miraculously doesn't use the same list. > > Change the code so that findUnwindSections() is preceded by a block of > #ifdefs that share the same structure as the function itself. First > comes all of the macOS specific bits, followed by bare-metal ARM, > followed by ELF EHABI + DWARF. > > This actually allows us to build a copy of libunwind without any > specific ifdefs for NetBSD, CloudABI, etc. It likely also unbreaks the > build of libunwind on FreeBSD/armv6, though I can't confirm. > > Reviewed by: compnerd > Differential Revision: https://reviews.llvm.org/D30696 > > Modified: > libunwind/trunk/src/AddressSpace.hpp > > Modified: libunwind/trunk/src/AddressSpace.hpp > URL: http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/ > AddressSpace.hpp?rev=297174&r1=297173&r2=297174&view=diff > ============================================================ > ================== > --- libunwind/trunk/src/AddressSpace.hpp (original) > +++ libunwind/trunk/src/AddressSpace.hpp Tue Mar 7 12:15:52 2017 > @@ -34,32 +34,6 @@ namespace libunwind { > #include "dwarf2.h" > #include "Registers.hpp" > > -#if _LIBUNWIND_ARM_EHABI > -#if defined(_LIBUNWIND_IS_BAREMETAL) > -// When statically linked on bare-metal, the symbols for the EH table are > looked > -// up without going through the dynamic loader. > -extern char __exidx_start; > -extern char __exidx_end; > -#else > -#include <link.h> > -#endif // !defined(_LIBUNWIND_IS_BAREMETAL) > -#endif // _LIBUNWIND_ARM_EHABI > - > -#if defined(__CloudABI__) || defined(__FreeBSD__) || defined(__Fuchsia__) > || \ > - defined(__linux__) || defined(__NetBSD__) > -#if _LIBUNWIND_SUPPORT_DWARF_UNWIND && _LIBUNWIND_SUPPORT_DWARF_INDEX > -#include <link.h> > -// Macro for machine-independent access to the ELF program headers. This > -// macro is not available on some systems (e.g., FreeBSD). On these > -// systems the data structures are just called Elf_XXX. Define ElfW() > -// locally. > -#if !defined(ElfW) > -#define ElfW(type) Elf_##type > -#endif > -#include "EHHeaderParser.hpp" > -#endif > -#endif > - > namespace libunwind { > > /// Used by findUnwindSections() to return info about needed sections. > @@ -291,6 +265,7 @@ LocalAddressSpace::getEncodedP(pint_t &a > } > > #ifdef __APPLE__ > + > struct dyld_unwind_sections > { > const struct mach_header* mh; > @@ -336,6 +311,30 @@ LocalAddressSpace::getEncodedP(pint_t &a > return true; > } > #endif > + > +#elif _LIBUNWIND_ARM_EHABI && defined(_LIBUNWIND_IS_BAREMETAL) > + > +// When statically linked on bare-metal, the symbols for the EH table are > looked > +// up without going through the dynamic loader. > +extern char __exidx_start; > +extern char __exidx_end; > + > +#elif _LIBUNWIND_ARM_EHABI || _LIBUNWIND_SUPPORT_DWARF_UNWIND > + > +// ELF-based systems may use dl_iterate_phdr() to access sections > +// containing unwinding information. The ElfW() macro for pointer-size > +// independent ELF header traversal is not provided by <link.h> on some > +// systems (e.g., FreeBSD). On these systems the data structures are > +// just called Elf_XXX. Define ElfW() locally. > +#include <link.h> > +#if !defined(ElfW) > +#define ElfW(type) Elf_##type > +#endif > + > +#if _LIBUNWIND_SUPPORT_DWARF_UNWIND > +#include "EHHeaderParser.hpp" > +#endif > + > #endif > > inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits