modernc.org/cc@v1.0.1/testdata/gcc-6.3.0/gcc/testsuite/gcc.c-torture/execute/loop-2g.c (about)

     1  /* { dg-require-effective-target mmap } */
     2  /* { dg-skip-if "the executable is at the same position the test tries to remap" { m68k-*-linux* } { "*" } { "" } } */
     3  
     4  #include <limits.h>
     5  
     6  #include <sys/types.h>
     7  #include <sys/mman.h>
     8  #include <sys/stat.h>
     9  #include <fcntl.h>
    10  #ifndef MAP_ANON
    11  #ifdef MAP_ANONYMOUS
    12  #define MAP_ANON MAP_ANONYMOUS
    13  #else
    14  #define MAP_ANON MAP_FILE
    15  #endif
    16  #endif
    17  #ifndef MAP_FILE
    18  #define MAP_FILE 0
    19  #endif
    20  #ifndef MAP_FIXED
    21  #define MAP_FIXED 0
    22  #endif
    23  
    24  #define MAP_START (void *)0x7fff8000
    25  #define MAP_LEN 0x10000
    26  
    27  #define OFFSET (MAP_LEN/2 - 2 * sizeof (char));
    28  
    29  f (int s, char *p)
    30  {
    31    int i;
    32    for (i = s; &p[i] < &p[40] && i >= 0; i++)
    33      {
    34        p[i] = -2;
    35      }
    36  }
    37  
    38  main ()
    39  {
    40  #ifdef MAP_ANON
    41    char *p;
    42    int dev_zero;
    43  
    44    dev_zero = open ("/dev/zero", O_RDONLY);
    45    /* -1 is OK when we have MAP_ANON; else mmap will flag an error.  */
    46    if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int))
    47      exit (0);
    48    p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE,
    49  	    MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0);
    50    if (p != (char *)-1)
    51      {
    52        p += OFFSET;
    53        p[39] = 0;
    54        f (0, p);
    55        if (p[39] != (char)-2)
    56  	abort ();
    57        p[39] = 0;
    58        f (-1, p);
    59        if (p[39] != 0)
    60  	abort ();
    61      }
    62  #endif
    63    exit (0);
    64  }