blob: 1ea3e0a57c1dec0a8b300b50196886105af00e2d [file] [log] [blame]
/* { dg-do run { target { sysconf && mmap } } } */
/* { dg-options "-O2" } */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
#endif
int
__attribute__ ((noclone, noinline))
compare (char *d, char *s, unsigned int l)
{
return __builtin_strncmp (d, s, l);
}
int
main ()
{
size_t page_size = sysconf(_SC_PAGESIZE);
char *buf = mmap (0, 2 * page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (buf == MAP_FAILED)
{
perror ("mmap");
abort ();
}
if (mprotect (buf + page_size, page_size, PROT_NONE))
{
perror ("mprotect");
abort ();
}
char *src1 = buf + page_size - sizeof ("foo");
char *src2 = buf;
memcpy (src1, "foo", sizeof ("foo"));
memcpy (src2, "foo", sizeof ("foo"));
int result = compare (src1, src2, sizeof ("foo") + 16);
if (result != 0)
abort ();
return 0;
}