Files
clang-p2996/compiler-rt/test/msan/pvalloc.cc
Kamil Rytarowski 3d7fbb052f Adding Msan support to FreeBSD
Summary:
Enabling the memory sanitizer support for FreeBSD, most of unit tests are compatible.
- Adding fstat and stressor_r interceptors.
- Updating the struct link_map access since most likely the struct Obj_Entry had been updated since.
- Disabling few unit tests until further work is needed (or we can assume it can work in real world code).

Patch by: David CARLIER

Reviewers: vitalybuka, krytarowski

Reviewed By: vitalybuka

Subscribers: eugenis, dim, srhines, emaste, kubamracek, mgorny, fedor.sergeev, hintonda, llvm-commits, #sanitizers

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

llvm-svn: 326644
2018-03-03 11:43:11 +00:00

45 lines
1.2 KiB
C++

// RUN: %clangxx_msan -O0 %s -o %t
// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t m1 2>&1 | FileCheck %s
// RUN: MSAN_OPTIONS=allocator_may_return_null=1 %run %t m1 2>&1
// RUN: MSAN_OPTIONS=allocator_may_return_null=0 not %run %t psm1 2>&1 | FileCheck %s
// RUN: MSAN_OPTIONS=allocator_may_return_null=1 %run %t psm1 2>&1
// pvalloc is Linux only
// UNSUPPORTED: win32, freebsd, netbsd
// Checks that pvalloc overflows are caught. If the allocator is allowed to
// return null, the errno should be set to ENOMEM.
#include <assert.h>
#include <errno.h>
#include <malloc.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
void *p;
size_t page_size;
assert(argc == 2);
page_size = sysconf(_SC_PAGESIZE);
// Check that the page size is a power of two.
assert((page_size & (page_size - 1)) == 0);
if (!strcmp(argv[1], "m1")) {
p = pvalloc((uintptr_t)-1);
assert(!p);
assert(errno == ENOMEM);
}
if (!strcmp(argv[1], "psm1")) {
p = pvalloc((uintptr_t)-(page_size - 1));
assert(!p);
assert(errno == ENOMEM);
}
return 0;
}
// CHECK: MemorySanitizer's allocator is terminating the process