(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
loop-2g.c
       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  }