Hi Christos, Thanks for sharing the patch and the advise for the project! I will study your patch carefully and use it to test the system.
Thanks, Christos. 2016-03-06 17:02 GMT-08:00 Christos Zoulas <chris...@astron.com>: > In article <CA+SXE9vg=p9vF= > sozuyu_1rzuu9lyjhmeff2qmwrm9e05d-...@mail.gmail.com>, > Charles Cui <charles.cui1...@gmail.com> wrote: > >-=-=-=-=-=- > > > >One question about porting posix test suite onto netbsd. > >Right now the suite can execute on Linux and mac OS(I have not tested > >others), > >there should be some fixes in Makefile to let it run on netbsd because it > >cannot be compiled now. > >My question is the output of this suite on Linux (and macOS) reports PASS > >for some tests and FAILED for some others. > >My question about the porting is after changing the makefile to make it > run > >on netbsd, shall we change the kernel to make all failed tests pass? > >Or making all tests execute is the goal and we do not care about the > result? > > For now just build and install gnu make from pkgsrc and use that to build. > Once we make progress we can think about making the build more portable. > > Here are some patches that I've added... > > christos > > diff --git a/LDFLAGS b/LDFLAGS > index aa701d9..81b7599 100644 > --- a/LDFLAGS > +++ b/LDFLAGS > @@ -14,3 +14,4 @@ > # allow for the NPTL-specific compilation (used in some test cases) > # Note: this sometimes require the package nptl-devel.*.rpm to be > installed. > #-I /usr/include/nptl -L /usr/lib/nptl -D_XOPEN_SOURCE=600 -lpthread -lrt > -lm > +-lpthread -lrt -lm > diff --git a/conformance/interfaces/aio_write/7-1.c > b/conformance/interfaces/aio_write/7-1.c > index 8f13f30..3b7f819 100644 > --- a/conformance/interfaces/aio_write/7-1.c > +++ b/conformance/interfaces/aio_write/7-1.c > @@ -84,6 +84,8 @@ int main() > for (i=0; i<last_req-1; i++) > { > err = aio_error(&aiocbs[i]); > + if (err != 0) > + printf(TNAME " aio_error got %d\n", err); > ret = aio_return(&aiocbs[i]); > > } > diff --git a/conformance/interfaces/lio_listio/1-1.c > b/conformance/interfaces/lio_listio/1-1.c > index c86e318..23ba2b8 100644 > --- a/conformance/interfaces/lio_listio/1-1.c > +++ b/conformance/interfaces/lio_listio/1-1.c > @@ -23,6 +23,7 @@ > > #define _XOPEN_SOURCE 600 > #include <stdio.h> > +#include <signal.h> > #include <unistd.h> > #include <string.h> > #include <errno.h> > diff --git a/conformance/interfaces/mmap/11-2.c > b/conformance/interfaces/mmap/11-2.c > index 4ea16be..a284392 100644 > --- a/conformance/interfaces/mmap/11-2.c > +++ b/conformance/interfaces/mmap/11-2.c > @@ -21,6 +21,7 @@ > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > +#include <signal.h> > #include <sys/mman.h> > #include <sys/types.h> > #include <sys/stat.h> > diff --git a/conformance/interfaces/mmap/11-3.c > b/conformance/interfaces/mmap/11-3.c > index 7b3d26f..c88d39b 100644 > --- a/conformance/interfaces/mmap/11-3.c > +++ b/conformance/interfaces/mmap/11-3.c > @@ -20,6 +20,7 @@ > #include <pthread.h> > #include <stdio.h> > #include <stdlib.h> > +#include <signal.h> > #include <unistd.h> > #include <sys/mman.h> > #include <sys/types.h> > diff --git a/conformance/interfaces/mmap/27-1.c > b/conformance/interfaces/mmap/27-1.c > index 1a8e1d3..344db9c 100644 > --- a/conformance/interfaces/mmap/27-1.c > +++ b/conformance/interfaces/mmap/27-1.c > @@ -18,6 +18,7 @@ > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > +#include <signal.h> > #include <sys/mman.h> > #include <sys/types.h> > #include <sys/stat.h> > @@ -62,6 +63,12 @@ int main() > #endif > > data = (char *) malloc(total_size); > + if (data == NULL) > + { > + printf(TNAME "Error in malloc(): %s\n", > + strerror(errno)); > + exit(PTS_UNRESOLVED); > + } > snprintf(tmpfname, sizeof(tmpfname), "/tmp/pts_mmap_27_1_%d", > getpid()); > unlink(tmpfname); > diff --git a/conformance/interfaces/mmap/6-1.c > b/conformance/interfaces/mmap/6-1.c > index 7857f5c..e03dfbe 100644 > --- a/conformance/interfaces/mmap/6-1.c > +++ b/conformance/interfaces/mmap/6-1.c > @@ -26,6 +26,7 @@ > #include <pthread.h> > #include <stdio.h> > #include <stdlib.h> > +#include <signal.h> > #include <unistd.h> > #include <sys/mman.h> > #include <sys/types.h> > diff --git a/conformance/interfaces/mmap/6-2.c > b/conformance/interfaces/mmap/6-2.c > index a37f679..5d9d51b 100644 > --- a/conformance/interfaces/mmap/6-2.c > +++ b/conformance/interfaces/mmap/6-2.c > @@ -29,6 +29,7 @@ > #include <pthread.h> > #include <stdio.h> > #include <stdlib.h> > +#include <signal.h> > #include <unistd.h> > #include <sys/mman.h> > #include <sys/types.h> > diff --git a/conformance/interfaces/mmap/6-3.c > b/conformance/interfaces/mmap/6-3.c > index c0ab5db..bc66ad1 100644 > --- a/conformance/interfaces/mmap/6-3.c > +++ b/conformance/interfaces/mmap/6-3.c > @@ -27,6 +27,7 @@ > #include <pthread.h> > #include <stdio.h> > #include <stdlib.h> > +#include <signal.h> > #include <unistd.h> > #include <sys/mman.h> > #include <sys/types.h> > diff --git a/conformance/interfaces/munmap/1-1.c > b/conformance/interfaces/munmap/1-1.c > index 35f0eb4..328119a 100644 > --- a/conformance/interfaces/munmap/1-1.c > +++ b/conformance/interfaces/munmap/1-1.c > @@ -28,6 +28,7 @@ > #include <sys/stat.h> > #include <sys/wait.h> > #include <fcntl.h> > +#include <signal.h> > #include <string.h> > #include <errno.h> > #include "posixtest.h" > diff --git a/conformance/interfaces/munmap/1-2.c > b/conformance/interfaces/munmap/1-2.c > index 3d4cc3a..77560b9 100644 > --- a/conformance/interfaces/munmap/1-2.c > +++ b/conformance/interfaces/munmap/1-2.c > @@ -23,6 +23,7 @@ > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > +#include <signal.h> > #include <sys/mman.h> > #include <sys/types.h> > #include <sys/stat.h> > diff --git a/conformance/interfaces/sched_yield/1-1.c > b/conformance/interfaces/sched_yield/1-1.c > index 7437e0a..670abef 100644 > --- a/conformance/interfaces/sched_yield/1-1.c > +++ b/conformance/interfaces/sched_yield/1-1.c > @@ -19,11 +19,16 @@ > * 4. Launch a thread which call sched_yield() and check that the > counter has > * changed since the call. > */ > -#define LINUX > - > -#ifdef LINUX > +#ifdef __linux__ > #define _GNU_SOURCE > #endif > +#ifdef __NetBSD__ > +#define _NETBSD_SOURCE > +#endif > + > +#include <sys/types.h> > +#include <sys/param.h> > +#include <sys/wait.h> > > #include <sched.h> > #include <stdio.h> > @@ -31,18 +36,16 @@ > #include <stdlib.h> > #include <signal.h> > #include <pthread.h> > +#include <inttypes.h> > +#include <stdint.h> > #include <errno.h> > -#include <sys/wait.h> > #include "posixtest.h" > > #ifdef BSD > -# include <sys/types.h> > -# include <sys/param.h> > # include <sys/sysctl.h> > #endif > > #ifdef HPUX > -# include <sys/param.h> > # include <sys/pstat.h> > #endif > > @@ -78,10 +81,10 @@ int get_ncpu() { > return ncpu; > } > > -#ifdef LINUX > int set_process_affinity(int cpu) > { > int retval = -1; > +#if defined(CPU_ZERO) > cpu_set_t cpu_mask; > > CPU_ZERO(&cpu_mask); > @@ -91,12 +94,23 @@ int set_process_affinity(int cpu) > fprintf (stderr, "Wrong cpu id: %d\n", cpu); > return -1; > } > - > -//#ifndef P2_SCHED_SETAFFINITY > retval = sched_setaffinity(0, sizeof(cpu_mask), &cpu_mask); > -//#else > -// retval = sched_setaffinity(0, &cpu_mask); > -//#endif > +#elif defined(cpuset_create) > + cpuset_t *cpu_mask = cpuset_create(); > + > + cpuset_zero(cpu_mask); > + if (cpu >= 0 && cpu <= cpuset_size(cpu_mask)) { > + cpuset_set(cpu, cpu_mask); > + } else { > + fprintf (stderr, "Wrong cpu id: %d\n", cpu); > + return -1; > + } > + retval = _sched_setaffinity(0, 0, cpuset_size(cpu_mask), cpu_mask); > + cpuset_destroy(cpu_mask); > +#else > + #error "no cpuset" > +#endif > + > if (retval == -1) > perror("Error at sched_setaffinity()"); > > @@ -106,6 +120,7 @@ int set_process_affinity(int cpu) > int set_thread_affinity(int cpu) > { > int retval = -1; > +#if defined(CPU_ZERO) > cpu_set_t cpu_mask; > > CPU_ZERO(&cpu_mask); > @@ -115,26 +130,34 @@ int set_thread_affinity(int cpu) > fprintf (stderr, "Wrong cpu id: %d\n", cpu); > return -1; > } > -//#ifndef P2_PTHREAD_SETAFFINITY > retval = pthread_setaffinity_np(pthread_self(), > sizeof(cpu_mask), &cpu_mask); > -//#else > -// retval = pthread_setaffinity_np(pthread_self(), &cpu_mask); > -//#endif > +#elif defined(cpuset_create) > + cpuset_t *cpu_mask = cpuset_create(); > + > + cpuset_zero(cpu_mask); > + if (cpu >= 0 && cpu <= cpuset_size(cpu_mask)) { > + cpuset_set(cpu, cpu_mask); > + } else { > + fprintf (stderr, "Wrong cpu id: %d\n", cpu); > + return -1; > + } > + retval = pthread_setaffinity_np(0, cpuset_size(cpu_mask), > cpu_mask); > + cpuset_destroy(cpu_mask); > +#else > + #error "no cpuset" > +#endif > if (retval != 0) > fprintf (stderr, "Error at pthread_setaffinity_np():\n"); > return retval; > } > > -#endif > > void * runner(void * arg) { > int i=0, nc; > long result = 0; > -#ifdef LINUX > set_thread_affinity(*(int *)arg); > - fprintf(stderr, "%ld bind to cpu: %d\n", pthread_self(), > *(int*)arg); > -#endif > + fprintf(stderr, "%jd bind to cpu: %d\n", > (intmax_t)pthread_self(), *(int*)arg); > > for(;i<LOOP;i++){ > nc = nb_call; > @@ -154,10 +177,8 @@ void * runner(void * arg) { > } > > void * busy_thread(void *arg){ > -#ifdef LINUX > set_thread_affinity(*(int *)arg); > - fprintf(stderr, "%ld bind to cpu: %d\n", pthread_self(), > *(int*)arg); > -#endif > + fprintf(stderr, "%jd bind to cpu: %d\n", > (intmax_t)pthread_self(), *(int*)arg); > while(1){ > nb_call++; > sched_yield(); > @@ -170,11 +191,9 @@ void * busy_thread(void *arg){ > void buzy_process(int cpu){ > struct sched_param param; > > -#ifdef LINUX > /* Bind to a processor */ > set_process_affinity(cpu); > fprintf(stderr, "%d bind to cpu: %d\n", getpid(), cpu); > -#endif > param.sched_priority = sched_get_priority_max(SCHED_FIFO); > if(sched_setscheduler(getpid(), SCHED_FIFO, ¶m) != 0) { > perror("An error occurs when calling sched_setparam()"); > diff --git a/run_tests b/run_tests > index 1e06b9e..e5b6318 100755 > --- a/run_tests > +++ b/run_tests > @@ -23,8 +23,8 @@ EOF > runtests() > { > for test in `ls -d $1`; do > - POSIX_TARGET=$test make build-tests > - POSIX_TARGET=$test make run-tests > + POSIX_TARGET=$test gmake build-tests > + POSIX_TARGET=$test gmake run-tests > done > } > > diff --git a/stress/mqueues/Makefile b/stress/mqueues/Makefile > index 49e8e4a..2ca58dd 100644 > --- a/stress/mqueues/Makefile > +++ b/stress/mqueues/Makefile > @@ -4,7 +4,8 @@ ifndef POSIX_DIR_LIB > endif > > INCLUDE = -I../../include > -LIB=-lmqueue > +#LIB=-lmqueue > +LIB=-lrt > > CC=gcc > CFLAGS=-Wall -O2 -g -I$(POSIX_DIR_INC) -L$(POSIX_DIR_LIB) -lpthread > diff --git a/stress/mqueues/run.sh b/stress/mqueues/run.sh > index 37f34d8..47c2cf6 100755 > --- a/stress/mqueues/run.sh > +++ b/stress/mqueues/run.sh > @@ -11,22 +11,24 @@ > RunTest() > { > echo "TEST: " $1 $2 > - TOTAL=$TOTAL+1 > + TOTAL=$((TOTAL+1)) > ./$1 $2 > - if [ $? == 0 ]; then > - PASS=$PASS+1 > - echo -ne "\t\t\t***TEST PASSED***\n\n" > + if [ $? = 0 ]; then > + PASS=$((PASS+1)) > + echo " ***TEST PASSED***" > + echo > else > - FAIL=$FAIL+1 > - echo -ne "\t\t\t***TEST FAILED***\n\n" > + FAIL=$((FAIL+1)) > + echo " ***TEST FAILED***" > + echo > fi > } > > # Main program > > -declare -i TOTAL=0 > -declare -i PASS=0 > -declare -i FAIL=0 > +TOTAL=0 > +PASS=0 > +FAIL=0 > > # Add lists of tests to these variables for execution > TESTS="multi_send_rev_1.test multi_send_rev_2.test" > @@ -39,11 +41,11 @@ RunTest multi_send_rev_2.test 100 > > > echo > -echo -ne "\t\t****************\n" > -echo -ne "\t\t* TOTAL: " $TOTAL "\n" > -echo -ne "\t\t* PASSED: " $PASS "\n" > -echo -ne "\t\t* FAILED: " $FAIL "\n" > -echo -ne "\t\t****************\n" > +echo " ****************" > +echo " * TOTAL: " $TOTAL > +echo " * PASSED: " $PASS > +echo " * FAILED: " $FAIL > +echo " ****************" > > exit 0 > > diff --git a/stress/semaphores/Makefile b/stress/semaphores/Makefile > index 387b7ff..113a382 100644 > --- a/stress/semaphores/Makefile > +++ b/stress/semaphores/Makefile > @@ -3,7 +3,7 @@ ifndef POSIX_DIR_LIB > endif > > INCLUDE = -I../../include > -LIB=-lposix1b > +#LIB=-lposix1b > > CC=gcc > CFLAGS=-Wall -O2 -g -I$(POSIX_DIR_INC) -L$(POSIX_DIR_LIB) > diff --git a/stress/semaphores/run.sh b/stress/semaphores/run.sh > index 8812b56..42fa5ae 100755 > --- a/stress/semaphores/run.sh > +++ b/stress/semaphores/run.sh > @@ -11,22 +11,24 @@ > RunTest() > { > echo "TEST: " $1 $2 > - TOTAL=$TOTAL+1 > + TOTAL=$((TOTAL+1)) > ./$1 $2 > - if [ $? == 0 ]; then > - PASS=$PASS+1 > - echo -ne "\t\t\t***TEST PASSED***\n\n" > + if [ $? = 0 ]; then > + PASS=$((PASS+1)) > + echo " ***TEST PASSED***" > + echo > else > - FAIL=$FAIL+1 > - echo -ne "\t\t\t***TEST FAILED***\n\n" > + FAIL=$((FAIL+1)) > + echo " ***TEST FAILED***" > + echo > fi > } > > # Main program > > -declare -i TOTAL=0 > -declare -i PASS=0 > -declare -i FAIL=0 > +TOTAL=0 > +PASS=0 > +FAIL=0 > > # Add lists of tests to these variables for execution > TESTS="multi_con_pro.test" > @@ -37,11 +39,11 @@ echo "==========================================" > RunTest $TESTS 100 > > echo > -echo -ne "\t\t****************\n" > -echo -ne "\t\t* TOTAL: " $TOTAL "\n" > -echo -ne "\t\t* PASSED: " $PASS "\n" > -echo -ne "\t\t* FAILED: " $FAIL "\n" > -echo -ne "\t\t****************\n" > +echo " ****************" > +echo " * TOTAL: " $TOTAL > +echo " * PASSED: " $PASS > +echo " * FAILED: " $FAIL > +echo " ****************" > > exit 0 > > diff --git a/stress/threads/fork/do-plot b/stress/threads/fork/do-plot > index 3789b46..08797f6 100755 > --- a/stress/threads/fork/do-plot > +++ b/stress/threads/fork/do-plot > @@ -15,12 +15,12 @@ > FILE=$1 > TMP=$(mktemp -d) > > -function clean_up > +clean_up() > { > rm -rf $TMP > } > > -function error > +error() > { > cat 1>&2 > clean_up > diff --git a/stress/threads/fork/s-c1.c b/stress/threads/fork/s-c1.c > index ba257fd..668d899 100644 > --- a/stress/threads/fork/s-c1.c > +++ b/stress/threads/fork/s-c1.c > @@ -130,7 +130,7 @@ int main ( int argc, char *argv[] ) > mes_t sentinel; > mes_t *m_cur, *m_tmp; > > - long CHILD_MAX = sysconf( _SC_CHILD_MAX ); > + long MY_CHILD_MAX = sysconf( _SC_CHILD_MAX ); > long my_max = 1000 * SCALABILITY_FACTOR ; > > /* Initialize the measure list */ > @@ -140,8 +140,8 @@ int main ( int argc, char *argv[] ) > /* Initialize output routine */ > output_init(); > > - if ( CHILD_MAX > 0 ) > - my_max = CHILD_MAX; > + if ( MY_CHILD_MAX > 0 ) > + my_max = MY_CHILD_MAX; > > pr = ( pid_t * ) calloc( 1 + my_max, sizeof( pid_t ) ); > > @@ -151,7 +151,7 @@ int main ( int argc, char *argv[] ) > } > > #if VERBOSE > 1 > - output( "CHILD_MAX: %d\n", CHILD_MAX ); > + output( "CHILD_MAX: %d\n", MY_CHILD_MAX ); > > #endif > > @@ -267,12 +267,12 @@ int main ( int argc, char *argv[] ) > /* Parent */ > nprocesses++; > > - /* FAILED if nprocesses > CHILD_MAX */ > + /* FAILED if nprocesses > MY_CHILD_MAX */ > if ( nprocesses > my_max ) > { > errno = 0; > > - if ( CHILD_MAX > 0 ) > + if ( MY_CHILD_MAX > 0 ) > { > #if VERBOSE > 0 > output( "WARNING! We were able to create > more than CHILD_MAX processes\n" ); > >