sim: testsuite: initial support for OS-specific tests
authorMike Frysinger <vapier@gentoo.org>
Thu, 11 Nov 2021 05:29:41 +0000 (00:29 -0500)
committerMike Frysinger <vapier@gentoo.org>
Sat, 27 Nov 2021 01:06:55 +0000 (20:06 -0500)
We usually test against the newlib/libgloss environment, but for a
few ports that also support Linux apps, we want to test that logic
too.  A lot of the C code is written such that it works with either
newlib/libgloss or glibc/linux toolchains, but we have some tests
that end up being Linux-specific.  Cris has been using the target
tuple as a rough proxy for this (where cris*-*-elf is assumed to be
newlib/libgloss, and everything else is glibc/linux), but that is a
bit too rough, and it doesn't work in a multitarget build.

So lets create a few stub files that we can do compile tests with
to detect the different setups, and then let tests declare which
one they require (if they require any at all).

107 files changed:
sim/testsuite/cris/c/access1.c
sim/testsuite/cris/c/badldso1.c
sim/testsuite/cris/c/badldso2.c
sim/testsuite/cris/c/badldso3.c
sim/testsuite/cris/c/c.exp
sim/testsuite/cris/c/clone1.c
sim/testsuite/cris/c/clone2.c
sim/testsuite/cris/c/clone3.c
sim/testsuite/cris/c/clone4.c
sim/testsuite/cris/c/clone5.c
sim/testsuite/cris/c/clone6.c
sim/testsuite/cris/c/ex1.c
sim/testsuite/cris/c/exitg1.c
sim/testsuite/cris/c/exitg2.c
sim/testsuite/cris/c/fcntl1.c
sim/testsuite/cris/c/fcntl2.c
sim/testsuite/cris/c/ftruncate1.c
sim/testsuite/cris/c/ftruncate2.c
sim/testsuite/cris/c/getcwd1.c
sim/testsuite/cris/c/hellodyn3.c
sim/testsuite/cris/c/mmap1.c
sim/testsuite/cris/c/mmap2.c
sim/testsuite/cris/c/mmap3.c
sim/testsuite/cris/c/mmap4.c
sim/testsuite/cris/c/mmap5.c
sim/testsuite/cris/c/mmap6.c
sim/testsuite/cris/c/mmap7.c
sim/testsuite/cris/c/mmap8.c
sim/testsuite/cris/c/mprotect1.c
sim/testsuite/cris/c/mprotect2.c
sim/testsuite/cris/c/openpf5.c
sim/testsuite/cris/c/pipe1.c
sim/testsuite/cris/c/pipe2.c
sim/testsuite/cris/c/pipe3.c
sim/testsuite/cris/c/pipe4.c
sim/testsuite/cris/c/pipe5.c
sim/testsuite/cris/c/pipe6.c
sim/testsuite/cris/c/pipe7.c
sim/testsuite/cris/c/readlink1.c
sim/testsuite/cris/c/readlink10.c
sim/testsuite/cris/c/readlink11.c
sim/testsuite/cris/c/readlink2.c
sim/testsuite/cris/c/readlink3.c
sim/testsuite/cris/c/readlink4.c
sim/testsuite/cris/c/readlink5.c
sim/testsuite/cris/c/readlink6.c
sim/testsuite/cris/c/readlink7.c
sim/testsuite/cris/c/readlink8.c
sim/testsuite/cris/c/readlink9.c
sim/testsuite/cris/c/rtsigprocmask1.c
sim/testsuite/cris/c/rtsigprocmask2.c
sim/testsuite/cris/c/rtsigsuspend1.c
sim/testsuite/cris/c/rtsigsuspend2.c
sim/testsuite/cris/c/sched1.c
sim/testsuite/cris/c/sched2.c
sim/testsuite/cris/c/sched3.c
sim/testsuite/cris/c/sched4.c
sim/testsuite/cris/c/sched5.c
sim/testsuite/cris/c/sched6.c
sim/testsuite/cris/c/sched7.c
sim/testsuite/cris/c/sched8.c
sim/testsuite/cris/c/sched9.c
sim/testsuite/cris/c/setrlimit1.c
sim/testsuite/cris/c/settls1.c
sim/testsuite/cris/c/sig10.c
sim/testsuite/cris/c/sig11.c
sim/testsuite/cris/c/sig12.c
sim/testsuite/cris/c/sig13.c
sim/testsuite/cris/c/sig2.c
sim/testsuite/cris/c/sig4.c
sim/testsuite/cris/c/sig6.c
sim/testsuite/cris/c/sig7.c
sim/testsuite/cris/c/sig9.c
sim/testsuite/cris/c/sigreturn1.c
sim/testsuite/cris/c/sigreturn2.c
sim/testsuite/cris/c/sigreturn3.c
sim/testsuite/cris/c/sigreturn4.c
sim/testsuite/cris/c/sock1.c
sim/testsuite/cris/c/stat2.c
sim/testsuite/cris/c/stat4.c
sim/testsuite/cris/c/stat5.c
sim/testsuite/cris/c/stat7.c
sim/testsuite/cris/c/stat8.c
sim/testsuite/cris/c/syscall1.c
sim/testsuite/cris/c/syscall2.c
sim/testsuite/cris/c/syscall3.c
sim/testsuite/cris/c/syscall4.c
sim/testsuite/cris/c/syscall5.c
sim/testsuite/cris/c/syscall6.c
sim/testsuite/cris/c/syscall7.c
sim/testsuite/cris/c/syscall8.c
sim/testsuite/cris/c/sysctl1.c
sim/testsuite/cris/c/sysctl2.c
sim/testsuite/cris/c/sysctl3.c
sim/testsuite/cris/c/thread2.c
sim/testsuite/cris/c/thread3.c
sim/testsuite/cris/c/thread4.c
sim/testsuite/cris/c/thread5.c
sim/testsuite/cris/c/truncate1.c
sim/testsuite/cris/c/truncate2.c
sim/testsuite/cris/c/ugetrlimit1.c
sim/testsuite/cris/c/uname1.c
sim/testsuite/cris/c/writev1.c
sim/testsuite/cris/c/writev2.c
sim/testsuite/lib/linuxcheck.c [new file with mode: 0644]
sim/testsuite/lib/newlibcheck.c [new file with mode: 0644]
sim/testsuite/lib/sim-defs.exp

