1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "tests/malloc.h" 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <string.h> 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <assert.h> 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <signal.h> 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid maybe_fault ( int delta ) 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown char* x = memalign16(32); 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown memset(x, 0, 32); 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__( 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pabsb (%0),%%xmm7" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : /*out*/ : /*in*/ "r"(x+delta) : /*trash*/"xmm7" ); 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(x); 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid handler ( int signo ) 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown assert(signo == SIGSEGV); 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "three\n"); 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown exit(0); 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown signal(SIGSEGV, handler); 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "you should see: \"one\\ntwo\\nthree\\n\"\n"); 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "one\n"); 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown maybe_fault(0); 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "two\n"); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown maybe_fault(5); 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "test failed! you shouldn't see this\n"); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 37