When last week a testcase using mmap was posted with a copy of some old (and wrong) list of targets supporting mmap, I noticed what mess we have here. To fix this, I've introduced a new effective-target keyword mmap and use it in all testcases.
Two minor changes to the tests were required: * gcc.dg/20030711-1.c and gcc.dg/20050826-1.c failed to compile on IRIX which doesn't have MAP_ANON. * gcc.dg/vect/pr49038.c must not use dg-do run: on Solaris 8/x86, which cannot execute SSE insns, the vect.dg are usually demoted into compile tests on such targets, which is defeated by the explicit dg-do run. With those changes, I could successfully run the tests on i386-pc-solaris2.8, i386-pc-solaris2.11, alpha-dec-osf5.1b, mips-sgi-irix6.5, powerpc-apple-darwin9.8.0 and i386-apple-darwin9.8.0. Given this wide range of working system, I think it's reasonably safe to install this patch, thus: installed on mainline. Rainer 2011-07-23 Rainer Orth <r...@cebitec.uni-bielefeld.de> gcc: * doc/sourcebuild.texi (Effective-Target Keywords, Environment attributes): Document mmap. gcc/testsuite: * lib/target-supports.exp (check_effective_target_mmap): New proc. * gcc.c-torture/execute/loop-2f.c: Remove #ifdef __unix__. * gcc.c-torture/execute/loop-2g.c: Likewise. * gcc.c-torture/execute/loop-2f.x: Load target-supports.exp. Require mmap support. * gcc.c-torture/execute/loop-2g.x: Likewise. * gcc.dg/20030711-1.c: Replace dg-do target list by mmap. (MAP_ANON): Provide default. * gcc.dg/20050826-1.c: Likewise. * gcc.target/i386/pr36533.c: Likewise. * gcc.dg/vect/pr49038.c: Remove dg-do run. Use dg-require-effective-target mmap. diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1679,6 +1679,9 @@ Target might have errors of a few ULP in conversion functions and overflow is not always detected correctly by those functions. +@item mmap +Target supports @code{mmap}. + @item newlib Target supports Newlib. diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2f.c b/gcc/testsuite/gcc.c-torture/execute/loop-2f.c --- a/gcc/testsuite/gcc.c-torture/execute/loop-2f.c +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2f.c @@ -1,6 +1,5 @@ #include <limits.h> -#ifdef __unix__ /* ??? Is that good enough? */ #include <sys/types.h> #include <sys/mman.h> #include <sys/stat.h> @@ -18,7 +17,6 @@ #ifndef MAP_FIXED #define MAP_FIXED 0 #endif -#endif #define MAP_START (void *)0x7fff8000 #define MAP_LEN 0x10000 diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2f.x b/gcc/testsuite/gcc.c-torture/execute/loop-2f.x --- a/gcc/testsuite/gcc.c-torture/execute/loop-2f.x +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2f.x @@ -1,3 +1,9 @@ +load_lib target-supports.exp + +if { ! [check_effective_target_mmap] } { + return 1 +} + if [istarget "m68k-*-linux*"] { # the executable is at the same position the test tries to remap return 1 diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2g.c b/gcc/testsuite/gcc.c-torture/execute/loop-2g.c --- a/gcc/testsuite/gcc.c-torture/execute/loop-2g.c +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2g.c @@ -1,6 +1,5 @@ #include <limits.h> -#ifdef __unix__ /* ??? Is that good enough? */ #include <sys/types.h> #include <sys/mman.h> #include <sys/stat.h> @@ -18,7 +17,6 @@ #ifndef MAP_FIXED #define MAP_FIXED 0 #endif -#endif #define MAP_START (void *)0x7fff8000 #define MAP_LEN 0x10000 diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2g.x b/gcc/testsuite/gcc.c-torture/execute/loop-2g.x --- a/gcc/testsuite/gcc.c-torture/execute/loop-2g.x +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2g.x @@ -1,3 +1,9 @@ +load_lib target-supports.exp + +if { ! [check_effective_target_mmap] } { + return 1 +} + if [istarget "m68k-*-linux*"] { # the executable is at the same position the test tries to remap return 1 diff --git a/gcc/testsuite/gcc.dg/20030711-1.c b/gcc/testsuite/gcc.dg/20030711-1.c --- a/gcc/testsuite/gcc.dg/20030711-1.c +++ b/gcc/testsuite/gcc.dg/20030711-1.c @@ -1,6 +1,6 @@ /* Test whether strncmp has not been "optimized" into memcmp nor any code with memcmp semantics. */ -/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* alpha*-*-linux* powerpc*-*-linux* s390*-*-linux* sparc*-*-linux* *-*-darwin* } } */ +/* { dg-do run { target mmap } } */ /* { dg-options "-O2" } */ #include <stddef.h> #include <stdio.h> @@ -8,6 +8,9 @@ #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif #include <stdlib.h> void __attribute__((noinline)) test (const char *p) diff --git a/gcc/testsuite/gcc.dg/20050826-1.c b/gcc/testsuite/gcc.dg/20050826-1.c --- a/gcc/testsuite/gcc.dg/20050826-1.c +++ b/gcc/testsuite/gcc.dg/20050826-1.c @@ -1,6 +1,6 @@ /* Test whether strncmp has not been "optimized" into memcmp nor any code with memcmp semantics. */ -/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* alpha*-*-linux* powerpc*-*-linux* s390*-*-linux* sparc*-*-linux* *-*-darwin* } } */ +/* { dg-do run { target mmap } } */ /* { dg-options "-O2" } */ #include <stddef.h> #include <stdio.h> @@ -9,6 +9,9 @@ #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif #include <stdlib.h> struct Flags { diff --git a/gcc/testsuite/gcc.dg/vect/pr49038.c b/gcc/testsuite/gcc.dg/vect/pr49038.c --- a/gcc/testsuite/gcc.dg/vect/pr49038.c +++ b/gcc/testsuite/gcc.dg/vect/pr49038.c @@ -1,4 +1,4 @@ -/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* alpha*-*-linux* powerpc*-*-linux* s390*-*-linux* sparc*-*-linux* *-*-darwin* } } */ +/* { dg-require-effective-target mmap } */ #include <sys/mman.h> #include <stdio.h> diff --git a/gcc/testsuite/gcc.target/i386/pr36533.c b/gcc/testsuite/gcc.target/i386/pr36533.c --- a/gcc/testsuite/gcc.target/i386/pr36533.c +++ b/gcc/testsuite/gcc.target/i386/pr36533.c @@ -1,5 +1,5 @@ /* PR target/36533 */ -/* { dg-do run { target { { i?86-*-linux* x86_64-*-linux* } && ilp32 } } } */ +/* { dg-do run { target { mmap && ilp32 } } } */ /* { dg-options "-Os" } */ #include <string.h> #include <sys/mman.h> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -697,6 +697,14 @@ proc check_effective_target_fopenmp {} { } "-fopenmp"] } +# Return 1 if the target supports mmap, 0 otherwise. + +proc check_effective_target_mmap {} { + return [check_no_compiler_messages mmap assembly { + #include <sys/mman.h> + }] +} + # Return 1 if compilation with -pthread is error-free for trivial # code, 0 otherwise. -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University