From: Nicholas Nethercote Date: Wed, 15 Apr 2009 05:35:00 +0000 (+0000) Subject: These three files should have been added in r9537. X-Git-Tag: svn/VALGRIND_3_5_0~817 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e230aa95518c515d9e9e0b1e9f12f584cbca66d0;p=thirdparty%2Fvalgrind.git These three files should have been added in r9537. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9544 --- diff --git a/tests/asm.h b/tests/asm.h new file mode 100644 index 0000000000..d64a893f75 --- /dev/null +++ b/tests/asm.h @@ -0,0 +1,19 @@ +// Header to factor out platform differences in asm code. + +// On Darwin, all symbols get an underscore prepended when compiled. If we +// use any such symbols in asm code, we need to add that underscore. So in +// general, any symbol named in asm code should be wrapped by VG_SYM. + +// This one is for use in inline asm in C files. +#if defined(VGO_darwin) +#define VG_SYM(x) "_"#x +#else +#define VG_SYM(x) #x +#endif + +// This one is for use in asm files. +#if defined(VGO_darwin) +#define VG_SYM_ASM(x) _#x +#else +#define VG_SYM_ASM(x) x +#endif diff --git a/tests/malloc.h b/tests/malloc.h new file mode 100644 index 0000000000..0179b387cc --- /dev/null +++ b/tests/malloc.h @@ -0,0 +1,27 @@ +// Replacement for malloc.h which factors out platform differences. + +#include +#if defined(VGO_darwin) +# include +#else +# include +#endif + +#include + +// Allocates a 16-aligned block. Asserts if the allocation fails. +__attribute__((unused)) +static void* memalign16(size_t szB) +{ + void* x; +#if defined(VGO_darwin) + // Darwin lacks memalign, but its malloc is always 16-aligned anyway. + x = malloc(szB); +#else + x = memalign(16, szB); +#endif + assert(x); + assert(0 == ((16-1) & (unsigned long)x)); + return x; +} + diff --git a/tests/sys_mman.h b/tests/sys_mman.h new file mode 100644 index 0000000000..7ac64d54c4 --- /dev/null +++ b/tests/sys_mman.h @@ -0,0 +1,31 @@ +// Replacement for sys/mman.h which factors out platform differences. + +#include + +#if defined(VGO_darwin) +# define MAP_ANONYMOUS MAP_ANON +#endif + + +#include +#include + +// Map a page, then unmap it, then return that address. That +// guarantees to give an address which will fault when accessed, +// without making any assumptions about the layout of the address +// space. + +__attribute__((unused)) +static void* get_unmapped_page(void) +{ + void* ptr; + int r; + long pagesz = sysconf(_SC_PAGE_SIZE); + assert(pagesz == 4096 || pagesz == 65536); + ptr = mmap(0, pagesz, PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + assert(ptr != (void*)-1); + r = munmap(ptr, pagesz); + assert(r == 0); + return ptr; +} +