summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-06-15 16:53:27 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-06-21 11:21:04 +0200
commitfe46647ef5671095d17734792a1dcc675d54d34c (patch)
treed75f9586408ff4df3de9ccb2dbf4351ddf00e7ab
parentstackchk: Add SMP support (diff)
downloadrtems-fe46647ef5671095d17734792a1dcc675d54d34c.tar.bz2
score: Macros to declare and define global symbols
Add RTEMS_DEFINE_GLOBAL_SYMBOL() and add RTEMS_DECLARE_GLOBAL_SYMBOL(). Update #3459.
-rw-r--r--cpukit/include/rtems/score/basedefs.h34
-rw-r--r--testsuites/sptests/Makefile.am9
-rw-r--r--testsuites/sptests/configure.ac1
-rw-r--r--testsuites/sptests/spmisc01/init.c49
-rw-r--r--testsuites/sptests/spmisc01/spmisc01.doc13
-rw-r--r--testsuites/sptests/spmisc01/spmisc01.scn2
6 files changed, 107 insertions, 1 deletions
diff --git a/cpukit/include/rtems/score/basedefs.h b/cpukit/include/rtems/score/basedefs.h
index 4e48d226e8..8169f6db8c 100644
--- a/cpukit/include/rtems/score/basedefs.h
+++ b/cpukit/include/rtems/score/basedefs.h
@@ -10,7 +10,7 @@
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
- * Copyright (c) 2010, 2017 embedded brains GmbH.
+ * Copyright (c) 2010, 2018 embedded brains GmbH.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -249,6 +249,38 @@
#define RTEMS_OBFUSCATE_VARIABLE( _var ) (void) (_var)
#endif
+/**
+ * @brief Declares a global symbol with the specified name.
+ *
+ * This macro must be placed at file scope.
+ *
+ * The name must be a valid designator.
+ */
+#define RTEMS_DECLARE_GLOBAL_SYMBOL( _name ) \
+ extern char _name[];
+
+/**
+ * @brief Defines a global symbol with the specified name and value.
+ *
+ * This macro must be placed at file scope.
+ *
+ * The name must be a valid designator.
+ *
+ * On the value parameters macro expansion is performed and afterwards it is
+ * stringified. It must expand to an integer literal understood by the
+ * assembler.
+ */
+#if defined(__GNUC__)
+ #define RTEMS_DEFINE_GLOBAL_SYMBOL( _name, _value ) \
+ __asm__( \
+ "\t.globl " RTEMS_XSTRING( __USER_LABEL_PREFIX__ ) #_name \
+ "\n\t.set " RTEMS_XSTRING( __USER_LABEL_PREFIX__ ) #_name \
+ ", " RTEMS_STRING( _value ) "\n" \
+ )
+#else
+ #define RTEMS_DEFINE_GLOBAL_SYMBOL( _name, _value )
+#endif
+
#if __cplusplus >= 201103L
#define RTEMS_STATIC_ASSERT(cond, msg) \
static_assert(cond, # msg)
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am
index 8519702bb1..d3a2e10869 100644
--- a/testsuites/sptests/Makefile.am
+++ b/testsuites/sptests/Makefile.am
@@ -1493,6 +1493,15 @@ spmkdir_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_spmkdir) \
$(support_includes)
endif
+if TEST_spmisc01
+sp_tests += spmisc01
+sp_screens += spmisc01/spmisc01.scn
+sp_docs += spmisc01/spmisc01.doc
+spmisc01_SOURCES = spmisc01/init.c
+spmisc01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_spmisc01) \
+ $(support_includes)
+endif
+
if TEST_spmountmgr01
sp_tests += spmountmgr01
sp_screens += spmountmgr01/spmountmgr01.scn
diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac
index db213b9be5..ffbd7330ce 100644
--- a/testsuites/sptests/configure.ac
+++ b/testsuites/sptests/configure.ac
@@ -194,6 +194,7 @@ RTEMS_TEST_CHECK([spintrcritical23])
RTEMS_TEST_CHECK([spintrcritical24])
RTEMS_TEST_CHECK([splinkersets01])
RTEMS_TEST_CHECK([spmkdir])
+RTEMS_TEST_CHECK([spmisc01])
RTEMS_TEST_CHECK([spmountmgr01])
RTEMS_TEST_CHECK([spmrsp01])
RTEMS_TEST_CHECK([spmsgq_err01])
diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c
new file mode 100644
index 0000000000..4ff6365eeb
--- /dev/null
+++ b/testsuites/sptests/spmisc01/init.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems.h>
+
+#include <tmacros.h>
+
+const char rtems_test_name[] = "SPMISC 1";
+
+RTEMS_DECLARE_GLOBAL_SYMBOL(a_global_symbol);
+
+RTEMS_DEFINE_GLOBAL_SYMBOL(a_global_symbol, 0xabc);
+
+static void Init(rtems_task_argument arg)
+{
+ TEST_BEGIN();
+ rtems_test_assert((uintptr_t)a_global_symbol == 0xabc);
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/spmisc01/spmisc01.doc b/testsuites/sptests/spmisc01/spmisc01.doc
new file mode 100644
index 0000000000..2654788f02
--- /dev/null
+++ b/testsuites/sptests/spmisc01/spmisc01.doc
@@ -0,0 +1,13 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: spbasedefs01
+
+directives:
+
+ - RTEMS_DECLARE_GLOBAL_SYMBOL()
+ - RTEMS_DEFINE_GLOBAL_SYMBOL()
+
+concepts:
+
+ - Ensure that RTEMS_* defines and macros defined by <rtems/score/basedefs.h>
+ available via <rtems.h> work as expected.
diff --git a/testsuites/sptests/spmisc01/spmisc01.scn b/testsuites/sptests/spmisc01/spmisc01.scn
new file mode 100644
index 0000000000..6e692dab8f
--- /dev/null
+++ b/testsuites/sptests/spmisc01/spmisc01.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST SPMISC 1 ***
+*** END OF TEST SPMISC 1 ***