Index: compiler-rt/trunk/lib/sanitizer_common/sanitizer_freebsd.h =================================================================== --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_freebsd.h +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_freebsd.h @@ -22,6 +22,7 @@ #if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) # include # if __FreeBSD_version <= 902001 // v9.2 +# include # include namespace __sanitizer { @@ -74,6 +75,34 @@ int __spare__[4]; } xucontext_t; +typedef struct { + __uint32_t p_type; + __uint32_t p_offset; + __uint32_t p_vaddr; + __uint32_t p_paddr; + __uint32_t p_filesz; + __uint32_t p_memsz; + __uint32_t p_flags; + __uint32_t p_align; +} XElf32_Phdr; + +struct xdl_phdr_info { + Elf_Addr dlpi_addr; + const char *dlpi_name; + const XElf32_Phdr *dlpi_phdr; + Elf_Half dlpi_phnum; + unsigned long long int dlpi_adds; + unsigned long long int dlpi_subs; + size_t dlpi_tls_modid; + void *dlpi_tls_data; +}; + +typedef int (*__xdl_iterate_hdr_callback)(struct xdl_phdr_info*, size_t, void*); +typedef int xdl_iterate_phdr_t(__xdl_iterate_hdr_callback, void*); + +#define xdl_iterate_phdr(callback, param) \ + (((xdl_iterate_phdr_t*) dl_iterate_phdr)((callback), (param))) + } // namespace __sanitizer # endif // __FreeBSD_version <= 902001 Index: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc =================================================================== --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc @@ -17,6 +17,7 @@ #include "sanitizer_common.h" #include "sanitizer_flags.h" +#include "sanitizer_freebsd.h" #include "sanitizer_linux.h" #include "sanitizer_placement_new.h" #include "sanitizer_procmaps.h" @@ -35,6 +36,7 @@ #if SANITIZER_FREEBSD #include +#include #define pthread_getattr_np pthread_attr_get_np #endif @@ -471,6 +473,10 @@ #else // SANITIZER_ANDROID # if !SANITIZER_FREEBSD typedef ElfW(Phdr) Elf_Phdr; +# elif SANITIZER_WORDSIZE == 32 && __FreeBSD_version <= 902001 // v9.2 +# define Elf_Phdr XElf32_Phdr +# define dl_phdr_info xdl_phdr_info +# define dl_iterate_phdr(c, b) xdl_iterate_phdr((c), (b)) # endif struct DlIteratePhdrData {