[rtems commit] sapi: Add rtems_fatal_source_description()
Sebastian Huber
sebh at rtems.org
Mon Jan 7 15:03:42 UTC 2013
Module: rtems
Branch: master
Commit: f2f39b62a284afefbf8f1840255602162a9b2a01
Changeset: http://git.rtems.org/rtems/commit/?id=f2f39b62a284afefbf8f1840255602162a9b2a01
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Mon Jan 7 16:01:45 2013 +0100
sapi: Add rtems_fatal_source_description()
---
cpukit/sapi/Makefile.am | 2 +-
cpukit/sapi/include/rtems/fatal.h | 10 ++++
cpukit/sapi/src/fatalsrcdesc.c | 53 ++++++++++++++++++++
doc/user/fatal.t | 27 ++++++++++
testsuites/sptests/spinternalerror02/init.c | 21 +++++++-
.../spinternalerror02/spinternalerror02.scn | 13 +++++
6 files changed, 123 insertions(+), 3 deletions(-)
diff --git a/cpukit/sapi/Makefile.am b/cpukit/sapi/Makefile.am
index 232028e..f9fd4f9 100644
--- a/cpukit/sapi/Makefile.am
+++ b/cpukit/sapi/Makefile.am
@@ -38,7 +38,7 @@ libsapi_a_SOURCES = src/debug.c src/extension.c src/extensioncreate.c \
src/rtemsapi.c src/extensiondata.c src/getversionstring.c \
src/chainappendnotify.c src/chaingetnotify.c src/chaingetwait.c \
src/chainprependnotify.c src/rbheap.c src/interrdesc.c \
- src/fatal2.c
+ src/fatal2.c src/fatalsrcdesc.c
libsapi_a_CPPFLAGS = $(AM_CPPFLAGS)
include $(srcdir)/preinstall.am
diff --git a/cpukit/sapi/include/rtems/fatal.h b/cpukit/sapi/include/rtems/fatal.h
index 64344b3..46a7ab9 100644
--- a/cpukit/sapi/include/rtems/fatal.h
+++ b/cpukit/sapi/include/rtems/fatal.h
@@ -83,6 +83,16 @@ void rtems_fatal(
) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
/**
+ * @brief Returns a description for a fatal source.
+ *
+ * @param[in] source The fatal source.
+ *
+ * @return The fatal source description or "?" in case the passed fatal source
+ * is invalid.
+ */
+const char *rtems_fatal_source_description( rtems_fatal_source source );
+
+/**
* @brief Returns a description for an internal error code.
*
* @param[in] error The error code.
diff --git a/cpukit/sapi/src/fatalsrcdesc.c b/cpukit/sapi/src/fatalsrcdesc.c
new file mode 100644
index 0000000..fbe8485
--- /dev/null
+++ b/cpukit/sapi/src/fatalsrcdesc.c
@@ -0,0 +1,53 @@
+/**
+ * @file
+ *
+ * @brief Implementation of rtems_fatal_source_description()
+ *
+ * @ingroup ClassicFatal
+ */
+
+/*
+ * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems at 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.com/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include <rtems/fatal.h>
+
+static const char *const fatal_source_desc [] = {
+ "INTERNAL_ERROR_CORE",
+ "INTERNAL_ERROR_RTEMS_API",
+ "INTERNAL_ERROR_POSIX_API",
+ "RTEMS_FATAL_SOURCE_BDBUF",
+ "RTEMS_FATAL_SOURCE_APPLICATION",
+ "RTEMS_FATAL_SOURCE_EXIT",
+ "RTEMS_FATAL_SOURCE_BSP_GENERIC",
+ "RTEMS_FATAL_SOURCE_BSP_SPECIFIC",
+ "RTEMS_FATAL_SOURCE_ASSERT",
+ "RTEMS_FATAL_SOURCE_STACK_CHECKER",
+ "RTEMS_FATAL_SOURCE_EXCEPTION"
+};
+
+const char *rtems_fatal_source_description( rtems_fatal_source source )
+{
+ size_t i = source;
+ const char *desc = "?";
+
+ if ( i < RTEMS_ARRAY_SIZE( fatal_source_desc ) ) {
+ desc = fatal_source_desc [i];
+ }
+
+ return desc;
+}
diff --git a/doc/user/fatal.t b/doc/user/fatal.t
index 1b725e8..20faa64 100644
--- a/doc/user/fatal.t
+++ b/doc/user/fatal.t
@@ -230,6 +230,33 @@ Prints the exception frame via printk().
@c
@c
@page
+ at subsection FATAL_SOURCE_DESCRIPTION - Returns a description for a fatal source
+
+ at cindex fatal error
+
+ at subheading CALLING SEQUENCE:
+
+ at ifset is-C
+ at findex rtems_fatal_source_description
+ at example
+const char *rtems_fatal_source_description(
+ rtems_fatal_source source
+);
+ at end example
+ at end ifset
+
+ at subheading DIRECTIVE STATUS CODES
+
+The fatal source description or "?" in case the passed fatal source is invalid.
+
+ at subheading DESCRIPTION:
+
+Returns a description for a fatal source.
+
+ at c
+ at c
+ at c
+ at page
@subsection INTERNAL_ERROR_DESCRIPTION - Returns a description for an internal error code
@cindex fatal error
diff --git a/testsuites/sptests/spinternalerror02/init.c b/testsuites/sptests/spinternalerror02/init.c
index 79b36ca..8bfb650 100644
--- a/testsuites/sptests/spinternalerror02/init.c
+++ b/testsuites/sptests/spinternalerror02/init.c
@@ -20,7 +20,7 @@
#include <rtems.h>
-static void test(void)
+static void test_internal_error_description(void)
{
rtems_fatal_code error = 0;
const char *desc_last = NULL;
@@ -36,11 +36,28 @@ static void test(void)
rtems_test_assert( error - 3 == INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR );
}
+static void test_fatal_source_description(void)
+{
+ rtems_fatal_source source = 0;
+ const char *desc_last = NULL;
+ const char *desc;
+
+ do {
+ desc_last = desc;
+ desc = rtems_fatal_source_description( source );
+ ++source;
+ puts( desc );
+ } while ( desc != desc_last );
+
+ rtems_test_assert( source - 3 == RTEMS_FATAL_SOURCE_EXCEPTION );
+}
+
static void Init(rtems_task_argument arg)
{
puts("\n\n*** TEST SPINTERNALERROR 2 ***");
- test();
+ test_internal_error_description();
+ test_fatal_source_description();
puts("*** END OF TEST SPINTERNALERROR 2 ***");
diff --git a/testsuites/sptests/spinternalerror02/spinternalerror02.scn b/testsuites/sptests/spinternalerror02/spinternalerror02.scn
index 6fdbed6..9d7a722 100644
--- a/testsuites/sptests/spinternalerror02/spinternalerror02.scn
+++ b/testsuites/sptests/spinternalerror02/spinternalerror02.scn
@@ -26,4 +26,17 @@ INTERNAL_ERROR_NO_MEMORY_FOR_HEAP
INTERNAL_ERROR_CPU_ISR_INSTALL_VECTOR
?
?
+INTERNAL_ERROR_CORE
+INTERNAL_ERROR_RTEMS_API
+INTERNAL_ERROR_POSIX_API
+RTEMS_FATAL_SOURCE_BDBUF
+RTEMS_FATAL_SOURCE_APPLICATION
+RTEMS_FATAL_SOURCE_EXIT
+RTEMS_FATAL_SOURCE_BSP_GENERIC
+RTEMS_FATAL_SOURCE_BSP_SPECIFIC
+RTEMS_FATAL_SOURCE_ASSERT
+RTEMS_FATAL_SOURCE_STACK_CHECKER
+RTEMS_FATAL_SOURCE_EXCEPTION
+?
+?
*** END OF TEST SPINTERNALERROR 2 ***
More information about the vc
mailing list