[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