Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.target/i386/strncmp-1.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.target/i386/strncmp-1.c Mon May 25 07:50:57 2020 +0900 @@ -0,0 +1,47 @@ +/* { dg-do run { target 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; +}