From: Paul J.Y. L. <pjl...@st...> - 2005-06-29 20:05:05
|
testcases/kernel/syscalls/epoll2/examples/epoll-test.c - Not actually built or run, skipping. Index: ltp-cvs/testcases/kernel/syscalls/abort/abort01.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/abort/abort01.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/abort/abort01.c 2005-04-26 11:54:41.000000000 -0400 @@ -71,6 +71,7 @@ void terror(); void fail_exit(); void ok_exit(); int forkfail(); +void do_child(); /***** ** ** *****/ @@ -80,16 +81,32 @@ int main (int argc, char *argv[]) register int i; int status, count, child, kidpid; int core, sig, ex; + char *msg; + + if ((msg = parse_opts(argc, argv, (option_t *)NULL, NULL)) != (char *)NULL){ + tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); + } + +#ifdef UCLINUX + maybe_run_child(&do_child, ""); +#endif setup(); /* temp file is now open */ /*--------------------------------------------------------------*/ for (i=0; i < ITER; i++) { - if ((kidpid = fork()) == 0) { - abort(); - fprintf(temp, "\tchild - abort failed.\n"); - exit(0); + if ((kidpid = FORK_OR_VFORK()) == 0) { +#ifdef UCLINUX + if (self_exec(argv[0], "")) { + terror("self_exec failed (may be OK if under stress)"); + if (instress()) + ok_exit(); + forkfail(); + } +#else + do_child(); +#endif } if (kidpid < 0) { terror("Fork failed (may be OK if under stress)"); @@ -148,6 +165,12 @@ int main (int argc, char *argv[]) } /*--------------------------------------------------------------*/ +void do_child() { + abort(); + fprintf(temp, "\tchild - abort failed.\n"); + exit(0); +} + /****** LTP Port *****/ int anyfail() { Index: ltp-cvs/testcases/kernel/syscalls/capset/capset02.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/capset/capset02.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/capset/capset02.c 2005-04-26 11:52:00.000000000 -0400 @@ -100,7 +100,8 @@ extern int capset(cap_user_header_t, con static void setup(); static void cleanup(); -static void test_setup(int); +static void test_setup(int, char *); +static void child_func(); static pid_t child_pid = -1; @@ -138,6 +139,10 @@ main(int ac, char **av) tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&child_func, ""); +#endif + /* perform global setup for test */ setup(); @@ -149,7 +154,7 @@ main(int ac, char **av) for (i = 0; i < TST_TOTAL; ++i) { - test_setup(i); + test_setup(i, av[0]); TEST(capset(test_cases[i].headerp, test_cases[i].datap)); @@ -226,7 +231,7 @@ void child_func() } void -test_setup(int i) +test_setup(int i, char *argv0) { switch (i) { @@ -255,14 +260,22 @@ test_setup(int i) * Note: this seems to have changed with recent kernels * => create a child and try to set its capabilities */ - child_pid = fork(); + child_pid = FORK_OR_VFORK(); switch(child_pid) { case -1: tst_resm(TBROK,"fork() failed: %s\n",strerror(errno)); cleanup(); break; case 0: +#ifdef UCLINUX + if (self_exec(argv0, "") < 0) { + tst_resm(TBROK,"self_exec() failed\n"); + cleanup(); + break; + } +#else child_func(); +#endif break; default: signal(SIGCHLD,SIG_IGN); Index: ltp-cvs/testcases/kernel/syscalls/connect/connect01.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/connect/connect01.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/connect/connect01.c 2005-04-26 11:52:00.000000000 -0400 @@ -60,9 +60,10 @@ int testno; int s, s2; /* socket descriptor */ struct sockaddr_in sin1, sin2, sin3, sin4; +static int sfd; /* shared between start_server and do_child */ void setup(void), setup0(void), setup1(void), setup2(void), - cleanup(void), cleanup0(void), cleanup1(void); + cleanup(void), cleanup0(void), cleanup1(void), do_child(void); static pid_t start_server(struct sockaddr_in*); @@ -108,6 +109,10 @@ int exp_enos[] = {EBADF, EFAULT, EINVAL, extern int Tst_count; +#ifdef UCLINUX +static char *argv0; +#endif + int main(int argc, char *argv[]) { @@ -121,6 +126,11 @@ main(int argc, char *argv[]) tst_exit(); } +#ifdef UCLINUX + argv0 = argv[0]; + maybe_run_child(&do_child, "d", &sfd); +#endif + /* set up expected errnos */ TEST_EXP_ENOS(exp_enos); @@ -243,11 +253,8 @@ setup2(void) pid_t start_server(struct sockaddr_in *sin0) { - struct sockaddr_in sin1 = *sin0, fsin; - fd_set afds, rfds; + struct sockaddr_in sin1 = *sin0; pid_t pid; - int sfd, nfds, cc, fd; - char c; sfd = socket(PF_INET, SOCK_STREAM, 0); if (sfd < 0) { @@ -265,8 +272,13 @@ start_server(struct sockaddr_in *sin0) strerror(errno)); return -1; } - switch ((pid = fork())) { + switch ((pid = FORK_OR_VFORK())) { case 0: /* child */ +#ifdef UCLINUX + self_exec(argv0, "d", sfd); +#else + do_child(); +#endif break; case -1: tst_brkm(TBROK, cleanup, "server fork failed: %s", @@ -277,6 +289,17 @@ start_server(struct sockaddr_in *sin0) return pid; } + return -1; +} + +void +do_child() +{ + struct sockaddr_in fsin; + fd_set afds, rfds; + int nfds, cc, fd; + char c; + FD_ZERO(&afds); FD_SET(sfd, &afds); Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl15.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl15.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl15.c 2005-04-26 11:52:00.000000000 -0400 @@ -75,6 +75,10 @@ static volatile sig_atomic_t parent_fla static char tmpname[40]; struct flock flock; +#ifdef UCLINUX +static char* argv0; /* set by main, passed to self_exec */ +#endif + /* * cleanup() - performs all ONE TIME cleanup for this test at * completion or premature exit. @@ -185,6 +189,15 @@ int dochild1(int file_flag, int file_mod exit(0); } +#ifdef UCLINUX +int uc_file_flag, uc_file_mode; + +void dochild1_uc() +{ + dochild1(uc_file_flag, uc_file_mode); +} +#endif + int dofork(int file_flag, int file_mode) { /* create child process */ @@ -195,7 +208,15 @@ int dofork(int file_flag, int file_mode) /* child1 */ if (child1 == 0) { +#ifdef UCLINUX + if (self_exec(argv0, "nddds", 1, file_flag, file_mode, + parent, tmpname) < 0) { + perror("self_exec failure"); + return(1); + } +#else dochild1(file_flag, file_mode); +#endif } else { /* * need to wait for child1 to open, and lock the area of the @@ -263,7 +284,7 @@ int dochild2(int file_flag, int file_mod flock.l_whence = 0; flock.l_start = 5L; flock.l_len = 5L; - + /* set lock on child file descriptor */ if ((fcntl(fd_C, F_SETLK, &flock)) >= 0) { tst_resm(TFAIL, "second child2 lock succeeded should have " @@ -533,6 +554,12 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&dochild1_uc, "nddds", 1, &uc_file_flag, + &uc_file_mode, &parent, tmpname); + argv0 = av[0]; +#endif + setup(); /* Check for looping state if -i option is given */ Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl14.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl14.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl14.c 2005-04-26 11:52:00.000000000 -0400 @@ -546,6 +546,9 @@ char *TCID = "fcntl14"; /* Test program int TST_TOTAL = 1; /* Total number of test cases */ extern int Tst_count; /* Test case counter */ +#ifdef UCLINUX +static char *argv0; /* Set by main(), passed to self_exec() */ +#endif /* * cleanup() @@ -619,6 +622,13 @@ wake_parent(void) } } +void do_usleep_child() { + usleep(100000); /* XXX how long is long enough? */ + wake_parent(); + exit(0); +} + + void dochild() { /* child process */ int rc; @@ -744,14 +754,20 @@ void dochild() * need some way to have fcntl() atomically unblock a * signal and wait for the lock.) */ - pid = fork(); + pid = FORK_OR_VFORK(); switch (pid) { case -1: tst_resm(TFAIL, "Fork failed"); break; case 0: /* child */ - usleep(100000); /* XXX how long is long enough? */ - wake_parent(); +#ifdef UCLINUX + if (self_exec(argv0, "n", 1) < 0) { + tst_resm(TFAIL, "self_exec failed"); + break; + } +#else + do_usleep_child(); +#endif break; default: @@ -849,8 +865,19 @@ void run_test(int file_flag, int file_mo fflush(stdout); /* spawn a child process */ - if ((child = fork()) == 0) { + if ((child = FORK_OR_VFORK()) == 0) { +#ifdef UCLINUX + if (self_exec(argv0, "nddddddddd", 2, thiscase->c_type, + thiscase->c_whence, thiscase->c_start, + thiscase->c_len, thiscase->c_flag, + thiscase->a_type, fd, test, parent) < 0) { + tst_resm(TFAIL, "self_exec failed"); + cleanup(); + /*NOTREACHED*/ + } +#else dochild(); +#endif } if (child < 0) { tst_resm(TFAIL, "Fork failed"); @@ -957,6 +984,18 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + argv0 = av[0]; + + maybe_run_child(&do_usleep_child, "n", 1); + thiscase = malloc(sizeof(testcase)); + + maybe_run_child(&dochild, "nddddddddd", 2, &thiscase->c_type, + &thiscase->c_whence, &thiscase->c_start, + &thiscase->c_len, &thiscase->c_flag, &thiscase->a_type, + &fd, &test, &parent); +#endif + setup(); /* global setup */ /* Check for looping state if -i option is given */ @@ -1119,7 +1158,18 @@ int main(int ac, char **av) /* spawn a child process */ if ((child = fork()) == 0) { +#ifdef UCLINUX + if (self_exec(argv0, "nddddddddd", 2, thiscase->c_type, + thiscase->c_whence, thiscase->c_start, + thiscase->c_len, thiscase->c_flag, + thiscase->a_type, fd, test, parent) < 0) { + tst_resm(TFAIL, "self_exec failed"); + cleanup(); + /*NOTREACHED*/ + } +#else dochild(); +#endif } if (child < 0) { tst_resm(TFAIL, "Fork failed"); Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl16.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl16.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl16.c 2005-04-26 11:52:00.000000000 -0400 @@ -289,6 +289,10 @@ char *TCID = "fcntl16"; int TST_TOTAL = 1; extern int Tst_count; +#ifdef UCLINUX +static char *argv0; +#endif + /* * cleanup - performs all the ONE TIME cleanup for this test at completion or * premature exit @@ -349,6 +353,16 @@ void dochild(int kid) exit(0); } /* end of child process */ +#ifdef UCLINUX +static int kid_uc; + +void +dochild_uc() +{ + dochild(kid_uc); +} +#endif + void catch_alarm() { @@ -504,8 +518,16 @@ run_test(int file_flag, int file_mode, i /* spawn child processes */ for (i = 0; i < 2; i++) { if (thislock->type != IGNORED) { - if ((child = fork()) == 0) { + if ((child = FORK_OR_VFORK()) == 0) { +#ifdef UCLINUX + if (self_exec(argv0, "ddddd", i, parent, + test, thislock, fd) < 0) { + perror("self_exec failed"); + return(1); + } +#else dochild(i); +#endif } if (child < 0) { perror("Fork failed"); @@ -656,6 +678,12 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(dochild_uc, "ddddd", &kid_uc, &parent, &test, + &thislock, &fd); + argv0 = av[0]; +#endif + setup(); /* global setup */ /* check looping state if -i option given */ Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl17.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl17.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl17.c 2005-04-26 11:52:00.000000000 -0400 @@ -441,6 +441,24 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&do_child1, "nddddddddd", 1, &file_fd, + &parent_pipe[0], &parent_pipe[1], + &child_pipe1[0], &child_pipe1[1], + &child_pipe2[0], &child_pipe2[1], + &child_pipe3[0], &child_pipe3[1]); + maybe_run_child(&do_child2, "nddddddddd", 2, &file_fd, + &parent_pipe[0], &parent_pipe[1], + &child_pipe1[0], &child_pipe1[1], + &child_pipe2[0], &child_pipe2[1], + &child_pipe3[0], &child_pipe3[1]); + maybe_run_child(&do_child3, "nddddddddd", 3, &file_fd, + &parent_pipe[0], &parent_pipe[1], + &child_pipe1[0], &child_pipe1[1], + &child_pipe2[0], &child_pipe2[1], + &child_pipe3[0], &child_pipe3[1]); +#endif + if (setup()) { /* global testup */ tst_resm(TINFO, "setup failed"); cleanup(); @@ -453,8 +471,19 @@ int main(int ac, char **av) Tst_count = 0; tst_resm(TINFO, "Enter preparation phase"); - if ((child_pid1 = fork()) == 0) { /* first child */ + if ((child_pid1 = FORK_OR_VFORK()) == 0) { /* first child */ +#ifdef UCLINUX + if (self_exec(av[0], "nddddddddd", 1, file_fd, + parent_pipe[0], parent_pipe[1], + child_pipe1[0], child_pipe1[1], + child_pipe2[0], child_pipe2[1], + child_pipe3[0], child_pipe3[1]) < 0) { + perror("self_exec failed, child 1"); + cleanup(); + } +#else do_child1(); +#endif } else if (child_pid1 < 0) { perror("Fork failed: child 1"); cleanup(); @@ -464,7 +493,18 @@ int main(int ac, char **av) /* parent */ if ((child_pid2 = fork()) == 0) { /* second child */ +#ifdef UCLINUX + if (self_exec(av[0], "nddddddddd", 2, file_fd, + parent_pipe[0], parent_pipe[1], + child_pipe1[0], child_pipe1[1], + child_pipe2[0], child_pipe2[1], + child_pipe3[0], child_pipe3[1]) < 0) { + perror("self_exec failed, child 2"); + cleanup(); + } +#else do_child2(); +#endif } else if (child_pid2 < 0) { perror("Fork failed: child 2"); if ((kill(child_pid1, SIGKILL)) < 0) { @@ -478,6 +518,18 @@ int main(int ac, char **av) /* parent */ if ((child_pid3 = fork()) == 0) { /* third child */ +#ifdef UCLINUX + if (self_exec(av[0], "nddddddddd", 3, file_fd, + parent_pipe[0], parent_pipe[1], + child_pipe1[0], child_pipe1[1], + child_pipe2[0], child_pipe2[1], + child_pipe3[0], child_pipe3[1]) < 0) { + perror("self_exec failed, child 3"); + cleanup(); + } +#else + do_child3(); +#endif do_child3(); } else if (child_pid3 < 0) { perror("Fork failed: child 3"); Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl19.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl19.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl19.c 2005-04-26 11:52:00.000000000 -0400 @@ -322,6 +322,11 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&do_child, "ddddd", &parent_pipe[0], &parent_pipe[1], + &child_pipe[0], &child_pipe[1], &fd); +#endif + setup(); /* global setup */ /* Check for looping state if -i option is given */ @@ -329,8 +334,16 @@ int main(int ac, char **av) /* reset Tst_count in case we are looping */ Tst_count = 0; - if ((child_pid = fork()) == 0) { /* child */ + if ((child_pid = FORK_OR_VFORK()) == 0) { /* child */ +#ifdef UCLINUX + if (self_exec(av[0], "ddddd", parent_pipe[0], parent_pipe[1], + child_pipe[0], child_pipe[1], fd) < 0) { + tst_resm(TFAIL, "self_exec failed"); + cleanup(); + } +#else do_child(); +#endif } else if (child_pid < 0) { tst_resm(TFAIL, "Fork failed"); cleanup(); Index: ltp-cvs/testcases/kernel/syscalls/flock/flock03.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/flock/flock03.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/flock/flock03.c 2005-04-26 11:52:00.000000000 -0400 @@ -76,6 +76,12 @@ void setup(void); void cleanup(void); void childfunc(int); +#ifdef UCLINUX +static int fd_uc; +void childfunc_uc() { + childfunc(fd_uc); +} +#endif char *TCID = "flock03"; /* Test program identifier */ int TST_TOTAL = 3; /* Total number of test cases */ @@ -98,6 +104,10 @@ int main(int argc, char **argv) /*NOTREACHED*/ } +#ifdef UCLINUX + maybe_run_child(&childfunc_uc, "ds", &fd_uc, filename); +#endif + setup(); /* The following loop checks looping state if -i option given */ @@ -117,13 +127,20 @@ int main(int argc, char **argv) if(pid == -1) tst_brkm(TFAIL, cleanup, "fork() failed, errno %d", errno); - if(pid == 0) + if(pid == 0) { +#ifdef UCLINUX + if (self_exec(argv[0], "ds", fd, filename) < 0) + tst_brkm(TFAIL, cleanup, "self_exec failed, " + "errno &d", errno); +#else childfunc(fd); +#endif + } TEST(flock(fd, LOCK_EX | LOCK_NB)); if(TEST_RETURN != 0) tst_resm(TFAIL, "Parent: Initial attempt to flock() failed, " - "errno %d",TEST_ERRNO); + "errno %d",TEST_ERRNO); else tst_resm(TPASS, "Parent: Initial attempt to flock() passed"); Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl20.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl20.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl20.c 2005-04-26 11:52:00.000000000 -0400 @@ -317,6 +317,11 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&do_child, "ddddd", &parent_pipe[0], &parent_pipe[1], + &child_pipe[0], &child_pipe[1], &fd); +#endif + setup(); /* global setup */ /* Check for looping state if -i option is given */ @@ -324,8 +329,16 @@ int main(int ac, char **av) /* reset Tst_count in case we are looping */ Tst_count = 0; - if ((child_pid = fork()) == 0) { + if ((child_pid = FORK_OR_VFORK()) == 0) { /* child */ +#ifdef UCLINUX + if (self_exec(av[0], "ddddd", parent_pipe[0], parent_pipe[1], + child_pipe[0], child_pipe[1], fd) < 0) { + tst_resm(TFAIL, "self_exec failed"); + cleanup(); + } +#else do_child(); +#endif } if (child_pid < 0) { Index: ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl21.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/fcntl/fcntl21.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/fcntl/fcntl21.c 2005-04-26 11:52:00.000000000 -0400 @@ -319,6 +319,11 @@ int main(int ac, char **av) tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); } +#ifdef UCLINUX + maybe_run_child(&do_child, "ddddd", &parent_pipe[0], &parent_pipe[1], + &child_pipe[0], &child_pipe[1], &fd); +#endif + setup(); /* global setup */ /* Check for looping state if -i option is given */ @@ -326,8 +331,16 @@ int main(int ac, char **av) /* reset Tst_count in case we are looping */ Tst_count = 0; - if ((child_pid = fork()) == 0) { + if ((child_pid = FORK_OR_VFORK()) == 0) { +#ifdef UCLINUX + if (self_exec(av[0], "ddddd", parent_pipe[0], parent_pipe[1], + child_pipe[0], child_pipe[1], fd) < 0) { + tst_resm(TFAIL, "self_exec failed"); + cleanup(); + } +#else do_child(); +#endif } if (child_pid < 0) { tst_resm(TFAIL, "Fork failed"); Index: ltp-cvs/testcases/kernel/syscalls/ftruncate/ftruncate04.c =================================================================== --- ltp-cvs.orig/testcases/kernel/syscalls/ftruncate/ftruncate04.c 2005-04-26 11:29:01.000000000 -0400 +++ ltp-cvs/testcases/kernel/syscalls/ftruncate/ftruncate04.c 2005-04-26 11:52:00.000000000 -0400 @@ -280,6 +280,10 @@ char **av; /*NOTREACHED*/ } +#ifdef UCLINUX + maybe_run_child(&dochild, "dddd", filename, &recstart, &reclen, &ppid); +#endif + local_flag = PASSED; tst_tmpdir(); if (system("mount | grep `df . | grep -v Filesystem | awk {'print $1'}` | grep mand >/dev/null") != 0){ @@ -349,7 +353,7 @@ char **av; * record lock. */ recstart = RECLEN + rand()%(len - 3*RECLEN); - if ((cpid = fork()) < 0) { + if ((cpid = FORK_OR_VFORK()) < 0) { unlink(filename); tst_resm(TINFO, "System resource may be too low, fork() malloc()" " etc are likely to fail.\n"); @@ -358,7 +362,17 @@ char **av; tst_exit(); } if (cpid == 0) { +#ifdef UCLINUX + if (self_exec(av[0], "dddd", filename, recstart, + reclen, ppid) < -1) { + unlink(filename); + tst_resm(TBROK, "self_exec failed.\n"); + tst_rmdir(); + tst_exit(); + } +#else dochild(); +#endif /* never returns */ } doparent(); |