summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-08-28 14:59:16 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-08-28 15:22:27 +0200
commit807ea677b298ed13796d27c493c726c0bfe6e036 (patch)
tree8763ba36454360a2640943f59739f849398208ec
parentrecord: Add variants for critical sections (diff)
downloadrtems-807ea677b298ed13796d27c493c726c0bfe6e036.tar.bz2
score: Add RTEMS_RETURN_ADDRESS()
-rw-r--r--cpukit/include/rtems/score/basedefs.h13
-rw-r--r--testsuites/sptests/spmisc01/init.c7
2 files changed, 18 insertions, 2 deletions
diff --git a/cpukit/include/rtems/score/basedefs.h b/cpukit/include/rtems/score/basedefs.h
index 7a36c74e65..782958920c 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, 2018 embedded brains GmbH.
+ * Copyright (C) 2010, 2019 embedded brains GmbH
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -371,6 +371,17 @@
#define RTEMS_PREDICT_FALSE( _exp ) ( _exp )
#endif
+/**
+ * @brief Returns the return address of the current function.
+ *
+ * @return The return address.
+ */
+#if defined(__GNUC__)
+ #define RTEMS_RETURN_ADDRESS() __builtin_return_address( 0 )
+#else
+ #define RTEMS_RETURN_ADDRESS() NULL
+#endif
+
#if __cplusplus >= 201103L
#define RTEMS_STATIC_ASSERT(cond, msg) \
static_assert(cond, # msg)
diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c
index d179e1239c..9090069973 100644
--- a/testsuites/sptests/spmisc01/init.c
+++ b/testsuites/sptests/spmisc01/init.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 embedded brains GmbH. All rights reserved.
+ * Copyright (C) 2018, 2019 embedded brains GmbH
*
* embedded brains GmbH
* Dornierstr. 4
@@ -192,6 +192,8 @@ static int concat(void)
static void Init(rtems_task_argument arg)
{
+ void *p;
+
TEST_BEGIN();
rtems_test_assert(inline_func() == 7);
RTEMS_COMPILER_MEMORY_BARRIER();
@@ -260,6 +262,9 @@ static void Init(rtems_task_argument arg)
rtems_test_assert(true);
}
+ p = RTEMS_RETURN_ADDRESS();
+ (void) p;
+
TEST_END();
rtems_test_exit(0);
}