summaryrefslogtreecommitdiffstats
path: root/cpukit/libtest/testextension.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-01-14 09:08:18 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-03-26 11:29:58 +0100
commit6fe01e4b3d52b47c916bc4989e042255ff38e2ca (patch)
tree42b8d48366aeccc1bf26aa96311191947b13bcf3 /cpukit/libtest/testextension.c
parentscore: Add ARM CPU architecture group (diff)
downloadrtems-6fe01e4b3d52b47c916bc4989e042255ff38e2ca.tar.bz2
build: Move test support to librtemstest.a
One reason to move the test support into a dedicated library are the standard output __wrap_*() functions. They may conflict with application level wrappers. Update #3199.
Diffstat (limited to 'cpukit/libtest/testextension.c')
-rw-r--r--cpukit/libtest/testextension.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/cpukit/libtest/testextension.c b/cpukit/libtest/testextension.c
new file mode 100644
index 0000000000..be4759742e
--- /dev/null
+++ b/cpukit/libtest/testextension.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2014 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/test.h>
+#include <rtems/profiling.h>
+#include <rtems/bspIo.h>
+
+#if defined(RTEMS_PROFILING)
+static bool report_done;
+
+RTEMS_INTERRUPT_LOCK_DEFINE( static, report_lock, "test report" )
+#endif
+
+void rtems_test_fatal_extension(
+ rtems_fatal_source source,
+ bool always_set_to_false,
+ rtems_fatal_code code
+)
+{
+#if defined(RTEMS_PROFILING)
+ rtems_interrupt_lock_context lock_context;
+ rtems_printer printer;
+
+ rtems_print_printer_printk( &printer );
+
+ /*
+ * Ensures to report only once on SMP machines and ensures that the report is
+ * output completely.
+ */
+ rtems_interrupt_lock_acquire( &report_lock, &lock_context );
+
+ if ( !report_done ) {
+ report_done = true;
+
+ printk(
+ "\n*** PROFILING REPORT BEGIN %s ***\n",
+ rtems_test_name
+ );
+
+ rtems_profiling_report_xml(
+ rtems_test_name,
+ &printer,
+ 1,
+ " "
+ );
+
+ printk(
+ "*** PROFILING REPORT END %s ***\n",
+ rtems_test_name
+ );
+ }
+
+ rtems_interrupt_lock_release( &report_lock, &lock_context );
+#endif
+
+ (void) source;
+ (void) always_set_to_false;
+ (void) code;
+}