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