From eaa5ea84eaf1b3dab72d7a7a6578f0dc59e55396 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 20 Nov 2018 16:22:56 +0100 Subject: score: Introduce Move Heap_Information_block to separate header file to hide heap implementation details from . Update #3598. --- cpukit/headers.am | 1 + cpukit/include/rtems/rtems/types.h | 2 +- cpukit/include/rtems/score/heap.h | 119 +------------------------ cpukit/include/rtems/score/heapinfo.h | 158 ++++++++++++++++++++++++++++++++++ testsuites/libtests/stackchk/blow.c | 1 + 5 files changed, 162 insertions(+), 119 deletions(-) create mode 100644 cpukit/include/rtems/score/heapinfo.h diff --git a/cpukit/headers.am b/cpukit/headers.am index d74fe788f9..1dbd154e0e 100644 --- a/cpukit/headers.am +++ b/cpukit/headers.am @@ -318,6 +318,7 @@ include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h include_rtems_score_HEADERS += include/rtems/score/freechain.h include_rtems_score_HEADERS += include/rtems/score/heap.h include_rtems_score_HEADERS += include/rtems/score/heapimpl.h +include_rtems_score_HEADERS += include/rtems/score/heapinfo.h include_rtems_score_HEADERS += include/rtems/score/interr.h include_rtems_score_HEADERS += include/rtems/score/io.h include_rtems_score_HEADERS += include/rtems/score/isr.h diff --git a/cpukit/include/rtems/rtems/types.h b/cpukit/include/rtems/rtems/types.h index 9222f25cab..0eae24bb24 100644 --- a/cpukit/include/rtems/rtems/types.h +++ b/cpukit/include/rtems/rtems/types.h @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/cpukit/include/rtems/score/heap.h b/cpukit/include/rtems/score/heap.h index a69d890001..a9d75e7a86 100644 --- a/cpukit/include/rtems/score/heap.h +++ b/cpukit/include/rtems/score/heap.h @@ -19,6 +19,7 @@ #define _RTEMS_SCORE_HEAP_H #include +#include #ifdef __cplusplus extern "C" { @@ -248,95 +249,6 @@ struct Heap_Block { Heap_Block *prev; }; -/** - * @brief Run-time heap statistics. - * - * The value @a searches / @a allocs gives the mean number of searches per - * allocation, while @a max_search gives maximum number of searches ever - * performed on a single allocation call. - */ -typedef struct { - /** - * @brief Lifetime number of bytes allocated from this heap. - * - * This value is an integral multiple of the page size. - */ - uint64_t lifetime_allocated; - - /** - * @brief Lifetime number of bytes freed to this heap. - * - * This value is an integral multiple of the page size. - */ - uint64_t lifetime_freed; - - /** - * @brief Size of the allocatable area in bytes. - * - * This value is an integral multiple of the page size. - */ - uintptr_t size; - - /** - * @brief Current free size in bytes. - * - * This value is an integral multiple of the page size. - */ - uintptr_t free_size; - - /** - * @brief Minimum free size ever in bytes. - * - * This value is an integral multiple of the page size. - */ - uintptr_t min_free_size; - - /** - * @brief Current number of free blocks. - */ - uint32_t free_blocks; - - /** - * @brief Maximum number of free blocks ever. - */ - uint32_t max_free_blocks; - - /** - * @brief Current number of used blocks. - */ - uint32_t used_blocks; - - /** - * @brief Maximum number of blocks searched ever. - */ - uint32_t max_search; - - /** - * @brief Total number of searches. - */ - uint32_t searches; - - /** - * @brief Total number of successful allocations. - */ - uint32_t allocs; - - /** - * @brief Total number of failed allocations. - */ - uint32_t failed_allocs; - - /** - * @brief Total number of successful frees. - */ - uint32_t frees; - - /** - * @brief Total number of successful resizes. - */ - uint32_t resizes; -} Heap_Statistics; - /** * @brief Control block used to manage a heap. */ @@ -354,35 +266,6 @@ struct Heap_Control { #endif }; -/** - * @brief Information about blocks. - */ -typedef struct { - /** - * @brief Number of blocks of this type. - */ - uintptr_t number; - - /** - * @brief Largest block of this type. - */ - uintptr_t largest; - - /** - * @brief Total size of the blocks of this type. - */ - uintptr_t total; -} Heap_Information; - -/** - * @brief Information block returned by _Heap_Get_information(). - */ -typedef struct { - Heap_Information Free; - Heap_Information Used; - Heap_Statistics Stats; -} Heap_Information_block; - /** * @brief Heap area structure for table based heap initialization and * extension. diff --git a/cpukit/include/rtems/score/heapinfo.h b/cpukit/include/rtems/score/heapinfo.h new file mode 100644 index 0000000000..1f84387304 --- /dev/null +++ b/cpukit/include/rtems/score/heapinfo.h @@ -0,0 +1,158 @@ +/** + * @file + * + * @ingroup ScoreHeap + * + * @brief Heap Handler Information API + */ + +/* + * COPYRIGHT (c) 1989-2006. + * 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_SCORE_HEAPINFO_H +#define _RTEMS_SCORE_HEAPINFO_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup ScoreHeap + * + * @{ + */ + +/** + * @brief Run-time heap statistics. + * + * The value @a searches / @a allocs gives the mean number of searches per + * allocation, while @a max_search gives maximum number of searches ever + * performed on a single allocation call. + */ +typedef struct { + /** + * @brief Lifetime number of bytes allocated from this heap. + * + * This value is an integral multiple of the page size. + */ + uint64_t lifetime_allocated; + + /** + * @brief Lifetime number of bytes freed to this heap. + * + * This value is an integral multiple of the page size. + */ + uint64_t lifetime_freed; + + /** + * @brief Size of the allocatable area in bytes. + * + * This value is an integral multiple of the page size. + */ + uintptr_t size; + + /** + * @brief Current free size in bytes. + * + * This value is an integral multiple of the page size. + */ + uintptr_t free_size; + + /** + * @brief Minimum free size ever in bytes. + * + * This value is an integral multiple of the page size. + */ + uintptr_t min_free_size; + + /** + * @brief Current number of free blocks. + */ + uint32_t free_blocks; + + /** + * @brief Maximum number of free blocks ever. + */ + uint32_t max_free_blocks; + + /** + * @brief Current number of used blocks. + */ + uint32_t used_blocks; + + /** + * @brief Maximum number of blocks searched ever. + */ + uint32_t max_search; + + /** + * @brief Total number of searches. + */ + uint32_t searches; + + /** + * @brief Total number of successful allocations. + */ + uint32_t allocs; + + /** + * @brief Total number of failed allocations. + */ + uint32_t failed_allocs; + + /** + * @brief Total number of successful frees. + */ + uint32_t frees; + + /** + * @brief Total number of successful resizes. + */ + uint32_t resizes; +} Heap_Statistics; + +/** + * @brief Information about blocks. + */ +typedef struct { + /** + * @brief Number of blocks of this type. + */ + uintptr_t number; + + /** + * @brief Largest block of this type. + */ + uintptr_t largest; + + /** + * @brief Total size of the blocks of this type. + */ + uintptr_t total; +} Heap_Information; + +/** + * @brief Information block returned by _Heap_Get_information(). + */ +typedef struct { + Heap_Information Free; + Heap_Information Used; + Heap_Statistics Stats; +} Heap_Information_block; + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/testsuites/libtests/stackchk/blow.c b/testsuites/libtests/stackchk/blow.c index e424568fb8..15ce0abfa6 100644 --- a/testsuites/libtests/stackchk/blow.c +++ b/testsuites/libtests/stackchk/blow.c @@ -17,6 +17,7 @@ #include #include +#include #include /* forward declarations to avoid warnings */ -- cgit v1.2.3