summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-08-04 14:01:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-08-04 14:01:52 +0000
commitb1a3d7c0ac2105f40d53efeb86d5914ecefe3d56 (patch)
treec2613cb6099175d7cd4a8502a14c2788c51f0805 /gcc
parent5d8ffa7905375de71e733df6d84b41bd784d4d1f (diff)
2010-08-04 Vinu Rajashekhar <vinutheraj@gmail.com>
* do_one, rundeja: Add support for libgo testing. * rtems_libgo_init.c: New file.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rwxr-xr-xgcc/do_one30
-rw-r--r--gcc/rtems_libgo_init.c206
-rwxr-xr-xgcc/rundeja13
4 files changed, 248 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d74f4b9..bf4effe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2010-08-04 Vinu Rajashekhar <vinutheraj@gmail.com>
+
+ * do_one, rundeja: Add support for libgo testing.
+ * rtems_libgo_init.c: New file.
+
2010-07-22 Vinu Rajashekhar <vinutheraj@gmail.com>
* do_one: Add Go support. Plus some cleanup from Joel.
diff --git a/gcc/do_one b/gcc/do_one
index 738f978..9c7dacc 100755
--- a/gcc/do_one
+++ b/gcc/do_one
@@ -50,6 +50,7 @@ do_rtems=no
run_gcctests=no
run_acats=no
run_gccgotests=no
+run_libgotests=no
# Do we send email to gcc-testresults with the test results?
do_mail=yes
# Are we noisy when running?
@@ -77,6 +78,7 @@ do_one [options] CPU BSP
-v - verbose
-M - do NOT email test results to gcc-testresults
-o - run GCC Go tests
+ -t - run libgo tests
EOF
}
@@ -95,7 +97,7 @@ toggle()
esac
}
-while getopts bdDnv1cmargioCATMG OPT
+while getopts bdDnv1cmargiotCATMG OPT
do
case "$OPT" in
A) do_binutils="yes"
@@ -105,6 +107,7 @@ do
do_multilib="yes"
do_ada="yes"
do_gccgo="yes"
+ do_gccgo_multilib="yes"
do_rtems="yes"
;;
d) do_cleanup=`toggle ${do_cleanup}` ;;
@@ -132,6 +135,7 @@ do
v) verbose=`toggle ${verbose}` ;;
M) do_mail=`toggle ${do_mail}` ;;
o) run_gccgotests=`toggle ${run_gccgotests}` ;;
+ t) run_libgotests=`toggle ${run_libgotests}` ;;
*) fatal ;;
esac
done
@@ -172,6 +176,7 @@ if [ ${verbose} = yes ] ; then
echo "Run GCC Tests : " ${run_gcctests}
echo "Run ACATS : " ${run_acats}
echo "Run Go Tests : " ${run_gccgotests}
+ echo "Do libgo Tests: " ${run_libgotests}
echo "Email Tests : " ${do_mail}
echo "Native GCC : " `type gcc`
echo "PATH : " ${PATH}
@@ -719,17 +724,17 @@ if [ ${run_gccgotests} = "yes" ] ; then
cp testsuite/go/go.log testsuite/go/go.sum ${RDIR}
if [ ${do_mail} = "yes" ] ; then
- echo Sending test results to GCC community..
+ echo Sending Go test results to GCC community..
${DIR}/contrib/test_summary -m gcc-testresults@gcc.gnu.org | sh
if [ $? -ne 0 ] ; then
- echo "Failed to email GCC Test Results to GCC Community .. bailing"
+ echo "Failed to email GCC Go Test Results to GCC Community .. bailing"
exit 1
fi
- echo Sending test results to RTEMS community..
+ echo Sending Go test results to RTEMS community..
${GCCDIR}/contrib/test_summary -o -m rtems-tooltestresults@rtems.org | sh
if [ $? -ne 0 ] ; then
- echo "Failed to email GCC Test Results to RTEMS Community .. bailing"
+ echo "Failed to email GCC GO Test Results to RTEMS Community .. bailing"
exit 1
fi
fi
@@ -738,6 +743,21 @@ else
echo Skipping GCC Go DejaGNU tests for ${cpu}/${bsp}
fi
+##### Do the libgo tests
+if [ ${run_libgotests} = "yes" ] ; then
+ echo "Running libgo DejaGNU tests..."
+ cd ${BASEDIR}/b-gccgo1-${cpu} || exit 1
+ time sh -x ${SCRIPTDIR}/gcc/rundeja ${bsp} libgo \
+ >${LOGDIR}/${cpu}-libgotests-${bsp}.log 2>&1
+
+ RDIR=${RESULTSDIR}/${TARGET}-${bsp}/`date +%Y-%m-%d-%H-%M-%S`
+ mkdir -p ${RDIR}
+ cp ${TARGET}-${bsp}/libgo/testsuite/libgo-all.log \
+ ${TARGET}-${bsp}/libgo/testsuite/libgo-all.sum ${RDIR}
+else
+ echo Skipping libgo DejaGNU tests for ${cpu}/${bsp}
+fi
+
if [ ${do_gccgo} = "yes" ] ; then
test ${do_cleanup} = "yes" && rm -rf b-gccgo1-${cpu}
fi
diff --git a/gcc/rtems_libgo_init.c b/gcc/rtems_libgo_init.c
new file mode 100644
index 0000000..adae9b2
--- /dev/null
+++ b/gcc/rtems_libgo_init.c
@@ -0,0 +1,206 @@
+/*
+ * Init for libgo testing.
+ */
+
+#include <rtems.h>
+#include <bsp.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <rtems/rtems_bsdnet.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include "networkconfig.h"
+
+#include <rtems/libcsupport.h>
+#include <rtems/imfs.h>
+#include <rtems/untar.h>
+/*
+ * The tarfile image is built automatically externally.
+ */
+#include "FilesystemImage.h"
+#include "FilesystemImage.c"
+
+static void fileio_print_free_heap(void)
+{
+ printf("--- unused dynamic memory: %lu bytes ---\n",
+ (unsigned long) malloc_free_space());
+}
+
+/*
+ * Set up first argument
+ */
+static int argc = 1;
+static char arg0[20] = "rtems";
+static char *argv[20] = { arg0 };
+
+#if defined(MAIN_USE_REQUIRES_COMMAND_LINE)
+
+#define COMMAND_LINE_MAXIMUM 200
+
+#include <stdio.h>
+#include <ctype.h>
+
+void parse_arguments(
+ char *buffer,
+ size_t maximum_length
+)
+{
+ char *cp;
+ char *linebuf = buffer;
+ size_t length;
+
+ for (;;) {
+
+ #if defined(MAIN_COMMAND_LINE)
+ strncpy (linebuf, MAIN_COMMAND_LINE, maximum_length);
+ #else
+ /*
+ * Read a line
+ */
+ printf (">>> %s ", argv[0]);
+ fflush (stdout);
+ fgets (linebuf, maximum_length, stdin);
+
+ length = strnlen( linebuf, maximum_length );
+ if ( linebuf[length - 1] == '\n' || linebuf[length - 1] == '\r' ) {
+ linebuf[length - 1] = '\0';
+ }
+ #endif
+
+ /*
+ * Break line into arguments
+ */
+ cp = linebuf;
+ for (;;) {
+ while (isspace (*cp))
+ *cp++ = '\0';
+ if (*cp == '\0')
+ break;
+ if (argc >= ((sizeof argv / sizeof argv[0]) - 1)) {
+ printf ("Too many arguments.\n");
+ argc = 0;
+ break;
+ }
+ argv[argc++] = cp;
+ while (!isspace (*cp)) {
+ if (*cp == '\0')
+ break;
+ cp++;
+ }
+ }
+ if (argc > 1) {
+ argv[argc] = NULL;
+ break;
+ }
+ printf ("You must give some arguments!\n");
+ }
+
+ #if defined(DEBUG_COMMAND_LINE_ARGUMENTS)
+ {
+ int i;
+ for (i=0; i<argc ; i++ ) {
+ printf( "argv[%d] = ***%s***\n", i, argv[i] );
+ }
+ printf( "\n" );
+ }
+ #endif
+}
+
+
+#endif
+
+int main( int, char ** );
+
+void *POSIX_Init(
+ void *argument
+)
+{
+ //printk("Initializing Network\n");
+ rtems_bsdnet_initialize_network ();
+ //rtems_bsdnet_show_inet_routes ();
+#if defined(MAIN_USE_REQUIRES_COMMAND_LINE)
+ char command_line[ COMMAND_LINE_MAXIMUM ];
+ parse_arguments( command_line, COMMAND_LINE_MAXIMUM );
+#endif
+
+ int status;
+
+ printf( "\nmaking the libgo_test_workdir directory\n" );
+ status = mkdir( "/libgo_test_workdir", 0777 );
+ printf( "mkdir() status : %d\n\n", status );
+
+ printf("=============== Loading filesystem image ===============\n");
+ //status = Untar_FromMemory((char *)FilesystemImage, FilesystemImage_size);
+ status = rtems_tarfs_load ("/libgo_test_workdir", (uint8_t *) FilesystemImage, (size_t) FilesystemImage_size);
+ printf ("rtems_tarfs_load status : %d\n\n", status);
+
+ printf( "\nchdir to the libgo_test_workdir directory\n" );
+ status = chdir( "/libgo_test_workdir" );
+ printf( "chdir() status : %d\n\n", status );
+
+ printf( "\nMaking /tmp directory\n" );
+ status = mkdir( "/tmp", 0777 );
+ printf( "mkdir() status : %d\n\n", status );
+
+ printf("============== Look at Local Filesystem ==============\n");
+ printf( "PWD: " );
+ //pwd();
+
+ printf( "\n--->ls /\n" );
+ //ls("/");
+
+ main(argc, argv);
+ exit(0);
+ return 0;
+}
+
+/* configuration information */
+
+/* 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
+// Works with 32 Mb too, this is faster
+//#define CONFIGURE_EXECUTIVE_RAM_SIZE (5 * 1024 * 1024)
+#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 500
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 400
+#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 500
+#define CONFIGURE_MAXIMUM_TASK_VARIABLES (2 * 400)
+#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 1
+#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 10
+#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE (32 * 1024)
+#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (4 * 1024)
+//#define CONFIGURE_MEMORY_OVERHEAD (4 * 1024)
+
+//#define CONFIGURE_MICROSECONDS_PER_TICK 1000
+#define CONFIGURE_TICKS_PER_TIMESLICE 50
+#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(1000)
+
+#define CONFIGURE_MAXIMUM_TASKS 20
+#define CONFIGURE_MAXIMUM_SEMAPHORES 20
+//#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 20
+
+#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
+#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
+
+#define CONFIGURE_PIPES_ENABLED TRUE
+#define CONFIGURE_MAXIMUM_PIPES 20
+//#define CONFIGURE_MAXIMUM_BARRIERS 20
+
+#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY TRUE
+//#define BSP_ZERO_WORKSPACE_AUTOMATICALLY 1
+#define CONFIGURE_UNIFIED_WORK_AREAS
+//#define CONFIGURE_MALLOC_DIRTY
+//#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY 1
+#define CONFIGURE_STACK_CHECKER_ENABLED TRUE
+
+#define CONFIGURE_MALLOC_STATISTICS
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
+
+/* end of file */
diff --git a/gcc/rundeja b/gcc/rundeja
index 68e2455..3b54abb 100755
--- a/gcc/rundeja
+++ b/gcc/rundeja
@@ -111,7 +111,18 @@ else
echo "set boards_dir ${SCRIPTDIR}/dejagnu/boards" >${dfile}
fi
-if [ $2 = gccgo ] ; then
+if [ $2 = libgo ] ; then
+ rtems_libgo_init=${SCRIPTDIR}/gcc/rtems_libgo_init.c
+ rtems_bin2c=${INSTALL}/bin/rtems-bin2c
+ make check-target-libgo RUNTESTFLAGS="\
+ SIM=${BSP_SIM} \
+ RTEMS_MAKEFILE_PATH=${rtemsdir} \
+ RTEMS_LIBGO_INIT=${rtems_libgo_init} \
+ RTEMS_BIN2C=${rtems_bin2c} \
+ RTEMS_CONFIG_OBJ= \
+ --target_board=rtems-${CPU}-${DEJABSP} \
+ "
+elif [ $2 = gccgo ] ; then
RTEMS_MAKEFILE_PATH=${rtemsdir} \
SCRIPTDIR=${SCRIPTDIR} \
make -f ${SCRIPTDIR}/gcc/Makefile.rtems_gccgoinit