summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/libcsupport.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/rtems/libcsupport.h')
-rw-r--r--cpukit/include/rtems/libcsupport.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/cpukit/include/rtems/libcsupport.h b/cpukit/include/rtems/libcsupport.h
new file mode 100644
index 0000000000..51607f9ea1
--- /dev/null
+++ b/cpukit/include/rtems/libcsupport.h
@@ -0,0 +1,193 @@
+/**
+ * @file
+ *
+ * @brief Standard C Library Support
+ *
+ * This include file contains the information regarding the
+ * RTEMS specific support for the standard C library.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2011.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * 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.
+ */
+
+#ifndef _RTEMS_RTEMS_LIBCSUPPORT_H
+#define _RTEMS_RTEMS_LIBCSUPPORT_H
+
+#include <sys/types.h>
+#include <stdint.h>
+
+#include <rtems/score/heap.h>
+#include <rtems/rtems/tasks.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup libcsupport Standard C Library Support
+ *
+ * @brief RTEMS Specific Support for the Standard C Library
+ *
+ */
+/**@{**/
+
+extern void malloc_dump(void);
+
+/**
+ * @brief Malloc walk.
+ */
+extern bool malloc_walk(int source, bool printf_enabled);
+
+/**
+ * @brief Set malloc heap pointer.
+ *
+ * This routine is primarily used for debugging.
+ */
+void malloc_set_heap_pointer(Heap_Control *new_heap);
+
+/**
+ * @brief Get malloc heap pointer.
+ *
+ * This routine is primarily used for debugging.
+ */
+Heap_Control *malloc_get_heap_pointer( void );
+
+/**
+ * @brief Get free malloc information.
+ *
+ * Find amount of free heap remaining
+ */
+extern size_t malloc_free_space(void);
+
+/**
+ * @brief Get malloc status information.
+ *
+ * Find amount of free heap remaining.
+ */
+extern int malloc_info(Heap_Information_block *the_info);
+
+/*
+ * Prototypes required to install newlib reentrancy user extension
+ */
+bool newlib_create_hook(
+ rtems_tcb *current_task,
+ rtems_tcb *creating_task
+);
+
+void newlib_terminate_hook(
+ rtems_tcb *current_task
+);
+
+#define RTEMS_NEWLIB_EXTENSION \
+{ \
+ newlib_create_hook, /* rtems_task_create */ \
+ 0, /* rtems_task_start */ \
+ 0, /* rtems_task_restart */ \
+ 0, /* rtems_task_delete */ \
+ 0, /* task_switch */ \
+ 0, /* task_begin */ \
+ 0, /* task_exitted */ \
+ 0, /* fatal */ \
+ newlib_terminate_hook /* thread terminate */ \
+}
+
+typedef struct {
+ uint32_t active_barriers;
+ uint32_t active_extensions;
+ uint32_t active_message_queues;
+ uint32_t active_partitions;
+ uint32_t active_periods;
+ uint32_t active_ports;
+ uint32_t active_regions;
+ uint32_t active_semaphores;
+ uint32_t active_tasks;
+ uint32_t active_timers;
+} rtems_resource_rtems_api;
+
+typedef struct {
+ uint32_t active_message_queues;
+ uint32_t active_semaphores;
+ uint32_t active_threads;
+ uint32_t active_timers;
+} rtems_resource_posix_api;
+
+typedef struct {
+ Heap_Information_block workspace_info;
+ Heap_Information_block heap_info;
+ uint32_t active_posix_key_value_pairs;
+ uint32_t active_posix_keys;
+ rtems_resource_rtems_api rtems_api;
+ rtems_resource_posix_api posix_api;
+ int open_files;
+} rtems_resource_snapshot;
+
+/**
+ * @brief Tasks a snapshot of the resource usage of the system.
+ *
+ * @param[out] snapshot The snapshot of used resources.
+ *
+ * @see rtems_resource_snapshot_equal() and rtems_resource_snapshot_check().
+ *
+ * @code
+ * #include <assert.h>
+ *
+ * #include <rtems/libcsupport.h>
+ *
+ * void example(void)
+ * {
+ * rtems_resource_snapshot before;
+ *
+ * test_setup();
+ * rtems_resource_snapshot_take(&before);
+ * test();
+ * assert(rtems_resource_snapshot_check(&before));
+ * test_cleanup();
+ * }
+ * @endcode
+ */
+void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot);
+
+/**
+ * @brief Compares two resource snapshots for equality.
+ *
+ * @param[in] a One resource snapshot.
+ * @param[in] b Another resource snapshot.
+ *
+ * @retval true The resource snapshots are equal.
+ * @retval false Otherwise.
+ *
+ * @see rtems_resource_snapshot_take().
+ */
+bool rtems_resource_snapshot_equal(
+ const rtems_resource_snapshot *a,
+ const rtems_resource_snapshot *b
+);
+
+/**
+ * @brief Takes a new resource snapshot and checks that it is equal to the
+ * given resource snapshot.
+ *
+ * @param[in] snapshot The resource snapshot used for comparison with the new
+ * resource snapshot.
+ *
+ * @retval true The resource snapshots are equal.
+ * @retval false Otherwise.
+ *
+ * @see rtems_resource_snapshot_take().
+ */
+bool rtems_resource_snapshot_check(const rtems_resource_snapshot *snapshot);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */