source: rtems/cpukit/libcsupport/include/rtems/libcsupport.h @ 26e04e2f

4.115
Last change on this file since 26e04e2f was 7bdb765, checked in by Sebastian Huber <sebastian.huber@…>, on 12/12/14 at 07:46:30

Add POSIX key value pairs to resource snapshot

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/**
2 * @file
3 *
4 * @brief Standard C Library Support
5 *
6 * This include file contains the information regarding the
7 * RTEMS specific support for the standard C library.
8 */
9
10/*
11 *  COPYRIGHT (c) 1989-2011.
12 *  On-Line Applications Research Corporation (OAR).
13 *
14 *  The license and distribution terms for this file may be
15 *  found in the file LICENSE in this distribution or at
16 *  http://www.rtems.org/license/LICENSE.
17 */
18
19#ifndef _RTEMS_RTEMS_LIBCSUPPORT_H
20#define _RTEMS_RTEMS_LIBCSUPPORT_H
21
22#include <sys/types.h>
23#include <stdint.h>
24
25#include <rtems/score/heap.h>
26#include <rtems/rtems/tasks.h>
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32/**
33 * @defgroup libcsupport Standard C Library Support
34 *
35 * @brief RTEMS Specific Support for the Standard C Library
36 *
37 */
38/**@{**/
39
40extern void malloc_dump(void);
41
42/**
43 * @brief Malloc walk.
44 */
45extern bool malloc_walk(int source, bool printf_enabled);
46
47/**
48 * @brief Set malloc heap pointer.
49 *
50 * This routine is primarily used for debugging.
51 */
52void malloc_set_heap_pointer(Heap_Control *new_heap);
53
54/**
55 * @brief Get malloc heap pointer.
56 *
57 * This routine is primarily used for debugging.
58 */
59Heap_Control *malloc_get_heap_pointer( void );
60extern void libc_init(void);
61extern int  host_errno(void);
62extern void fix_syscall_errno(void);
63
64/**
65 * @brief Get free malloc information.
66 *
67 * Find amount of free heap remaining
68 */
69extern size_t malloc_free_space(void);
70
71/**
72 * @brief Get malloc status information.
73 *
74 * Find amount of free heap remaining.
75 */
76extern int malloc_info(Heap_Information_block *the_info);
77
78/*
79 *  Prototypes required to install newlib reentrancy user extension
80 */
81bool newlib_create_hook(
82  rtems_tcb *current_task,
83  rtems_tcb *creating_task
84);
85
86#define __RTEMS_NEWLIB_BEGIN 0
87
88void newlib_terminate_hook(
89  rtems_tcb *current_task
90);
91
92#define RTEMS_NEWLIB_EXTENSION \
93{ \
94  newlib_create_hook,     /* rtems_task_create  */ \
95  0,                      /* rtems_task_start   */ \
96  0,                      /* rtems_task_restart */ \
97  0,                      /* rtems_task_delete  */ \
98  0,                      /* task_switch  */ \
99  __RTEMS_NEWLIB_BEGIN,   /* task_begin   */ \
100  0,                      /* task_exitted */ \
101  0,                      /* fatal        */ \
102  newlib_terminate_hook   /* thread terminate */ \
103}
104
105typedef struct {
106  uint32_t active_barriers;
107  uint32_t active_extensions;
108  uint32_t active_message_queues;
109  uint32_t active_partitions;
110  uint32_t active_periods;
111  uint32_t active_ports;
112  uint32_t active_regions;
113  uint32_t active_semaphores;
114  uint32_t active_tasks;
115  uint32_t active_timers;
116} rtems_resource_rtems_api;
117
118typedef struct {
119  uint32_t active_barriers;
120  uint32_t active_condition_variables;
121  uint32_t active_message_queues;
122  uint32_t active_message_queue_descriptors;
123  uint32_t active_mutexes;
124  uint32_t active_rwlocks;
125  uint32_t active_semaphores;
126  uint32_t active_spinlocks;
127  uint32_t active_threads;
128  uint32_t active_timers;
129} rtems_resource_posix_api;
130
131typedef struct {
132  Heap_Information_block workspace_info;
133  Heap_Information_block heap_info;
134  uint32_t active_posix_key_value_pairs;
135  uint32_t active_posix_keys;
136  rtems_resource_rtems_api rtems_api;
137  rtems_resource_posix_api posix_api;
138  int open_files;
139} rtems_resource_snapshot;
140
141/**
142 * @brief Tasks a snapshot of the resource usage of the system.
143 *
144 * @param[out] snapshot The snapshot of used resources.
145 *
146 * @see rtems_resource_snapshot_equal() and rtems_resource_snapshot_check().
147 *
148 * @code
149 * #include <assert.h>
150 *
151 * #include <rtems/libcsupport.h>
152 *
153 * void example(void)
154 * {
155 *   rtems_resource_snapshot before;
156 *
157 *   test_setup();
158 *   rtems_resource_snapshot_take(&before);
159 *   test();
160 *   assert(rtems_resource_snapshot_check(&before));
161 *   test_cleanup();
162 * }
163 * @endcode
164 */
165void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot);
166
167/**
168 * @brief Compares two resource snapshots for equality.
169 *
170 * @param[in] a One resource snapshot.
171 * @param[in] b Another resource snapshot.
172 *
173 * @retval true The resource snapshots are equal.
174 * @retval false Otherwise.
175 *
176 * @see rtems_resource_snapshot_take().
177 */
178bool rtems_resource_snapshot_equal(
179  const rtems_resource_snapshot *a,
180  const rtems_resource_snapshot *b
181);
182
183/**
184 * @brief Takes a new resource snapshot and checks that it is equal to the
185 * given resource snapshot.
186 *
187 * @param[in] snapshot The resource snapshot used for comparison with the new
188 * resource snapshot.
189 *
190 * @retval true The resource snapshots are equal.
191 * @retval false Otherwise.
192 *
193 * @see rtems_resource_snapshot_take().
194 */
195bool rtems_resource_snapshot_check(const rtems_resource_snapshot *snapshot);
196
197/** @} */
198
199#ifdef __cplusplus
200}
201#endif
202
203#endif
204/* end of include file */
Note: See TracBrowser for help on using the repository browser.