Make the .eh_frame_hdr code work on FreeBSD as well.
authorEd Schouten <ed@nuxi.nl>
Wed, 29 Apr 2015 20:43:44 +0000 (20:43 +0000)
committerEd Schouten <ed@nuxi.nl>
Wed, 29 Apr 2015 20:43:44 +0000 (20:43 +0000)
We currently only include <link.h> on CloudABI and Linux. We can enable
it on FreeBSD as well, as it also supports the dl_iterate_phdr()
function that's provided by <link.h>.

FreeBSD, however, does not provide the ElfW() macro. Instead, the
host-specific ELF datastructures are named just Elf_XXX in addition to
the host-independent Elf32_XXX and Elf64_XXX types.

Differential Revision: http://reviews.llvm.org/D8169
Approved by: emaste

llvm-svn: 236154

libunwind/src/AddressSpace.hpp

index 9c659a8..e8acb46 100644 (file)
@@ -57,9 +57,16 @@ extern EHTEntry __exidx_end;
 #endif // !defined(_LIBUNWIND_IS_BAREMETAL)
 #endif  // LIBCXXABI_ARM_EHABI
 
-#if defined(__CloudABI__) || defined(__linux__)
+#if defined(__CloudABI__) || defined(__FreeBSD__) || defined(__linux__)
 #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