index ba9be34a1b8e745dfdb4392c519a1e6d318d7fe4..10a47ea169590c5c740cb15200d9630e4995d78a 100644 (file)
@@ -1,5 +1,5 @@
 /* Check access(2) trivially.  Newlib doesn't have it.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #include <unistd.h>
 #include <stdio.h>
index 70414b536d23242ba9f45415c54327422ad5b148..fbd320cd5dbe3ff5a73b7715aa4223fe72debfd5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: *: could not load ELF interpreter `*' for program `*'\n
  */
index 92efc138c565d9b561030ded21637adb406b76ae..2f58bff8c81f2e6f03a9b0ff361261c58d364d38 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #cc: additional_flags=-Wl,-dynamic-linker,/dev/null
 #output: *: could not load ELF interpreter `*' for program `*'\n
index f827e771a9c4d35999a0675db2cb3dd78f71debf..7039ad42a1d5502fad6a1a16e82e569d38775424 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #cc: additional_flags=-Wl,-dynamic-linker,/compilercheck.x
 #sim: --sysroot=$pwd
index dfafa003bf5b4825995b1add2c5956425982f9c9..e43259434bc3419412a0d9090d5aa40960943164 100644 (file)
@@ -34,6 +34,7 @@ if [istarget cris*-*-elf] {
 
 # Using target_compile, since it is less noisy,
 global global_cc_works
+global global_cc_os
 if { $global_cc_works == 1 } {
     # Now check if we can link a program dynamically, and where
     # libc.so is located.  If it is, we provide a sym link to the
@@ -103,6 +104,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
     set opts(sim) ""
     set opts(output) ""
     set opts(progoptions) ""
+    set opts(progos) ""
     set opts(timeout) ""
     set opts(mach) ""
     set opts(xerror) "no"
@@ -164,6 +166,11 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
        continue
     }
 
+    if { $opts(progos) != "" && $opts(progos) != $global_cc_os } {
+       untested $testname
+       continue
+    }
+
     # If no machine specific options, default to the general version.
     if ![info exists opts(sim,$mach)] {
        set opts(sim,$mach) $opts(sim)
index 163b18647a84478df7cc1ae2e071664599c54fd8..9c4cca42545e09587dcd5ffb0929a0af5eaf959b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 #output: got: a\nthen: bc\nexit: 0\n
 */
 
index aaa0873b640fb23343ac9a615a1bdd5e4f9522ad..88a984fe8a6718aa41a407da343d16ab50721498 100644 (file)
@@ -1,5 +1,5 @@
 /* Make sure the thread system trivially works with trace output.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-trace=basic --trace-file=$pwd/clone2.tmp
 #output: got: a\nthen: bc\nexit: 0\n
 */
index 0a97484adacdccad95b5a2056d993ab24deeb143..6c5b8813f08cb17b150a423af3c1fa4eafc075f7 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that exiting from a parent thread does not kill the child.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stddef.h>
index 81489ddc41953ae7e6b5fc878f0499fb96f15893..c2e684ca871cbb4ee725fa1417f0c021e83f5a7b 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens when we reach the #threads implementation limit.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stddef.h>
index 9380a1ea5aab6c54e609b98b7eaea6a6caa887fa..5cd1644666650ea41038bd7d5850139dfbfd8320 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that unimplemented clone syscalls get the right treatment.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented clone syscall *
 #output: program stopped with signal 4 (*).\n
index 586b5c67378de9244bb1d51d39231bb700fd5a63..9ecd489434740ef60cfbed8d73b92a84cb3f8973 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 2447319f71ae2b61aecf567ce46ab4bfab10e01b..ea239c2ad4b80cad7a231eb047f3b8d3e83fda12 100644 (file)
@@ -1,5 +1,5 @@
 /* Compiler options:
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #output: Starting process a\naaaaaaaaStarting process b\nababbbbbbbbb
 
index 0b4c425b3e60634e172f18dbc9cd4175857da9e6..acaad922e4b16e9e8950181f894bd130a3cd1d15 100644 (file)
@@ -1,7 +1,7 @@
 /* Check exit_group(2) trivially.  Newlib doesn't have it and the
    pre-v32 glibc requires updated headers we'd have to check or adjust
    for.
-#notarget: cris-*-* *-*-elf
+#progos: linux
 #output: exit_group\n
 */
 #include <unistd.h>
index e222cc4707b1ece36dc1466e38cc7de4e2fc6bba..e5b0be73854c456ce4539adb6dd33d40ba8097bf 100644 (file)
@@ -1,5 +1,5 @@
 /* Check exit_group(2) trivially with non-zero status.
-#notarget: cris-*-* *-*-elf
+#progos: linux
 #output: exit_group\n
 #xerror:
 */
index 032f6b501981010ed57e0ea490ceb75f882056cd..7c050182097582025914211c3c53293f5347eeaa 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that we get the expected message for unsupported fcntl calls.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented fcntl*
 #output: program stopped with signal 4 (*).\n
index fc9f95b688d49aa8628a77935af49d15e81c6752..5298e7a277c3f59c608699f141b6ab00c7cbc7e7 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 46b8756705cc438506a2677b326c4e8654e1ab83..cc213b83a245b4f1717026207da7026469fb31e8 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that the ftruncate syscall works trivially.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stdio.h>
index f1ef18c6aa6847a82d674223477d0113e29bdbb8..712c185c754f37535f65c3ea7ae0a3f53062c70c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 /* Check that we get a proper error indication if trying ftruncate on a
index 3838916143af393ab46bd05536397b5bfa2650a6..f7b6bd923da5e9f1afdcffe284f0b0fc1b1dc68a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 4dd8bdd9e84385e44436ec42e0f941fa8a36df89..ff3ca70f8d546a3a107bf2050e12e21815f62b45 100644 (file)
@@ -2,7 +2,7 @@
    works.  Jump through a few hoops to avoid reading the host
    ld.so.cache (having no absolute path specified for the executable
    falls back on loading through the same mechanisms as a DSO).
-#notarget: *-*-elf
+#progos: linux
 #sim: --sysroot=$pwd $pwd/lib/ld.so.1 --library-path /
  */
 #include "hello.c"
index 9db94c1775154311cdc4b5c337341a8d6c33730b..0bb0ea55d1e8de19d549e89515b5c7124a909f7c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #define _GNU_SOURCE
index 35139a0ed9aada699acccdd77c1b9d39e630e3cd..7c99e4e10d08e3b29b6ac982f2051f63b95278c7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #define _GNU_SOURCE
index 34401fa0c907dad25d03efa268dc58bdf136be43..3667644d085f501a32d4aae9ba290db492b7678a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #define _GNU_SOURCE
index b3a66e48b6d751694393a3b33fc789fb86c95181..551cdb1ea620149c82ba8ea6b37b150c59ed6d04 100644 (file)
@@ -1,5 +1,5 @@
 /* Just check that MAP_DENYWRITE is "honored" (ignored).
-#notarget: cris*-*-elf
+#progos: linux
 */
 #define MMAP_FLAGS (MAP_PRIVATE|MAP_DENYWRITE)
 #include "mmap1.c"
index 95f00c37fe3c9fab207607b17b2b621a7a26ff45..a10fdc2250271413f01adeeba7973a0420fe99d7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #define _GNU_SOURCE
index 929d9ccf85799eb95d5fdd170cdcc34b66f29fd0..29f70f582474a42f463e1cd9c0c8f3c875c48aa7 100644 (file)
@@ -1,6 +1,6 @@
 /* Check that mmapping specifying a previously mmapped address without
    MAP_FIXED works; that we just don't get the same address.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #define NO_MUNMAP
 #define MMAP_FLAGS2 MAP_PRIVATE
index c4b14b0f9db68641df8133c45c47a446000d9f3e..d7a7f3be2670ff72db243243fde7f673bbc70d95 100644 (file)
@@ -1,7 +1,7 @@
 /* Check that mmapping a page-aligned size, larger than the file,
    works.
 
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 /* Make sure we get an address where the size fits.  */
index 0564c79a6db20fa1cdd98b06fc6e7c1b5aa122fd..b81d9c039e572ed60196daa5b98fefd21b1d4222 100644 (file)
@@ -1,6 +1,6 @@
 /* Check that mmapping 0 using MAP_FIXED works, both with/without
    there being previously mmapped contents.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #define MMAP_FLAGS1 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED
 #define NO_MUNMAP
index 8dae50ba6eb4a9a646b5615781ae9461d1054a90..1afbd96635c7169a62ae6d62f226fdff5fd753c9 100644 (file)
@@ -1,5 +1,5 @@
 /* Check unimplemented-output for mprotect call.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented mprotect call (0x0, 0x2001, 0x4)\n
 #output: program stopped with signal 4 (*).\n
index 4d839452435fbeb04d4bbf7ea7f7b98b8ba28b28..ba8a3dab35c5a175be7b5061e9d2120fd52d5c09 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 90bebe509be5245c2aa5c4b67352c4065b4dad17..9fa80a9b0348277da461f9d1cee23f181773befc 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens when error on too many opened files.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --sysroot=$pwd
 */
 #include <stddef.h>
index 735974b6cfa0ebb29201df6461f15bd4089d2226..21b17764c26ba97d9213af1b55d107d86f8ffe05 100644 (file)
@@ -1,5 +1,5 @@
 /* Check for proper pipe semantics at corner cases.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stddef.h>
index 18ccf38b9b1d6f0d990b584d4a370074f0bdcbc6..7f3de61211a16d3a3eae8dc55f719e3ebf390f54 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that closing a pipe with a nonempty buffer works.
-#notarget: cris*-*-elf
+#progos: linux
 #output: got: a\ngot: b\nexit: 0\n
 */
 
index bf08a38e1f0c3770c291d0c92bb0a580f97ee9e5..467b5ca122100d3676e8479080247591169cb678 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens when error on pipe call.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stddef.h>
index 1cb309f9dc816e75f278da918a94a531d0d36a4f..842e2fe7994ee41f95f20534d61a38086222351f 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens for pipe corner cases.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #include <stddef.h>
 #include <signal.h>
index 2b4d763353dfaf90e1128bf517937ed6eba27b10..440cdbcd92e42584a7caebec382e6a6ee41b3b88 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens for pipe corner cases (for our definition of TRT).
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Terminating simulation due to writing pipe * from one single thread\n
 #output: program stopped with signal 4 (*).\n
index a8830cc3e69815803329aa755439dbc3e425d507..cbfb3132912806e5f4413845ed326b17b15deeeb 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that writing an inordinate amount of data works (somewhat).
-#notarget: cris*-*-elf
+#progos: linux
 #output: got: a\nexit: 0\n
    This test-case will *not* work on host (or for real): the first
    pipemax+1 bytes will be successfully written.  It's just for
index 552ddb8e1e896be1715828810f5ac49d1f89de98..5125138ea773f482f004bd6f8d866b7682a2f848 100644 (file)
@@ -1,5 +1,5 @@
 /* Check for proper pipe semantics at corner cases.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stdio.h>
index 1898e8eceb54e65bb1c457450e3a1e7ca779ea59..5bec2d5c328fa9b8873b600b8f789b0e35a3319c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 21744083eddb4544dbe895bf60d049a7ae41909e..f4705df214ff9c3ea9836b9706d9f7068e215964 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that odd cases of readlink work.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 9d84e7d95fac0a70ed2b2d62a79ea5b25bd32e39..d082d229ef844f1284aaa5d4dfb24eab36dc5b32 100644 (file)
@@ -1,5 +1,5 @@
 /* As readlink5.c (sic), but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet --argv0 ./readlink11.c.x
 #output: ENOSYS\n
 #output: xyzzy\n
index e5e9d94121c62afe66ab41844ca5ca1686f3c39c..235817f4ebbc0c569727acb19024054b9f4a2f30 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index d728087f1d52c795dfe6baf3836505724ee12520..2a4e07536847ee006fb344dfbafbea05849a7870 100644 (file)
@@ -1,5 +1,5 @@
 /* Simulator options:
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --sysroot=$pwd
 */
 #define SYSROOTED 1
index 028f3ee44ca63dbec6f78c69586a785a1307a1c5..66cfca5af6b7cc1207192defd6ebd5323aa9e4a4 100644 (file)
@@ -1,5 +1,5 @@
 /* Check for corner case: readlink of too-long name.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 4bfb7ba3a1d38a71cc20cf36a9c7e4ed1649385d..b0b56abac13ffaa2cec82fbdc4b0e9e915f8a10b 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that unsupported readlink calls don't cause the simulator to abort.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --argv0 ./readlink5.c.x
 #xerror:
 #output: Unimplemented readlink syscall (*)\n
index d64b95913a3f1d741a90e5ea6ba66d539bf7f83d..67868af7eedd6c9c053df2b243bc058add2d6c62 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that rare readlink calls don't cause the simulator to abort.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --argv0 $pwd/readlink6.c.x
 */
 #include "readlink2.c"
index 52c0733ca8a44de5dcbee506ba257273bb7ae1bf..d15f59d573664befce112397614f1b0200474daa 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that rare readlink calls don't cause the simulator to abort.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --env-unset PWD
  */
 #include "readlink2.c"
index ddc424e4c510bd1505214f56f3d7fd1af554f72f..9465592c5001c8c5084513949997418b6dc90ebb 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that rare readlink calls don't cause the simulator to abort.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --sysroot=$pwd --env-unset PWD
  */
 #define SYSROOTED 1
index 7316b7a9854e4da5b79b5ceb55e992b050dc57a6..ce5d446044dae20e5e800b34f2a6cd2704bd2b89 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that odd cases of readlink work.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-DX="$pwd"
 */
 
index b76c33853a88384ad64becee4db33fcce105a262..a47b377e3000c2089535a2b3f8a7ea60f8803da6 100644 (file)
@@ -1,5 +1,5 @@
 /* Compiler options:
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Unimplemented rt_sigprocmask syscall (0x3, 0x0, 0x3dff*\n
index 5026908fe166d2ad8956ec834a398b62397c2d86..4ae2be6ffad6820325fdbb934069f10f2df1732d 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
index 66ca7954503ef68e161e35d6c71aa272248311a7..04139a8be651b08f0d2c04dd70da38d8057eda99 100644 (file)
@@ -1,5 +1,5 @@
 /* Test that TRT happens for invalid rt_sigsuspend calls.  Single-thread.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented rt_sigsuspend syscall arguments (0x1, 0x2)\n
 #output: program stopped with signal 4 (*).\n
index 9ce165db5529379062c9273e645ba7c0ce5eeea6..4f32cca0f932be79fc0defad8ac749270459e4e3 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 1b778f4a40152927fb308ddbbc324bcf873189d1..0a461b27c6526d0e0a7cbf055f40335793f99822 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index f40a19a8085c1f5cd005dcb35cbb25a914bda14f..fbde1e1b7538f0e7342dfc0fb70fb252f8fbf1c1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index 2909a4b6c52f5a664717514e9f43e1429458833b..94051e9b24d9ffa4b3932a732bcd1035c5128378 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index df372f217e8308e333bc67c9ffc9f33c86a41793..7821cf0c1a086d17784cee54dd9d763cf0e7efce 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index ddfe14d03c36332c0e3d957be69353dbf07f856c..87468d076f5c2ced8ce0d52ebd03198fb31b6515 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index d5adedc1a35ff67f63a72d90832c576d85ac7b98..26deb2122c0b7cfc9d091fbfcf636e39eebbbfc9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index 35d006bca6a87462ff9b695852a59361ec94324e..c047461871be67e5139e84c81440aff3f371d9bb 100644 (file)
@@ -1,5 +1,5 @@
 /* Check corner error case: specifying invalid PID.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index cd3e06e6488e40714e0703b493e5135132d9374b..b0d3c8259b67a4b459ba3343356c45662520a4ce 100644 (file)
@@ -1,5 +1,5 @@
 /* Check corner error case: specifying invalid PID.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #include <string.h>
 #include <sched.h>
index 8499e43fb8c67fc011333d1b7522c4d5cb0d4647..c9647b610e2a77c83d7cb869e4533c03a2a023d9 100644 (file)
@@ -1,5 +1,5 @@
 /* Check corner error case: specifying invalid scheduling policy.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sched.h>
index 747f16caa7f92a153aa80f1da77de978d485ea76..1222619c2f0346329c53130218cae491ec2aaa05 100644 (file)
@@ -1,5 +1,5 @@
 /* Check corner error case: specifying unimplemented resource.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #include <sys/time.h>
 #include <sys/resource.h>
index bd55aa16f504246142a89d9325d1480f38a727fc..c6f84c5553f0bb3504955a6c7b89274da43870e1 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that the syscall set_thread_area is supported and does the right thing.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index ef548327ebf226701498a13aed2b1fca8c980ca9..7ae46090beb0e5413464e1625cbadb000790ba91 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens when trying to IGN an non-ignorable signal, more than one thread.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 9\n
index 9c8aad7d88e1f69d01c50596d520f137af3fbd3b..69dc278d4266942c596fe57ec80c7bc0bb348654 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens when getting a non-standard (realtime) signal, more than one thread.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Unimplemented signal: 77\n
index 5a2e65fe9c311bf28d4b34838dde0a72c9b10672..7131cbc14cc800b9a5878fa5f5c1f7fe25aad223 100644 (file)
@@ -1,6 +1,6 @@
 /* Check that TRT happens for a signal sent to a non-existent process/thread, more than one thread.
 #cc: additional_flags=-pthread
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stdlib.h>
index 4d71752a257cf1822fee042c59b2ab2a15c4ffea..2558f6749e78fe7c17328e8210a588b48b43bb28 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 65596ef2eea5eb367d0f429f5c6c241c273e73c9..35b2802576be4629fb2ae8d0e1d70ee92127ff95 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stdio.h>
index 57491f80a3c602ce39300c857092faf899eb8421..e932b080a3529b0effbee73e19e336367b61d07d 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens at an abort (3) call, more than one thread.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 6\n
index a1f572026a7e54a13d790fa5899720ba1da2cafe..f8c8f80408c2f77442f549e320f9f5bcc0b38233 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens at an non-abort non-caught signal, more than one thread.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Exiting pid 42 due to signal 7\n
index b04f7c8ba4e824a4a7560269374ac8037a73d881..b939fb8a148a23965d9f0b48d3f134145f484865 100644 (file)
@@ -1,5 +1,5 @@
 /* Check unsupported case of sigaction syscall.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented rt_sigaction syscall (0x8, 0x3df*\n
 #output: program stopped with signal 4 (*).\n
index c86681b4322d73aeb7e8cd11985d118a711e0617..8e972faf4fdc8f65da5bae9973a6bf2dd5bd9a87 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens at an non-abort ignored signal, more than one thread.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 */
 
index 40fc852f36c58844e1806183babe0626f82bd36c..af239652248c1361c74adf7b84c79de3ec6aeaf4 100644 (file)
@@ -1,5 +1,5 @@
 /* Test that TRT happens for spurious sigreturn calls.  Single-thread.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Invalid sigreturn syscall: no signal handler active (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
 #output: program stopped with signal 4 (*).\n
index 3848b5fc798faf34a5e31215a7c7d735eceb18e3..a86ca25d3d6350fd22d3df06f382be1d53a191aa 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that TRT happens for spurious sigreturn calls.  Multiple threads.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #xerror:
 #output: Invalid sigreturn syscall: no signal handler active (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
index f5ed90f2432cfa7f71007a25f410f410e84a59e9..c2b149e87338d038d27e54aaf725bb4e333feb6e 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 456e312c5684180061601839975bb38821335b37..041970a8816d2e00b59cd4c7cf556994cd271b0d 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
index e59f67305238a736b864b0e8554efbc115735255..8d06bfaed304ca76cefc4e2ebf2bbb20029bd9a4 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sys/types.h>
index 78c5c44f91086e93d1445a1aade1231365050401..3ade5d213552e4f1e7eb36e78cc216debd0657ea 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sys/types.h>
index e524ac87a8b8313054a64b2829a6cb3b6cbaca4a..3606bcc392dd5b239976d150d1f0d58e88aa012e 100644 (file)
@@ -1,5 +1,5 @@
 /* Simulator options:
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --sysroot=$pwd
 */
 
index 41ab493fd5cace7af05ff4af148b1178ee07df68..fe9fbc05500fde8064b73baf883a520812c3efb4 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that lstat:ing an nonexistent file works as expected.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sys/types.h>
index cbd5282b70ac922c41e311213122f376ebd2a893..d61bd8e0c7db8af340496b2f5d048c7af54ece17 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sys/types.h>
index c7eb49f54038f66ed70ee936ec38b898cbd46efe..1778b3ed40bac14c349c3e52be8cca762bc38ea7 100644 (file)
@@ -1,6 +1,6 @@
 /* For this test, we need to do the lstat syscall directly, or else
    glibc gets a SEGV.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 84aacb6e09273252b3b75215402d4d118f34ba62..be6eb275a19367f224d78a991868d1c2f66d581b 100644 (file)
@@ -1,5 +1,5 @@
 /* Test unknown-syscall output.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented syscall: 166 (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
 #output: program stopped with signal 4 (*).\n
index b4dbead0b1371f62f94cef4fe68f9f1260c9f7b2..d2b5a62373afd0691a07695793c0ae964842650c 100644 (file)
@@ -1,5 +1,5 @@
 /* Test unknown-syscall output.
-#notarget: cris*-*-elf
+#progos: linux
 #xerror:
 #output: Unimplemented syscall: 0 (0x3, 0x2, 0x1, 0x4, 0x6, 0x5)\n
 #output: program stopped with signal 4 (*).\n
index f4d02eb6cd3b82bc847bb8a634a2b9dd9ed1c4f9..6d5ea28555613982ffcda8911a2287924a9bb91c 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, just actually specifying the default.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=stop
 #xerror:
 #output: Unimplemented syscall: 166 (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
index ba01cfdeb30ce70156867b65db22277c4697210a..431452218ebdb209d8d05f7219b5026f60f74fe5 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, just actually specifying the default.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=stop
 #xerror:
 #output: Unimplemented syscall: 0 (0x3, 0x2, 0x1, 0x4, 0x6, 0x5)\n
index 2eac9008972734175dbecceef40fd08e686f78ff..75a014a350bde9a4786b289d7165725934ff0e31 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying ENOSYS with message.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys
 #output: Unimplemented syscall: 166 (0x1, 0x2, 0x3, 0x4, 0x5, 0x6)\n
 #output: ENOSYS\n
index 91375df6d349e767bec2ea0eb598b27c8e6c663d..f59dc1c3bd182a335597c405af26c87fc353ec84 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying ENOSYS with message.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys
 #output: Unimplemented syscall: 0 (0x3, 0x2, 0x1, 0x4, 0x6, 0x5)\n
 #output: ENOSYS\n
index 0f1daf1653f348fe9befca43b2c23ee9002f0384..e38d944edd8aae81ce334e983da61f7d6d70b291 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index c579436d0ef9b656dd6bca8d2d48e55d0e82f668..38d6cc9a1baa561d68f5fe88bc89dad5aabcc97d 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index 6646faca678028516ac27000aff8f8d390378b42..5742fa447bfab1b8715edbc15d367a137530a1a0 100644 (file)
@@ -1,5 +1,5 @@
 /*
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index f27c37c90053a9ad9b2de792a843956f4bba4ff3..53e810b702348e485492596f3bbb9561bbd87f48 100644 (file)
@@ -2,7 +2,7 @@
 #xerror:
 #output: Unimplemented _sysctl syscall *\n
 #output: program stopped with signal 4 (*).\n
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <unistd.h>
index 747e78410f4b329e1a813217fd18ecdfbd5da1d1..b198ed8c0e64773d359d14ee4425bc2aa2a5c096 100644 (file)
@@ -1,5 +1,5 @@
 /* As the included file, but specifying silent ENOSYS.
-#notarget: cris*-*-elf
+#progos: linux
 #sim: --cris-unknown-syscall=enosys-quiet
 #output: ENOSYS\n
 #output: xyzzy\n
index c9ad2f9214cec37739032636ae552e0859787f51..1da539d7e1f2311b6b0efd7372c262a6269a8d49 100644 (file)
@@ -1,6 +1,6 @@
 /* Compiler options:
 #cc: additional_flags=-pthread
-#notarget: cris*-*-elf
+#progos: linux
 
    A sanity check for syscalls resulting from
    pthread_getschedparam and pthread_setschedparam.  */
index 3b6945ad3c355f1b895cf3f8a85391c0268be88b..8cfc0d7811415c9a8f3ce430122cebde30abdb16 100644 (file)
@@ -1,6 +1,6 @@
 /* Compiler options:
 #cc: additional_flags=-pthread
-#notarget: cris*-*-elf
+#progos: linux
 
    To test sched_yield in the presencs of threads.  Core from ex1.c.  */
 
index cfa23279c505484d1ba0658e4237e967f3eb9757..0df5fba5bf90b83facac1ad1248c17cbf7293757 100644 (file)
@@ -1,5 +1,5 @@
 /* Compiler options:
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #output: abb ok\n
 
index 494251fdd39616bdfb7f51c5fc7913b777d7cb77..84b53e06fda95d481dca69248a516bc1380f0874 100644 (file)
@@ -1,5 +1,5 @@
 /* Compiler options:
-#notarget: cris*-*-elf
+#progos: linux
 #cc: additional_flags=-pthread
 #output: abbb ok\n
 
index 477dc3d61d2591055c16c1783f4b783b4f785a87..acd04909bddb12bf5be25d73c904ae10ee7c96c6 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that the truncate syscall works trivially.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <stdio.h>
index f021ae8ac99203d33d07a5fc7c1ed6b447a9750d..b24c30846d65d05e89e443d28315cb3a91eef121 100644 (file)
@@ -1,6 +1,6 @@
 /*
 #sim: --sysroot=$pwd
-#notarget: cris*-*-elf
+#progos: linux
 */
 #define PREFIX "/"
 #include "truncate1.c"
index 2a49b9589eeb0e247fecc5c891e2a5b35dab1fbf..6f3eb4d11d8d879033e5e93ba06fec5c5be52db9 100644 (file)
@@ -1,5 +1,5 @@
 /* Check corner error case: specifying unimplemented resource.
-#notarget: cris*-*-elf
+#progos: linux
 */
 
 #include <sys/time.h>
index 83518d6ec860c6ea36823a66d1cea27ba097f6b0..02db97465a6b98e9d87e2b97d5dd07d22edc5ae7 100644 (file)
@@ -1,5 +1,5 @@
 /* Check that the right machine name appears in the uname result.
-#notarget: *-*-elf
+#progos: linux
 */
 #include <sys/utsname.h>
 #include <stdio.h>
index fad5b7f1920bbed55dae5557141df341f5938db6..a723171a87f7c4f031062e33fc3aca855751e390 100644 (file)
@@ -1,5 +1,5 @@
 /* Trivial test of writev.
-#notarget: cris*-*-elf
+#progos: linux
 #output: abcdefghijklmn\npass\n
 */
 #include <sys/uio.h>
index 5cb92b60a5e1ce73b219f2f69bd576d056efae21..e4904dfbdb914cd9436780a88c897a4db00e370b 100644 (file)
@@ -1,5 +1,5 @@
 /* Trivial test of failing writev: invalid file descriptor.
-#notarget: cris*-*-elf
+#progos: linux
 */
 #include <sys/uio.h>
 #include <errno.h>
diff --git a/sim/testsuite/lib/linuxcheck.c b/sim/testsuite/lib/linuxcheck.c
new file mode 100644 (file)
index 0000000..d1f4bc1
--- /dev/null
@@ -0,0 +1,9 @@
+/* Used by the test harness to see if toolchain targets Linux.  */
+#ifdef __linux__
+int main()
+{
+  return 0;
+}
+#else
+# error "not linux"
+#endif
diff --git a/sim/testsuite/lib/newlibcheck.c b/sim/testsuite/lib/newlibcheck.c
new file mode 100644 (file)
index 0000000..ea1d864
--- /dev/null
@@ -0,0 +1,10 @@
+/* Used by the test harness to see if toolchain uses newlib.  */
+#include <newlib.h>
+#if defined(__NEWLIB__) || defined(_NEWLIB_VERSION)
+int main()
+{
+  return 0;
+}
+#else
+# error "not newlib"
+#endif
index f399d2f3da1db1e8392bf452286a25f751a980ac..535f76cbae34f7a45307053f3b9cb969f6e7a08f 100644 (file)
@@ -48,16 +48,33 @@ proc sim_init_toolchain {} {
     global srcdir
     global global_cpp_works
     global global_cc_works
+    global global_cc_os
 
     # See if we have a preprocessor available.
     set result [target_compile $srcdir/lib/compilercheck.c \
                $objdir/compilercheck.x "preprocess" ""]
     set global_cpp_works [string equal "" "$result"]
 
-    # See if we have a compiler available.
-    set result [target_compile $srcdir/lib/compilercheck.c \
-               $objdir/compilercheck.x "executable" ""]
-    set global_cc_works [string equal "" "$result"]
+    # See if we have a compiler available, and which environment it's targeting.
+    if { [target_compile $srcdir/lib/newlibcheck.c \
+         $objdir/compilercheck.x "executable" ""] == "" } {
+       verbose -log "Found newlib C compiler"
+       set global_cc_works 1
+       set global_cc_os "newlib"
+    } elseif { [target_compile $srcdir/lib/linuxcheck.c \
+               $objdir/compilercheck.x "executable" ""] == "" } {
+       verbose -log "Found Linux C compiler"
+       set global_cc_works 1
+       set global_cc_os "linux"
+    } elseif { [target_compile $srcdir/lib/compilercheck.c \
+               $objdir/compilercheck.x "executable" ""] == "" } {
+       verbose -log "Found C compiler, but unknown OS"
+       set global_cc_works 1
+       set global_cc_os ""
+    } {
+       verbose -log "Can't execute C compiler"
+       set global_cc_works 0
+    }
 
     file delete $objdir/compilercheck.x
 }
@@ -189,6 +206,7 @@ proc sim_run { prog sim_opts prog_opts redir options } {
 # cc[(mach-list)]: <compiler options>
 # sim[(mach-list)]: <simulator options>
 # progopts: <arguments to the program being simulated>
+# progos: OS required for the test
 # status: program exit status to treat as "pass"
 # output: program output pattern to match with string-match
 # xerror: program is expected to return with a "failure" exit code
@@ -211,6 +229,7 @@ proc run_sim_test { name requested_machs } {
     global SIMFLAGS_FOR_TARGET
     global global_cpp_works
     global global_cc_works
+    global global_cc_os
 
     if ![file exists $sim_path] {
        unsupported "$name: missing simulator $sim_path"
@@ -234,6 +253,7 @@ proc run_sim_test { name requested_machs } {
     set opts(ld) ""
     set opts(cc) ""
     set opts(progopts) ""
+    set opts(progos) ""
     set opts(sim) ""
     set opts(status) "0"
     set opts(output) ""
@@ -291,6 +311,11 @@ proc run_sim_test { name requested_machs } {
        }
     }
 
+    if { $opts(progos) != "" && $opts(progos) != $global_cc_os } {
+       untested $subdir/$name
+       return
+    }
+
     set testname $name
     set sourcefile $file
     if { $seen_output == 0 } {