Patchwork [testsuite] Provide and use mmap effective-target keyword

login
register
mail settings
Submitter Rainer Orth
Date July 25, 2011, 4:41 p.m.
Message ID <yddfwlufh3b.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/106718/
State New
Headers show

Comments

Rainer Orth - July 25, 2011, 4:41 p.m.
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  <ro@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.

Patch

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.