Index: test/asan/TestCases/Posix/large_allocator_unpoisons_on_free.cc =================================================================== --- test/asan/TestCases/Posix/large_allocator_unpoisons_on_free.cc +++ test/asan/TestCases/Posix/large_allocator_unpoisons_on_free.cc @@ -27,7 +27,14 @@ void *p = my_memalign(kPageSize, 1024 * 1024); free(p); - char *q = (char *)mmap(p, kPageSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_FIXED, 0, 0); + // FreeBSD requires fd to be (-1) when MAP_ANON is specified. +#if defined(__FreeBSD__) + const int fd = (-1); +#else + const int fd = 0; +#endif + char *q = (char *)mmap(p, kPageSize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON | MAP_FIXED, fd, 0); assert(q == p); memset(q, 42, kPageSize); Index: test/asan/TestCases/dlclose-test.cc =================================================================== --- test/asan/TestCases/dlclose-test.cc +++ test/asan/TestCases/dlclose-test.cc @@ -62,11 +62,17 @@ printf("failed to dlclose\n"); return 1; } + // FreeBSD requires fd to be (-1) when MAP_ANON is specified. +#if defined(__FreeBSD__) + const int fd = (-1); +#else + const int fd = 0; +#endif // Now, the page where 'addr' is unmapped. Map it. size_t page_beg = ((size_t)addr) & ~(PageSize - 1); void *res = mmap((void*)(page_beg), PageSize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE, 0, 0); + MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE, fd, 0); if (res == (char*)-1L) { printf("failed to mmap\n"); return 1;