summaryrefslogtreecommitdiffstats
path: root/cpukit/libgnat
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-12 00:15:54 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-12 00:15:54 +0000
commitdb27544606497dbd7a87ad03857c17536cf38883 (patch)
treea228b5e37522159696e20863bd4ef2d5cbdcd6a0 /cpukit/libgnat
parent2007-12-11 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-db27544606497dbd7a87ad03857c17536cf38883.tar.bz2
2007-12-11 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac, posix/Makefile.am, wrapup/Makefile.am: Move Ada support code that is untestable from the Standard RTEMS Test Suite into its own directory. All code in score, posix, rtems, and sapi should be testable by the Standard RTEMS Test Suites. It was buried under POSIX before so this should be a clearer location anyway. * libgnat/.cvsignore, libgnat/Makefile.am, libgnat/ada_intrsupp.c, libgnat/adasupp.c: New files. * posix/src/ada_intrsupp.c, posix/src/adasupp.c: Removed.
Diffstat (limited to 'cpukit/libgnat')
-rw-r--r--cpukit/libgnat/.cvsignore2
-rw-r--r--cpukit/libgnat/Makefile.am16
-rw-r--r--cpukit/libgnat/ada_intrsupp.c131
-rw-r--r--cpukit/libgnat/adasupp.c31
4 files changed, 180 insertions, 0 deletions
diff --git a/cpukit/libgnat/.cvsignore b/cpukit/libgnat/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/cpukit/libgnat/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/cpukit/libgnat/Makefile.am b/cpukit/libgnat/Makefile.am
new file mode 100644
index 0000000000..378f290cfa
--- /dev/null
+++ b/cpukit/libgnat/Makefile.am
@@ -0,0 +1,16 @@
+##
+## $Id$
+##
+
+include $(top_srcdir)/automake/compile.am
+
+EXTRA_DIST=
+
+if LIBPOSIX
+
+noinst_LIBRARIES = libgnat.a
+
+libgnat_a_SOURCES = ada_intrsupp.c adasupp.c
+
+include $(top_srcdir)/automake/local.am
+endif
diff --git a/cpukit/libgnat/ada_intrsupp.c b/cpukit/libgnat/ada_intrsupp.c
new file mode 100644
index 0000000000..9bec384127
--- /dev/null
+++ b/cpukit/libgnat/ada_intrsupp.c
@@ -0,0 +1,131 @@
+#include <rtems.h>
+#include <rtems/bspIo.h>
+
+rtems_id __gnat_binary_semaphore_create(void)
+{
+ rtems_status_code status;
+ rtems_id semaphore;
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'A', 'I', 'S', 'R' ),
+ 0,
+ RTEMS_SIMPLE_BINARY_SEMAPHORE | RTEMS_FIFO,
+ 0,
+ &semaphore
+ );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_create failed %d\n", status );
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_create\n" );
+ #endif
+ return semaphore;
+}
+
+int __gnat_binary_semaphore_delete(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_delete\n" );
+ #endif
+
+ status = rtems_semaphore_delete( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_delete failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_obtain(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_obtain\n" );
+ #endif
+
+ status = rtems_semaphore_obtain( semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_obtain failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_release(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ #if defined(GNAT_DEBUG)
+ printk( "__gnat_binary_semaphore_release\n" );
+ #endif
+
+ status = rtems_semaphore_release( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_release failed %d\n", status );
+
+ return 0;
+}
+
+int __gnat_binary_semaphore_flush(
+ rtems_id semaphore
+)
+{
+ rtems_status_code status;
+
+ printk( "__gnat_binary_semaphore_flush\n" );
+
+ status = rtems_semaphore_flush( semaphore );
+ if ( status != RTEMS_SUCCESSFUL )
+ printk( "__gnat_binary_semaphore_flush failed %d\n", status );
+
+ return 0;
+}
+
+typedef void (*ISRHandler)(void*);
+ void *set_vector( void *, rtems_vector_number, int );
+
+int __gnat_interrupt_connect(
+ int vector,
+ ISRHandler handler,
+ void *parameter
+)
+{
+ printk( "__gnat_interrupt_connect( %d, %p, %p )\n", vector, handler, parameter );
+ set_vector( handler, vector, 1 );
+ return 0;
+}
+
+int __gnat_interrupt_set(
+ int vector,
+ ISRHandler handler
+)
+{
+ printk( "__gnat_interrupt_set( %d, %p )\n", vector, handler );
+
+ set_vector( handler, vector, 1 );
+ return 0;
+}
+
+ISRHandler __gnat_interrupt_get(
+ int vector
+)
+{
+ printk( "__gnat_interrupt_get( %d )\n", vector );
+ return 0;
+}
+
+int __gnat_interrupt_number_to_vector(
+ int intNum
+)
+{
+ printk( "__gnat_interrupt_number_to_vector( %d )\n", intNum );
+ return intNum;
+}
+
diff --git a/cpukit/libgnat/adasupp.c b/cpukit/libgnat/adasupp.c
new file mode 100644
index 0000000000..c74fe3b34b
--- /dev/null
+++ b/cpukit/libgnat/adasupp.c
@@ -0,0 +1,31 @@
+/*
+ * $Id$
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <errno.h>
+#include <pthread.h>
+
+#include <rtems/system.h>
+#include <rtems/posix/pthread.h>
+
+/*PAGE
+ *
+ * _ada_pthread_minimum_stack_size
+ *
+ * This routine returns the minimum stack size so the GNAT RTS can
+ * allocate enough stack for Ada tasks.
+ */
+
+size_t _ada_pthread_minimum_stack_size( void )
+{
+ /*
+ * Eventually this may need to include a per cpu family calculation
+ * but for now, this will do.
+ */
+
+ return PTHREAD_MINIMUM_STACK_SIZE * 2;
+}