ex_sig ex_clone cu14 cu14_1 cu41 fpconv ecag fpext fpext_warn \
rounding-1 rounding-2 rounding-3 rounding-4 rounding-5 bfp-1 \
bfp-2 bfp-3 bfp-4 srnm srnmb comp-1 comp-2 exrl tmll tm stmg \
- ex clst mvc test_clone test_fork test_sig rounding-6 \
+ ex clst mvc test_fork test_sig rounding-6 \
spechelper-alr spechelper-algr \
spechelper-slr spechelper-slgr \
spechelper-cr spechelper-clr \
+++ /dev/null
-#define _GNU_SOURCE
-#include <sys/syscall.h>
-#include <linux/wait.h>
-#include <sched.h>
-#include "test.h"
-
-char stack[4096];
-
-void saynum(int num)
-{
- char *nums="012345679";
- say(nums+num,1);
-}
-
-void test_thread(void *arg)
-{
- mysleep(0,50000);
- SAY("thread_start");
- mysleep(0,50000);
- SAY("thread_end");
- EXIT(1);
-}
-
-void test_child(void)
-{
- mysleep(0,50000);
- SAY("child_start");
- mysleep(0,50000);
- SAY("child_end");
- EXIT(1);
-}
-
-
-void forkish(void)
-{
- int pid;
- int status;
-
- asm volatile( "lghi 2, 0\n"
- "lgr 3, 0\n"
- "svc 120\n" // CLONE
- "lr %0, 2\n"
- :"=d" (pid)
- :: "2", "3", "cc");
- if (!pid)
- test_child();
- SAY("MAIN_proc");
- asm volatile( "lr 2, %2\n"
- "lgr 3,%1\n"
- "lgr 4,%3\n"
- "lghi 5,0\n"
- "svc 114\n" // WAIT4
- : "=m" (status)
- : "d" (&status), "d" (pid), "d" (__WALL)
- : "2","3","4","5", "cc");
- say("wait returned:",14);
- saynum(status >> 8);
- say("\n",1);
- SAY("MAIN_proc_end");
-}
-
-void threadish(void)
-{
- register long ret asm("2") = (unsigned long) stack+4096-160;
- register long flags asm("3") = CLONE_THREAD | CLONE_SIGHAND |
- CLONE_PARENT | CLONE_VM |
- CLONE_FILES | CLONE_FS |
- CLONE_PTRACE;
-
- asm volatile( "svc 120\n"
- :"+d"(ret)
- : "d"(flags)
- : "cc", "memory");
- if (!ret)
- test_thread(0);
- SAY("MAIN_thread");
- mysleep(0,10000);
- SAY("MAIN_thread_end");
-}
-
-int main(void)
-{
- forkish();
- threadish();
- EXIT(1);
- return 0; // shuts up the compiler
-}