Buggy mmap test

Bruce Korb bkorb@sco.COM
Tue Jan 9 09:43:00 GMT 2001


   void
   test_3 ()
   {
     char *x = anonmap (pg);
     char *y = anonmap (pg);
     if (x == (char *)MAP_FAILED || y == (char *)MAP_FAILED || x + pg != y)
       exit (7);

Since your ``anonmap'' routine specifies a NULL address
for the address assignment, the implementation is free to
assign any address, therefore ``x + pg != y'' is likely
to fail.  I modified ``anonmap'' to take an address
argument and rewrote the above as in:

   void
   test_3 ()
   {
     char *x = anonmap (pg, 0);
     char *y = anonmap (pg, x+pg);
     if (x == (char *)MAP_FAILED || y == (char *)MAP_FAILED) || x + pg != y)
       exit (7);
     if (x + pg != y)
       exit (15);

and I get:

   Have mmap from /dev/zero.
   No mmap with MAP_ANON(YMOUS).
   mmap of /dev/zero is buggy. (15)
   -rw-r--r--   1 bkorb    dev            0 Jan  9 09:37 test1a.l
   -rw-r--r--   1 bkorb    dev            0 Jan  9 09:37 test1z.l
   -rw-r--r--   1 bkorb    dev           25 Jan  9 09:37 test2z.l

Oh, well.  The addresses were:
    fprintf (stderr,"0x%X != 0x%X\n",x+pg, y);
    0x80002000 != 0x80003000


More information about the Gcc mailing list