Mbed OS Reference
Loading...
Searching...
No Matches
memory_buffer_alloc.h
Go to the documentation of this file.
1/**
2 * \file memory_buffer_alloc.h
3 *
4 * \brief Buffer-based memory allocator
5 */
6/*
7 * Copyright The Mbed TLS Contributors
8 * SPDX-License-Identifier: Apache-2.0
9 *
10 * Licensed under the Apache License, Version 2.0 (the "License"); you may
11 * not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
13 *
14 * http://www.apache.org/licenses/LICENSE-2.0
15 *
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
18 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 */
22#ifndef MBEDTLS_MEMORY_BUFFER_ALLOC_H
23#define MBEDTLS_MEMORY_BUFFER_ALLOC_H
24
25#if !defined(MBEDTLS_CONFIG_FILE)
26#include "mbedtls/config.h"
27#else
28#include MBEDTLS_CONFIG_FILE
29#endif
30
31#include <stddef.h>
32
33/**
34 * \addtogroup mbedtls
35 * \{
36 * \defgroup mbedtls_memory_buffer_alloc_module Memory Buffer Alloc
37 * \{
38 */
39
40/**
41 * \name SECTION: Module settings
42 *
43 * The configuration options you can set for this module are in this section.
44 * Either change them in config.h or define them on the compiler command line.
45 * \{
46 */
47
48#if !defined(MBEDTLS_MEMORY_ALIGN_MULTIPLE)
49#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */
50#endif
51
52/** \} name SECTION: Module settings */
53
54#define MBEDTLS_MEMORY_VERIFY_NONE 0
55#define MBEDTLS_MEMORY_VERIFY_ALLOC (1 << 0)
56#define MBEDTLS_MEMORY_VERIFY_FREE (1 << 1)
57#define MBEDTLS_MEMORY_VERIFY_ALWAYS (MBEDTLS_MEMORY_VERIFY_ALLOC | MBEDTLS_MEMORY_VERIFY_FREE)
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62
63/**
64 * \brief Initialize use of stack-based memory allocator.
65 * The stack-based allocator does memory management inside the
66 * presented buffer and does not call calloc() and free().
67 * It sets the global mbedtls_calloc() and mbedtls_free() pointers
68 * to its own functions.
69 * (Provided mbedtls_calloc() and mbedtls_free() are thread-safe if
70 * MBEDTLS_THREADING_C is defined)
71 *
72 * \note This code is not optimized and provides a straight-forward
73 * implementation of a stack-based memory allocator.
74 *
75 * \param buf buffer to use as heap
76 * \param len size of the buffer
77 */
78void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len );
79
80/**
81 * \brief Free the mutex for thread-safety and clear remaining memory
82 */
84
85/**
86 * \brief Determine when the allocator should automatically verify the state
87 * of the entire chain of headers / meta-data.
88 * (Default: MBEDTLS_MEMORY_VERIFY_NONE)
89 *
90 * \param verify One of MBEDTLS_MEMORY_VERIFY_NONE, MBEDTLS_MEMORY_VERIFY_ALLOC,
91 * MBEDTLS_MEMORY_VERIFY_FREE or MBEDTLS_MEMORY_VERIFY_ALWAYS
92 */
94
95#if defined(MBEDTLS_MEMORY_DEBUG)
96/**
97 * \brief Print out the status of the allocated memory (primarily for use
98 * after a program should have de-allocated all memory)
99 * Prints out a list of 'still allocated' blocks and their stack
100 * trace if MBEDTLS_MEMORY_BACKTRACE is defined.
101 */
102void mbedtls_memory_buffer_alloc_status( void );
103
104/**
105 * \brief Get the peak heap usage so far
106 *
107 * \param max_used Peak number of bytes in use or committed. This
108 * includes bytes in allocated blocks too small to split
109 * into smaller blocks but larger than the requested size.
110 * \param max_blocks Peak number of blocks in use, including free and used
111 */
112void mbedtls_memory_buffer_alloc_max_get( size_t *max_used, size_t *max_blocks );
113
114/**
115 * \brief Reset peak statistics
116 */
117void mbedtls_memory_buffer_alloc_max_reset( void );
118
119/**
120 * \brief Get the current heap usage
121 *
122 * \param cur_used Current number of bytes in use or committed. This
123 * includes bytes in allocated blocks too small to split
124 * into smaller blocks but larger than the requested size.
125 * \param cur_blocks Current number of blocks in use, including free and used
126 */
127void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks );
128#endif /* MBEDTLS_MEMORY_DEBUG */
129
130/**
131 * \brief Verifies that all headers in the memory buffer are correct
132 * and contain sane values. Helps debug buffer-overflow errors.
133 *
134 * Prints out first failure if MBEDTLS_MEMORY_DEBUG is defined.
135 * Prints out full header information if MBEDTLS_MEMORY_DEBUG
136 * is defined. (Includes stack trace information for each block if
137 * MBEDTLS_MEMORY_BACKTRACE is defined as well).
138 *
139 * \return 0 if verified, 1 otherwise
140 */
142
143#if defined(MBEDTLS_SELF_TEST)
144/**
145 * \brief Checkup routine
146 *
147 * \return 0 if successful, or 1 if a test failed
148 */
149int mbedtls_memory_buffer_alloc_self_test( int verbose );
150#endif
151
152#ifdef __cplusplus
153}
154#endif
155
156/// \}
157/// \}
158
159#endif /* memory_buffer_alloc.h */
Configuration options (set of defines)
int mbedtls_memory_buffer_alloc_verify(void)
Verifies that all headers in the memory buffer are correct and contain sane values.
void mbedtls_memory_buffer_set_verify(int verify)
Determine when the allocator should automatically verify the state of the entire chain of headers / m...
void mbedtls_memory_buffer_alloc_init(unsigned char *buf, size_t len)
Initialize use of stack-based memory allocator.
void mbedtls_memory_buffer_alloc_free(void)
Free the mutex for thread-safety and clear remaining memory.