diff options
-rw-r--r-- | cpukit/ChangeLog | 10 | ||||
-rw-r--r-- | cpukit/libcsupport/Makefile.am | 7 | ||||
-rw-r--r-- | cpukit/libcsupport/include/rtems/malloc.h | 14 | ||||
-rw-r--r-- | cpukit/libcsupport/src/free.c | 9 | ||||
-rw-r--r-- | cpukit/libcsupport/src/malloc.c | 17 | ||||
-rw-r--r-- | cpukit/libcsupport/src/malloc_boundary.c | 200 | ||||
-rw-r--r-- | cpukit/libcsupport/src/malloc_initialize.c | 9 | ||||
-rw-r--r-- | cpukit/libcsupport/src/realloc.c | 19 | ||||
-rw-r--r-- | cpukit/libcsupport/src/rtems_memalign.c | 11 |
9 files changed, 15 insertions, 281 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index a63bd21c94..f53aa0b714 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,13 @@ +2010-06-30 Joel Sherrill <joel.sherrilL@OARcorp.com> + + PR 1472/cpukit + * libcsupport/Makefile.am, libcsupport/include/rtems/malloc.h, + libcsupport/src/free.c, libcsupport/src/malloc.c, + libcsupport/src/malloc_initialize.c, libcsupport/src/realloc.c, + libcsupport/src/rtems_memalign.c: Remove malloc boundary code. It has + not been used since before 4.6 and is bitrotted. + * libcsupport/src/malloc_boundary.c: Removed. + 2010-06-30 Jennifer.Averett <Jennifer.Averett@OARcorp.com> * libcsupport/include/rtems/libio.h, libfs/Makefile.am: Added diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am index d2e60c7c2f..aa7416ed24 100644 --- a/cpukit/libcsupport/Makefile.am +++ b/cpukit/libcsupport/Makefile.am @@ -89,10 +89,9 @@ MALLOC_C_FILES = src/malloc_initialize.c src/calloc.c src/malloc.c \ src/_realloc_r.c src/__brk.c src/__sbrk.c src/mallocfreespace.c \ src/mallocinfo.c src/malloc_walk.c src/malloc_get_statistics.c \ src/malloc_report_statistics.c src/malloc_report_statistics_plugin.c \ - src/malloc_statistics_helpers.c src/malloc_boundary.c \ - src/posix_memalign.c src/rtems_memalign.c src/malloc_deferred.c \ - src/malloc_sbrk_helpers.c src/malloc_dirtier.c src/malloc_p.h \ - src/rtems_malloc.c + src/malloc_statistics_helpers.c src/posix_memalign.c \ + src/rtems_memalign.c src/malloc_deferred.c src/malloc_sbrk_helpers.c \ + src/malloc_dirtier.c src/malloc_p.h src/rtems_malloc.c PASSWORD_GROUP_C_FILES = src/getpwent.c diff --git a/cpukit/libcsupport/include/rtems/malloc.h b/cpukit/libcsupport/include/rtems/malloc.h index c9ce0f0fbf..adc32c2a58 100644 --- a/cpukit/libcsupport/include/rtems/malloc.h +++ b/cpukit/libcsupport/include/rtems/malloc.h @@ -56,20 +56,6 @@ extern rtems_malloc_statistics_functions_t extern rtems_malloc_statistics_functions_t *rtems_malloc_statistics_helpers; /* - * Malloc boundary support plugin - */ -typedef struct { - void (*initialize)(void); - uint32_t (*overhead)(void); - void (*at_malloc)(void *, size_t); - void (*at_free)(void *); - void (*at_realloc)(void *, size_t); -} rtems_malloc_boundary_functions_t; - -extern rtems_malloc_boundary_functions_t rtems_malloc_boundary_helpers_table; -extern rtems_malloc_boundary_functions_t *rtems_malloc_boundary_helpers; - -/* * Malloc Heap Extension (sbrk) plugin */ typedef struct { diff --git a/cpukit/libcsupport/src/free.c b/cpukit/libcsupport/src/free.c index c4725a5df7..c2dea1c361 100644 --- a/cpukit/libcsupport/src/free.c +++ b/cpukit/libcsupport/src/free.c @@ -35,21 +35,12 @@ void free( /* * Do not attempt to free memory if in a critical section or ISR. */ - if ( _System_state_Is_up(_System_state_Get()) && !malloc_is_system_state_OK() ) { malloc_deferred_free(ptr); return; } - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * If configured, check the boundary area - */ - if ( rtems_malloc_boundary_helpers ) - (*rtems_malloc_boundary_helpers->at_free)(ptr); - #endif - /* * If configured, update the statistics */ diff --git a/cpukit/libcsupport/src/malloc.c b/cpukit/libcsupport/src/malloc.c index ba5c8c0dcf..cf0fd158b4 100644 --- a/cpukit/libcsupport/src/malloc.c +++ b/cpukit/libcsupport/src/malloc.c @@ -55,15 +55,6 @@ void *malloc( _Protected_heap_Walk( RTEMS_Malloc_Heap, 0, false ); #endif - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * If the support for a boundary area at the end of the heap - * block allocated is turned on, then adjust the size. - */ - if (rtems_malloc_boundary_helpers) - size += (*rtems_malloc_boundary_helpers->overhead)(); - #endif - /* * Try to give a segment in the current heap if there is not * enough space then try to grow the heap. @@ -93,14 +84,6 @@ void *malloc( if ( rtems_malloc_statistics_helpers ) (*rtems_malloc_statistics_helpers->at_malloc)(return_this); - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * If configured, set the boundary area - */ - if (rtems_malloc_boundary_helpers) - (*rtems_malloc_boundary_helpers->at_malloc)(return_this, size); - #endif - return return_this; } diff --git a/cpukit/libcsupport/src/malloc_boundary.c b/cpukit/libcsupport/src/malloc_boundary.c deleted file mode 100644 index fd80774747..0000000000 --- a/cpukit/libcsupport/src/malloc_boundary.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * RTEMS Malloc Block Boundary Integrity Checker - * - * WARNING!!! WARNING!!! WARNING!!! WARNING!!! - * WARNING!!! WARNING!!! WARNING!!! WARNING!!! - * - * This file is built but never called. It is a first - * step in reintegrating this functionality. - * This code was disabled for a LONG time in malloc.c. - * This is a restructured and slightly modified version - * that should be able to be configured as a plugin BUT - * it has not been tested recently. When it has been - * tested again, please remove this comment. - * - * JOEL: I have not analyzed this code in terms of - * the heap changes post 4.6. It is possible - * that that way the boundary area is carved - * off breaks the alignment. - * - * WARNING!!! WARNING!!! WARNING!!! WARNING!!! - * WARNING!!! WARNING!!! WARNING!!! WARNING!!! - * - * COPYRIGHT (c) 1989-2007. - * 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.com/license/LICENSE. - * - * $Id$ - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include "malloc_p.h" - -#include <stdio.h> - -/* only supported on newlib targets */ -#ifdef RTEMS_NEWLIB -/* not completely implemented so not included in coverage analysis */ -#ifndef RTEMS_COVERAGE - -#define SENTINELSIZE 12 -#define SENTINEL "\xD1\xAC\xB2\xF1" "BITE ME" -#define CALLCHAINSIZE 5 - -struct mallocNode { - struct mallocNode *back; - struct mallocNode *forw; - int callChain[CALLCHAINSIZE]; - size_t size; - void *memory; -}; - -struct mallocNode mallocNodeHead; - -static void rtems_malloc_boundary_initialize(void) -{ - mallocNodeHead.back = &mallocNodeHead; - mallocNodeHead.forw = &mallocNodeHead; -} - -static uint32_t rtems_malloc_boundary_overhead(void) -{ - return sizeof(struct mallocNode) + SENTINELSIZE; -} - -static void rtems_malloc_boundary_at_malloc( - void *pointer, - size_t size -) -{ - void *return_this; - struct mallocNode *mp = (struct mallocNode *)pointer; - intptr_t *fp, *nfp; - int i; - - _RTEMS_Lock_allocator(); - mp->memory = mp + 1; - return_this = mp->memory; - mp->size = size - (sizeof(struct mallocNode) + SENTINELSIZE); - fp = (intptr_t *)&size - 2; - for (i = 0 ; i < CALLCHAINSIZE ; i++) { - mp->callChain[i] = fp[1]; - nfp = (intptr_t *)(fp[0]); - if((nfp <= fp) || (nfp > (intptr_t *)(INT32_C(0x1000000) /* 1 << 24 */))) - break; - fp = nfp; - } - while (i < CALLCHAINSIZE) - mp->callChain[i++] = 0; - memcpy((char *)mp->memory + mp->size, SENTINEL, SENTINELSIZE); - mp->forw = mallocNodeHead.forw; - mp->back = &mallocNodeHead; - mallocNodeHead.forw->back = mp; - mallocNodeHead.forw = mp; - _RTEMS_Unlock_allocator(); -} - -static void reportMallocError(const char *msg, struct mallocNode *mp); - -static void rtems_malloc_boundary_at_free( - void *pointer -) -{ - struct mallocNode *mp = (struct mallocNode *)pointer - 1; - struct mallocNode *mp1; - - _RTEMS_Lock_allocator(); - if ((mp->memory != (mp + 1)) || - (memcmp((char *)mp->memory + mp->size, SENTINEL, SENTINELSIZE) != 0)) - reportMallocError("Freeing with inconsistent pointer/sentinel", mp); - mp1 = mallocNodeHead.forw; - while (mp1 != &mallocNodeHead) { - if (mp1 == mp) - break; - mp1 = mp1->forw; - } - if (mp1 != mp) - reportMallocError("Freeing, but not on allocated list", mp); - mp->forw->back = mp->back; - mp->back->forw = mp->forw; - mp->back = mp->forw = NULL; - pointer = mp; - _RTEMS_Unlock_allocator(); -} - -static void rtems_malloc_boundary_at_realloc( - void *pointer __attribute__((unused)), - size_t size __attribute__((unused)) -) -{ - /* this needs to be implemented */ -} - -/* - * Malloc boundary support plugin - */ -rtems_malloc_boundary_functions_t rtems_malloc_boundary_functions_table = { - rtems_malloc_boundary_initialize, - rtems_malloc_boundary_overhead, - rtems_malloc_boundary_at_malloc, - rtems_malloc_boundary_at_free, - rtems_malloc_boundary_at_realloc, -}; - -rtems_malloc_boundary_functions_t *rtems_malloc_boundary_helpers = NULL; -/* &rtems_malloc_boundary_functions_table; */ - -static void reportMallocError(const char *msg, struct mallocNode *mp) -{ - unsigned char *sp = (unsigned char *)mp->memory + mp->size; - int i, ind = 0; - static char cbuf[500]; - ind += sprintf(cbuf+ind, "Malloc Error: %s\n", msg); - if ((mp->forw->back != mp) || (mp->back->forw != mp)) - ind += sprintf(cbuf+ind, - "mp:%p mp->forw:%p mp->forw->back:%p " - "mp->back:%p mp->back->forw:%p\n", - mp, mp->forw, mp->forw->back, mp->back, mp->back->forw); - if (mp->memory != (mp + 1)) - ind += sprintf(cbuf+ind, "mp+1:%p ", mp + 1); - ind += sprintf(cbuf+ind, "mp->memory:%p mp->size:%zi\n", mp->memory, mp->size); - if (memcmp((char *)mp->memory + mp->size, SENTINEL, SENTINELSIZE) != 0) { - ind += sprintf(cbuf+ind, "mp->sentinel: "); - for (i = 0 ; i < SENTINELSIZE ; i++) - ind += sprintf(cbuf+ind, " 0x%x", sp[i]); - ind += sprintf(cbuf+ind, "\n"); - } - ind += sprintf(cbuf+ind, "Call chain:"); - for (i = 0 ; i < CALLCHAINSIZE ; i++) { - if (mp->callChain[i] == 0) - break; - ind += sprintf(cbuf+ind, " 0x%x", mp->callChain[i]); - } - printk("\n\n%s\n\n", cbuf); -} - -#if UNUSED -static void checkMallocArena(void) -{ - struct mallocNode *mp; - - _RTEMS_Lock_allocator(); - for ( mp = mallocNodeHead.forw; mp != &mallocNodeHead ; mp = mp->forw ) { - if ((mp->forw->back != mp) || (mp->back->forw != mp)) - reportMallocError("Pointers mangled", mp); - if ((mp->memory != (mp + 1)) || - (memcmp((char *)mp->memory + mp->size, SENTINEL, SENTINELSIZE) != 0)) - reportMallocError("Inconsistent pointer/sentinel", mp); - } - _RTEMS_Unlock_allocator(); -} -#endif - -#endif -#endif diff --git a/cpukit/libcsupport/src/malloc_initialize.c b/cpukit/libcsupport/src/malloc_initialize.c index cec40f0df1..461fb432bf 100644 --- a/cpukit/libcsupport/src/malloc_initialize.c +++ b/cpukit/libcsupport/src/malloc_initialize.c @@ -43,15 +43,6 @@ void RTEMS_Malloc_Initialize( size_t sbrk_amount ) { - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * If configured, initialize the boundary support - */ - if ( rtems_malloc_boundary_helpers != NULL ) { - (*rtems_malloc_boundary_helpers->initialize)(); - } - #endif - /* * If configured, initialize the statistics support */ diff --git a/cpukit/libcsupport/src/realloc.c b/cpukit/libcsupport/src/realloc.c index 0f8ec1ee84..3689f32e61 100644 --- a/cpukit/libcsupport/src/realloc.c +++ b/cpukit/libcsupport/src/realloc.c @@ -27,7 +27,6 @@ void *realloc( { uintptr_t old_size; char *new_area; - uintptr_t resize; MSBUMP(realloc_calls, 1); @@ -60,23 +59,9 @@ void *realloc( } /* - * If block boundary integrity checking is enabled, then - * we need to account for the boundary memory again. + * Now resize it. */ - resize = size; - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - if (rtems_malloc_boundary_helpers) - resize += (*rtems_malloc_boundary_helpers->overhead)(); - #endif - - if ( _Protected_heap_Resize_block( RTEMS_Malloc_Heap, ptr, resize ) ) { - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * Successful resize. Update the boundary on the same block. - */ - if (rtems_malloc_boundary_helpers) - (*rtems_malloc_boundary_helpers->at_realloc)(ptr, resize); - #endif + if ( _Protected_heap_Resize_block( RTEMS_Malloc_Heap, ptr, size ) ) { return ptr; } diff --git a/cpukit/libcsupport/src/rtems_memalign.c b/cpukit/libcsupport/src/rtems_memalign.c index 467f270b75..9f409fe180 100644 --- a/cpukit/libcsupport/src/rtems_memalign.c +++ b/cpukit/libcsupport/src/rtems_memalign.c @@ -45,24 +45,13 @@ int rtems_memalign( return EINVAL; /* - * * If some free's have been deferred, then do them now. */ malloc_deferred_frees_process(); - #if defined(RTEMS_MALLOC_BOUNDARY_HELPERS) - /* - * If the support for a boundary area at the end of the heap - * block allocated is turned on, then adjust the size. - */ - if (rtems_malloc_boundary_helpers) - size += (*rtems_malloc_boundary_helpers->overhead)(); - #endif - /* * Perform the aligned allocation requested */ - return_this = _Protected_heap_Allocate_aligned( RTEMS_Malloc_Heap, size, |