summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel@rtems.org>2018-09-26 09:43:51 -0500
committerJoel Sherrill <joel@rtems.org>2018-09-26 18:03:33 -0500
commitf4ce641b374a20b650c31f60d03424d21d7fcbdf (patch)
tree9e297257ae3097dd06baa259fac09e0097a8fc65
parentc11_thread01/test.c: Fix minor issues (diff)
downloadrtems-examples-f4ce641b374a20b650c31f60d03424d21d7fcbdf.tar.bz2
Add various programs to report default attributes for various POSIX objects
Closes #3531.
-rw-r--r--posix_api/Makefile11
-rw-r--r--posix_api/psx_barrier_report/Makefile20
-rw-r--r--posix_api/psx_barrier_report/barrier_attr_report.c58
-rw-r--r--posix_api/psx_barrier_report/rtems_config.c48
-rw-r--r--posix_api/psx_barrier_report/wscript15
-rw-r--r--posix_api/psx_condvar_report/Makefile20
-rw-r--r--posix_api/psx_condvar_report/condvar_attr_report.c69
-rw-r--r--posix_api/psx_condvar_report/rtems_config.c48
-rw-r--r--posix_api/psx_condvar_report/wscript15
-rw-r--r--posix_api/psx_mqueue_report/Makefile20
-rw-r--r--posix_api/psx_mqueue_report/mqueue_attr_report.c48
-rw-r--r--posix_api/psx_mqueue_report/rtems_config.c48
-rw-r--r--posix_api/psx_mqueue_report/wscript15
-rw-r--r--posix_api/psx_mutex_report/Makefile20
-rw-r--r--posix_api/psx_mutex_report/mutex_attr_report.c131
-rw-r--r--posix_api/psx_mutex_report/rtems_config.c49
-rw-r--r--posix_api/psx_mutex_report/wscript15
-rw-r--r--posix_api/psx_pthread_report/Makefile20
-rw-r--r--posix_api/psx_pthread_report/pthread_attr_report.c154
-rw-r--r--posix_api/psx_pthread_report/rtems_config.c48
-rw-r--r--posix_api/psx_pthread_report/wscript15
-rw-r--r--posix_api/psx_rwlock_report/Makefile20
-rw-r--r--posix_api/psx_rwlock_report/rtems_config.c48
-rw-r--r--posix_api/psx_rwlock_report/rwlock_attr_report.c49
-rw-r--r--posix_api/psx_rwlock_report/wscript15
-rw-r--r--posix_api/psx_sched_report/Makefile30
-rw-r--r--posix_api/psx_sched_report/psx_sched_report.c (renamed from posix_api/psx_sched_report/test.c)16
-rw-r--r--posix_api/psx_sched_report/rtems_config.c11
-rw-r--r--posix_api/psx_sched_report/wscript3
-rw-r--r--posix_api/wscript7
30 files changed, 1051 insertions, 35 deletions
diff --git a/posix_api/Makefile b/posix_api/Makefile
index b070ea9..8af26dc 100644
--- a/posix_api/Makefile
+++ b/posix_api/Makefile
@@ -4,5 +4,14 @@ include $(RTEMS_SHARE)/make/directory.cfg
# If the POSIX API isn't enabled, we can't build these
ifeq ($(RTEMS_HAS_POSIX_API),yes)
- SUBDIRS = psx_example_1 psx_example_2 psx_example_3 psx_sched_report
+ SUBDIRS = psx_example_1
+ SUBDIRS += psx_example_2
+ SUBDIRS += psx_example_3
+ SUBDIRS += psx_barrier_report
+ SUBDIRS += psx_condvar_report
+ SUBDIRS += psx_mqueue_report
+ SUBDIRS += psx_mutex_report
+ SUBDIRS += psx_pthread_report
+ SUBDIRS += psx_rwlock_report
+ SUBDIRS += psx_sched_report
endif
diff --git a/posix_api/psx_barrier_report/Makefile b/posix_api/psx_barrier_report/Makefile
new file mode 100644
index 0000000..e8e2f63
--- /dev/null
+++ b/posix_api/psx_barrier_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_barrier_report.exe
+
+# C source names
+CSRCS = barrier_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_barrier_report/barrier_attr_report.c b/posix_api/psx_barrier_report/barrier_attr_report.c
new file mode 100644
index 0000000..c1f0485
--- /dev/null
+++ b/posix_api/psx_barrier_report/barrier_attr_report.c
@@ -0,0 +1,58 @@
+/*
+ * Program to print default POSIX barrier attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <assert.h>
+
+#ifndef OS_DOES_NOT_SUPPORT_BARRIERS
+
+static void print_shared(pthread_barrierattr_t *attr)
+{
+ int rc;
+ int shared;
+ char *s;
+
+ rc = pthread_barrierattr_getpshared( attr, &shared );
+ assert( rc == 0 );
+
+ switch ( shared ) {
+ case PTHREAD_PROCESS_PRIVATE: s = "PTHREAD_PROCESS_PRIVATE"; break;
+ case PTHREAD_PROCESS_SHARED: s = "PTHREAD_PROCESS_SHARED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Process shared: %s\n", s );
+}
+#endif
+
+int main()
+{
+#ifndef OS_DOES_NOT_SUPPORT_BARRIERS
+ pthread_barrierattr_t attr;
+#endif
+ int rc;
+
+ puts( "*** POSIX Barrier Default Attributes Report ***" );
+
+#ifndef OS_DOES_NOT_SUPPORT_BARRIERS
+ rc = pthread_barrierattr_init( &attr );
+ assert( rc == 0 );
+
+ print_shared( &attr );
+#else
+ printf( "Barriers are not supported\n" );
+#endif
+
+ puts( "*** END OF POSIX Barrier Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_barrier_report/rtems_config.c b/posix_api/psx_barrier_report/rtems_config.c
new file mode 100644
index 0000000..fd0a0f8
--- /dev/null
+++ b/posix_api/psx_barrier_report/rtems_config.c
@@ -0,0 +1,48 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_barrier_report/wscript b/posix_api/psx_barrier_report/wscript
new file mode 100644
index 0000000..6e03506
--- /dev/null
+++ b/posix_api/psx_barrier_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2018 Joel Sherrill (joel@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_barrier_report.exe',
+ source = ['barrier_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_condvar_report/Makefile b/posix_api/psx_condvar_report/Makefile
new file mode 100644
index 0000000..27fa8bd
--- /dev/null
+++ b/posix_api/psx_condvar_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_condvar_report.exe
+
+# C source names
+CSRCS = condvar_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_condvar_report/condvar_attr_report.c b/posix_api/psx_condvar_report/condvar_attr_report.c
new file mode 100644
index 0000000..4c460d9
--- /dev/null
+++ b/posix_api/psx_condvar_report/condvar_attr_report.c
@@ -0,0 +1,69 @@
+/*
+ * Program to print default POSIX condition variable attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <assert.h>
+
+static void print_shared(pthread_condattr_t *attr)
+{
+ int rc;
+ int shared;
+ char *s;
+
+ rc = pthread_condattr_getpshared( attr, &shared );
+ assert( rc == 0 );
+
+ switch ( shared ) {
+ case PTHREAD_PROCESS_PRIVATE: s = "PTHREAD_PROCESS_PRIVATE"; break;
+ case PTHREAD_PROCESS_SHARED: s = "PTHREAD_PROCESS_SHARED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Process shared: %s\n", s );
+}
+
+static void print_clock(pthread_condattr_t *attr)
+{
+ int rc;
+ clockid_t clock;
+ char *s;
+
+ rc = pthread_condattr_getclock( attr, &clock );
+ assert( rc == 0 );
+ switch ( clock ) {
+ case CLOCK_MONOTONIC: s = "CLOCK_MONOTONIC"; break;
+ case CLOCK_PROCESS_CPUTIME_ID: s = "CLOCK_PROCESS_CPUTIME_ID"; break;
+ case CLOCK_REALTIME: s = "CLOCK_REALTIME"; break;
+ case CLOCK_THREAD_CPUTIME_ID: s = "CLOCK_THREAD_CPUTIME_ID"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Clock: %s\n", s );
+}
+
+int main()
+{
+ pthread_condattr_t attr;
+ int rc;
+
+ puts( "*** POSIX Condition Variable Default Attributes Report ***" );
+
+ rc = pthread_condattr_init( &attr );
+ assert( rc == 0 );
+
+ print_shared( &attr );
+ print_clock( &attr );
+
+ puts( "*** END OF POSIX Condition Variable Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_condvar_report/rtems_config.c b/posix_api/psx_condvar_report/rtems_config.c
new file mode 100644
index 0000000..fd0a0f8
--- /dev/null
+++ b/posix_api/psx_condvar_report/rtems_config.c
@@ -0,0 +1,48 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_condvar_report/wscript b/posix_api/psx_condvar_report/wscript
new file mode 100644
index 0000000..b4a5d29
--- /dev/null
+++ b/posix_api/psx_condvar_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2013 Gedare Bloom (gedare@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_condvar_report.exe',
+ source = ['condvar_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_mqueue_report/Makefile b/posix_api/psx_mqueue_report/Makefile
new file mode 100644
index 0000000..52027fd
--- /dev/null
+++ b/posix_api/psx_mqueue_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_mqueue_report.exe
+
+# C source names
+CSRCS = mqueue_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_mqueue_report/mqueue_attr_report.c b/posix_api/psx_mqueue_report/mqueue_attr_report.c
new file mode 100644
index 0000000..855330c
--- /dev/null
+++ b/posix_api/psx_mqueue_report/mqueue_attr_report.c
@@ -0,0 +1,48 @@
+/*
+ * Program to print default POSIX message queue attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include <fcntl.h> /* For O_* constants */
+#include <sys/stat.h>
+#include <mqueue.h>
+
+static void print_attr(mqd_t mqd)
+{
+ int rc;
+ struct mq_attr attr;
+
+ rc = mq_getattr( mqd, &attr );
+ assert( rc == 0 );
+
+ printf( "mq_maxmsg: %ld\n", attr.mq_maxmsg );
+ printf( "mq_msgsize: %ld\n", attr.mq_msgsize );
+}
+
+int main()
+{
+ mqd_t mqd;
+
+ puts( "*** POSIX Message Queue Default Attributes Report ***" );
+
+ mqd = mq_open( "/testq", O_CREAT|O_RDWR, 0777, NULL );
+ if ( mqd == (mqd_t) -1 ) {
+ perror("mq_open" );
+ }
+ assert( mqd != (mqd_t) -1 );
+
+ print_attr( mqd );
+
+ puts( "*** END OF POSIX Message Queue Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_mqueue_report/rtems_config.c b/posix_api/psx_mqueue_report/rtems_config.c
new file mode 100644
index 0000000..fd0a0f8
--- /dev/null
+++ b/posix_api/psx_mqueue_report/rtems_config.c
@@ -0,0 +1,48 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_mqueue_report/wscript b/posix_api/psx_mqueue_report/wscript
new file mode 100644
index 0000000..fed2355
--- /dev/null
+++ b/posix_api/psx_mqueue_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2013 Gedare Bloom (gedare@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_mqueue_report.exe',
+ source = ['mqueue_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_mutex_report/Makefile b/posix_api/psx_mutex_report/Makefile
new file mode 100644
index 0000000..b615525
--- /dev/null
+++ b/posix_api/psx_mutex_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_mutex_report.exe
+
+# C source names
+CSRCS = mutex_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_mutex_report/mutex_attr_report.c b/posix_api/psx_mutex_report/mutex_attr_report.c
new file mode 100644
index 0000000..444a4d0
--- /dev/null
+++ b/posix_api/psx_mutex_report/mutex_attr_report.c
@@ -0,0 +1,131 @@
+/*
+ * Program to print default POSIX mutex attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <assert.h>
+
+static void print_shared(pthread_mutexattr_t *attr)
+{
+ int rc;
+ int shared;
+ char *s;
+
+ rc = pthread_mutexattr_getpshared( attr, &shared );
+ assert( rc == 0 );
+
+ switch ( shared ) {
+ case PTHREAD_PROCESS_PRIVATE: s = "PTHREAD_PROCESS_PRIVATE"; break;
+ case PTHREAD_PROCESS_SHARED: s = "PTHREAD_PROCESS_SHARED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Process shared: %s\n", s );
+}
+
+static void print_type(pthread_mutexattr_t *attr)
+{
+ int rc;
+ int type;
+ char *s;
+
+#ifndef PTHREAD_MUTEX_ROBUST
+ puts( "PTHREAD_MUTEX_ROBUST is not supported" );
+#endif
+#ifndef PTHREAD_MUTEX_STALLED
+ puts( "PTHREAD_MUTEX_STALLED is not supported" );
+#endif
+#if (PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL)
+ puts( "PTHREAD_MUTEX_DEFAULT == PTHREAD_MUTEX_NORMAL" );
+#endif
+
+ /*
+ * NOTE: The FACE Technical Standard defines multiple POSIX profiles.
+ * Some of the profiles do not include pthread_mutexattr_gettype().
+ */
+#ifdef OS_DOES_NOT_SUPPORT_PTHREAD_MUTEXATTR_GETTYPE
+ s = "pthread_mutexattr_gettype() is not supported";
+#else
+ rc = pthread_mutexattr_gettype( attr, &type );
+ assert( rc == 0 );
+ switch ( type ) {
+#if (PTHREAD_MUTEX_DEFAULT != PTHREAD_MUTEX_NORMAL)
+ case PTHREAD_MUTEX_DEFAULT: s = "PTHREAD_MUTEX_DEFAULT"; break;
+#endif
+ case PTHREAD_MUTEX_ERRORCHECK: s = "PTHREAD_MUTEX_ERRORCHECK"; break;
+ case PTHREAD_MUTEX_NORMAL: s = "PTHREAD_MUTEX_NORMAL"; break;
+ case PTHREAD_MUTEX_RECURSIVE: s = "PTHREAD_MUTEX_RECURSIVE"; break;
+#ifdef PTHREAD_MUTEX_ROBUST
+ case PTHREAD_MUTEX_ROBUST: s = "PTHREAD_MUTEX_ROBUST"; break;
+#endif
+#ifdef PTHREAD_MUTEX_STALLED
+ case PTHREAD_MUTEX_STALLED: s = "PTHREAD_MUTEX_STALLED"; break;
+#endif
+ default: s = "UNKNOWN"; break;
+ }
+#endif
+
+ printf( "Type: %s\n", s );
+}
+
+static void print_protocol(pthread_mutexattr_t *attr)
+{
+#if defined(__CYGWIN__)
+ /* Cygwin does not support the protocols */
+ puts( "Mutex protocols not supported" );
+#else
+ int rc;
+ int protocol;
+ char *s;
+
+ rc = pthread_mutexattr_getprotocol( attr, &protocol );
+ assert( rc == 0 );
+ switch ( protocol ) {
+ /* XXX something is not right on CentOS. The constants are not available.*/
+ /* XXX Figure it out */
+#ifdef __linux__
+ case 0: s = "PTHREAD_PRIO_NONE"; break;
+ case 1: s = "PTHREAD_PRIO_INHERIT"; break;
+ case 2: s = "PTHREAD_PRIO_PROTECT"; break;
+#else
+ case PTHREAD_PRIO_NONE: s = "PTHREAD_PRIO_NONE"; break;
+ case PTHREAD_PRIO_INHERIT: s = "PTHREAD_PRIO_INHERIT"; break;
+ case PTHREAD_PRIO_PROTECT: s = "PTHREAD_PRIO_PROTECT"; break;
+#endif
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Protocol: %s\n", s );
+ /*
+ * Assuming that PTHREAD_PRIO_CEILING is not used as default, so
+ * no need to print ceiling.
+ */
+#endif
+}
+
+int main()
+{
+ pthread_mutexattr_t attr;
+ int rc;
+
+ puts( "*** POSIX Mutex Default Attributes Report ***" );
+
+ rc = pthread_mutexattr_init( &attr );
+ assert( rc == 0 );
+
+ print_type( &attr );
+ print_shared( &attr );
+ print_protocol( &attr );
+
+ puts( "*** END OF POSIX Mutex Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_mutex_report/rtems_config.c b/posix_api/psx_mutex_report/rtems_config.c
new file mode 100644
index 0000000..9d0bd42
--- /dev/null
+++ b/posix_api/psx_mutex_report/rtems_config.c
@@ -0,0 +1,49 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_mutex_report/wscript b/posix_api/psx_mutex_report/wscript
new file mode 100644
index 0000000..cb2f199
--- /dev/null
+++ b/posix_api/psx_mutex_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2013 Gedare Bloom (gedare@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_mutex_report.exe',
+ source = ['mutex_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_pthread_report/Makefile b/posix_api/psx_pthread_report/Makefile
new file mode 100644
index 0000000..6f83abb
--- /dev/null
+++ b/posix_api/psx_pthread_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_pthread_report.exe
+
+# C source names
+CSRCS = pthread_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_pthread_report/pthread_attr_report.c b/posix_api/psx_pthread_report/pthread_attr_report.c
new file mode 100644
index 0000000..ff2f179
--- /dev/null
+++ b/posix_api/psx_pthread_report/pthread_attr_report.c
@@ -0,0 +1,154 @@
+/*
+ * Program to print default pthread attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <assert.h>
+
+static void print_stack_info(pthread_attr_t *attr)
+{
+ int rc;
+ void *addr;
+ size_t size;
+
+ /*
+ * pthread_attr_getstacksize() and pthread_attr_[sg]etstackaddr() are
+ * obsolete.
+ */
+
+ rc = pthread_attr_getstack( attr, &addr, &size );
+ assert( rc == 0 );
+ printf( "Stack size: %zu\n", size );
+ printf( "Stack address: %p\n", addr );
+
+ rc = pthread_attr_getguardsize( attr, &size );
+ assert( rc == 0 );
+ printf( "Stack guard size: %zu\n", size );
+
+}
+
+static void print_inherit_scheduler(pthread_attr_t *attr)
+{
+ int rc;
+ int sched;
+ char *s;
+
+ rc = pthread_attr_getinheritsched( attr, &sched );
+ assert( rc == 0 );
+
+ switch( sched ) {
+ case PTHREAD_INHERIT_SCHED: s = "PTHREAD_INHERIT_SCHED"; break;
+ case PTHREAD_EXPLICIT_SCHED: s = "PTHREAD_EXPLICIT_SCHED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Inherit scheduler: %s\n", s );
+}
+
+static void print_scope(pthread_attr_t *attr)
+{
+ int rc;
+ int scope;
+ char *s;
+
+ rc = pthread_attr_getscope( attr, &scope );
+ assert( rc == 0 );
+
+ switch( scope ) {
+ case PTHREAD_SCOPE_SYSTEM: s = "PTHREAD_SCOPE_SYSTEM"; break;
+ case PTHREAD_SCOPE_PROCESS: s = "PTHREAD_SCOPE_PROCESS"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Thread scope: %s\n", s );
+}
+
+static void print_detach_state(pthread_attr_t *attr)
+{
+ int rc;
+ int state;
+ char *s;
+
+ rc = pthread_attr_getdetachstate( attr, &state );
+ assert( rc == 0 );
+
+ switch( state ) {
+ case PTHREAD_CREATE_JOINABLE: s = "PTHREAD_CREATE_JOINABLE"; break;
+ case PTHREAD_CREATE_DETACHED: s = "PTHREAD_CREATE_DETACHED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Thread detach state: %s\n", s );
+}
+
+static void print_sched_info(pthread_attr_t *attr)
+{
+ int rc;
+ int policy;
+ char *s;
+ struct sched_param sched;
+
+ rc = pthread_attr_getschedpolicy( attr, &policy );
+ assert( rc == 0 );
+
+ rc = pthread_attr_getschedparam( attr, &sched );
+ assert( rc == 0 );
+
+ switch( policy ) {
+ case SCHED_OTHER: s = "SCHED_OTHER"; break;
+ case SCHED_FIFO: s = "SCHED_FIFO"; break;
+ case SCHED_RR: s = "SCHED_RR"; break;
+#if defined(SCHED_SPORADIC)
+ case SCHED_SPORADIC: s = "SCHED_SPORADIC"; break;
+#endif
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Scheduler policy : %s\n", s );
+ printf( "Scheduler priority : %d\n", sched.sched_priority );
+#if defined(SCHED_SPORADIC)
+ if ( policy == SCHED_SPORADIC ) {
+ printf(
+ "Sporadic low priority : %d\n"
+ "Sporadic period: %lld:%ld\n"
+ "Sporadic initial budget: %lld:%ld\n"
+ "Sporadic max pending replenishments: %d\n",
+ sched.sched_ss_low_priority,
+ (long long) sched.sched_ss_repl_period.tv_sec,
+ sched.sched_ss_repl_period.tv_nsec,
+ (long long) sched.sched_ss_init_budget.tv_sec,
+ sched.sched_ss_init_budget.tv_nsec,
+ sched.sched_ss_max_repl
+ );
+ }
+#endif
+}
+
+int main()
+{
+ pthread_attr_t attr;
+ int rc;
+
+ puts( "*** POSIX Thread Default Attributes Report ***" );
+
+ rc = pthread_attr_init( &attr );
+ assert( rc == 0 );
+
+ print_stack_info( &attr );
+ print_inherit_scheduler( &attr );
+ print_scope( &attr );
+ print_detach_state( &attr );
+ print_sched_info( &attr );
+
+ puts( "*** END OF POSIX Thread Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_pthread_report/rtems_config.c b/posix_api/psx_pthread_report/rtems_config.c
new file mode 100644
index 0000000..fd0a0f8
--- /dev/null
+++ b/posix_api/psx_pthread_report/rtems_config.c
@@ -0,0 +1,48 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_pthread_report/wscript b/posix_api/psx_pthread_report/wscript
new file mode 100644
index 0000000..6ec6cfa
--- /dev/null
+++ b/posix_api/psx_pthread_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2013 Gedare Bloom (gedare@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_pthread_report.exe',
+ source = ['pthread_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_rwlock_report/Makefile b/posix_api/psx_rwlock_report/Makefile
new file mode 100644
index 0000000..c0797ba
--- /dev/null
+++ b/posix_api/psx_rwlock_report/Makefile
@@ -0,0 +1,20 @@
+#
+# RTEMS_MAKEFILE_PATH is typically set in an environment variable
+#
+
+PGM=${ARCH}/psx_rwlock_report.exe
+
+# C source names
+CSRCS = rwlock_attr_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
+
+include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
+include $(RTEMS_CUSTOM)
+include $(PROJECT_ROOT)/make/leaf.cfg
+
+OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
+
+all: ${ARCH} $(PGM)
+
+$(PGM): $(OBJS)
+ $(make-exe)
diff --git a/posix_api/psx_rwlock_report/rtems_config.c b/posix_api/psx_rwlock_report/rtems_config.c
new file mode 100644
index 0000000..fd0a0f8
--- /dev/null
+++ b/posix_api/psx_rwlock_report/rtems_config.c
@@ -0,0 +1,48 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+
+int main(int argc, char **argv);
+
+static char *argv_list[] = {
+ "report",
+ ""
+};
+static void *POSIX_Init(void *arg)
+{
+ (void) arg; /* deliberately ignored */
+
+ /*
+ * Initialize optional services
+ */
+
+ /*
+ * Could get arguments from command line or have a static set.
+ */
+ (void) main(1, argv_list);
+
+ return NULL;
+}
+
+#include <bsp.h> /* for device driver prototypes */
+
+/* NOTICE: the clock driver is explicitly disabled */
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_UNLIMITED_OBJECTS
+#define CONFIGURE_UNIFIED_WORK_AREAS
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (64 * 1024)
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
diff --git a/posix_api/psx_rwlock_report/rwlock_attr_report.c b/posix_api/psx_rwlock_report/rwlock_attr_report.c
new file mode 100644
index 0000000..2ec7067
--- /dev/null
+++ b/posix_api/psx_rwlock_report/rwlock_attr_report.c
@@ -0,0 +1,49 @@
+/*
+ * Program to print default POSIX rwlock attributes
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <pthread.h>
+#include <assert.h>
+
+static void print_shared(pthread_rwlockattr_t *attr)
+{
+ int rc;
+ int shared;
+ char *s;
+
+ rc = pthread_rwlockattr_getpshared( attr, &shared );
+ assert( rc == 0 );
+
+ switch ( shared ) {
+ case PTHREAD_PROCESS_PRIVATE: s = "PTHREAD_PROCESS_PRIVATE"; break;
+ case PTHREAD_PROCESS_SHARED: s = "PTHREAD_PROCESS_SHARED"; break;
+ default: s = "UNKNOWN"; break;
+ }
+
+ printf( "Process shared: %s\n", s );
+}
+
+int main()
+{
+ pthread_rwlockattr_t attr;
+ int rc;
+
+ puts( "*** POSIX RWLock Default Attributes Report ***" );
+
+ rc = pthread_rwlockattr_init( &attr );
+ assert( rc == 0 );
+
+ print_shared( &attr );
+
+ puts( "*** END OF POSIX RWLock Default Attributes Report ***" );
+ exit( 0 );
+}
diff --git a/posix_api/psx_rwlock_report/wscript b/posix_api/psx_rwlock_report/wscript
new file mode 100644
index 0000000..56f6354
--- /dev/null
+++ b/posix_api/psx_rwlock_report/wscript
@@ -0,0 +1,15 @@
+# Copyright 2013 Gedare Bloom (gedare@rtems.org)
+#
+# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+#
+
+import rtems_waf.rtems as rtems
+
+def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'psx_rwlock_report.exe',
+ source = ['rwlock_attr_report.c','rtems_config.c'],
+ lib = ['c'])
+
diff --git a/posix_api/psx_sched_report/Makefile b/posix_api/psx_sched_report/Makefile
index 96dd47f..f69f38d 100644
--- a/posix_api/psx_sched_report/Makefile
+++ b/posix_api/psx_sched_report/Makefile
@@ -1,37 +1,14 @@
#
-# Makefile
-#
-
-#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#
-EXEC=psx_sched_report.exe
-PGM=${ARCH}/$(EXEC)
-
-# optional managers required
-MANAGERS=all
+PGM=${ARCH}/psx_sched_report.exe
# C source names
-CSRCS = test.c
-COBJS_ = $(CSRCS:.c=.o)
-COBJS = $(COBJS_:%=${ARCH}/%)
-
-# C++ source names
-CXXSRCS =
-CXXOBJS_ = $(CXXSRCS:.cc=.o)
-CXXOBJS = $(CXXOBJS_:%=${ARCH}/%)
-
-# AS source names
-ASSRCS =
-ASOBJS_ = $(ASSRCS:.s=.o)
-ASOBJS = $(ASOBJS_:%=${ARCH}/%)
-
-# Libraries
-LIBS = -lrtemsall -lc
+CSRCS = psx_sched_report.c rtems_config.c
+COBJS = $(CSRCS:%.c=${ARCH}/%.o)
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
-
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
@@ -41,4 +18,3 @@ all: ${ARCH} $(PGM)
$(PGM): $(OBJS)
$(make-exe)
-
diff --git a/posix_api/psx_sched_report/test.c b/posix_api/psx_sched_report/psx_sched_report.c
index f9cab61..b0381aa 100644
--- a/posix_api/psx_sched_report/test.c
+++ b/posix_api/psx_sched_report/psx_sched_report.c
@@ -2,10 +2,17 @@
* Program to print POSIX Scheduler Characteristics
*/
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
+
#include <stdlib.h>
#include <stdio.h>
#include <sched.h>
-#include <stdlib.h>
+/* FreeBSD 10 needs this for struct timespec which seems wrong */
+#include <time.h>
void print_sched_info(
char *s,
@@ -19,7 +26,7 @@ void print_sched_info(
min = sched_get_priority_min( policy );
max = sched_get_priority_max( policy );
(void) sched_rr_get_interval( 1, &t );
- levels = max - min;
+ levels = abs(max - min + 1);
printf( "\tSupports %d priority levels (%d - %d)\n", levels, min, max );
if ( levels >= 32 )
printf( "\tImplementation is compliant on priority levels\n");
@@ -28,18 +35,21 @@ void print_sched_info(
printf( "\tScheduling quantum is %ld seconds and %ld nanoseconds\n",
(long)t.tv_sec, (long)t.tv_nsec );
+ puts( "" );
}
int main()
{
+ puts( "*** POSIX Scheduler Characteristics Report ***" );
print_sched_info( "SCHED_OTHER", SCHED_OTHER );
print_sched_info( "SCHED_FIFO", SCHED_FIFO );
print_sched_info( "SCHED_RR", SCHED_RR );
#if defined(SCHED_SPORADIC)
- print_sched_info( "SCHED_SPORADIC", SCHED_RR );
+ print_sched_info( "SCHED_SPORADIC", SCHED_SPORADIC );
#else
printf( "SCHED_SPORADIC is not supported\n" );
#endif
+ puts( "*** END OF POSIX Scheduler Characteristics Report ***" );
exit( 0 );
}
diff --git a/posix_api/psx_sched_report/rtems_config.c b/posix_api/psx_sched_report/rtems_config.c
index f985453..fd0a0f8 100644
--- a/posix_api/psx_sched_report/rtems_config.c
+++ b/posix_api/psx_sched_report/rtems_config.c
@@ -1,10 +1,19 @@
+/*
+ * This file contains the RTEMS Configuration for this example.
+ */
+
+/*
+ * Copyright 2018 Joel Sherrill (joel@rtems.org)
+ *
+ * This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
+ */
#include <stdlib.h>
int main(int argc, char **argv);
static char *argv_list[] = {
- "psx_sched_report",
+ "report",
""
};
static void *POSIX_Init(void *arg)
diff --git a/posix_api/psx_sched_report/wscript b/posix_api/psx_sched_report/wscript
index 208b078..deca478 100644
--- a/posix_api/psx_sched_report/wscript
+++ b/posix_api/psx_sched_report/wscript
@@ -3,7 +3,6 @@
# This file's license is 2-clause BSD as in this distribution's LICENSE.2 file.
#
-# Waf build script for an RTEMS Hello
import rtems_waf.rtems as rtems
def build(bld):
@@ -11,6 +10,6 @@ def build(bld):
bld(features = 'c cprogram',
target = 'psx_sched_report.exe',
- source = ['test.c','rtems_config.c'],
+ source = ['psx_sched_report.c','rtems_config.c'],
lib = ['c'])
diff --git a/posix_api/wscript b/posix_api/wscript
index d0fe38a..66a351f 100644
--- a/posix_api/wscript
+++ b/posix_api/wscript
@@ -10,5 +10,10 @@ def build(bld):
bld.recurse('psx_example_1')
bld.recurse('psx_example_2')
bld.recurse('psx_example_3')
+ bld.recurse('psx_barrier_report')
+ bld.recurse('psx_condvar_report')
+ bld.recurse('psx_mqueue_report')
+ bld.recurse('psx_mutex_report')
+ bld.recurse('psx_pthread_report')
+ bld.recurse('psx_rwlock_report')
bld.recurse('psx_sched_report')
-