forked from Imagelibrary/rtems
Changed base implementation of protected heap allocations to use _Heap_Allocate_aligned_with_boundary().
This commit is contained in:
@@ -1,3 +1,14 @@
|
|||||||
|
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
|
* score/include/rtems/score/protectedheap.h,
|
||||||
|
score/src/pheapallocate.c: Changed base implementation of protected
|
||||||
|
heap allocations to use _Heap_Allocate_aligned_with_boundary().
|
||||||
|
* libcsupport/include/rtems/malloc.h, libcsupport/src/rtems_malloc.c:
|
||||||
|
Check system state. Process deferred frees. Renamed rtems_malloc() in
|
||||||
|
rtems_heap_allocate_aligned_with_boundary().
|
||||||
|
* score/src/pheapallocatealigned.c: Removed file.
|
||||||
|
* score/Makefile.am: Update for removed file.
|
||||||
|
|
||||||
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
* libblock/include/rtems/bdbuf.h: Documentation.
|
* libblock/include/rtems/bdbuf.h: Documentation.
|
||||||
|
|||||||
@@ -169,7 +169,11 @@ int rtems_memalign(
|
|||||||
* @return A pointer to the begin of the allocated memory area, or @c NULL if
|
* @return A pointer to the begin of the allocated memory area, or @c NULL if
|
||||||
* no memory is available or the parameters are inconsistent.
|
* no memory is available or the parameters are inconsistent.
|
||||||
*/
|
*/
|
||||||
void *rtems_malloc(size_t size, uintptr_t alignment, uintptr_t boundary);
|
void *rtems_heap_allocate_aligned_with_boundary(
|
||||||
|
size_t size,
|
||||||
|
uintptr_t alignment,
|
||||||
|
uintptr_t boundary
|
||||||
|
);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,23 +28,29 @@
|
|||||||
#ifdef RTEMS_NEWLIB
|
#ifdef RTEMS_NEWLIB
|
||||||
#include "malloc_p.h"
|
#include "malloc_p.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
void *rtems_heap_allocate_aligned_with_boundary(
|
||||||
#include <errno.h>
|
size_t size,
|
||||||
|
uintptr_t alignment,
|
||||||
void *rtems_malloc(size_t size, uintptr_t alignment, uintptr_t boundary)
|
uintptr_t boundary
|
||||||
|
)
|
||||||
{
|
{
|
||||||
void *p = NULL;
|
if (
|
||||||
|
_System_state_Is_up( _System_state_Get() )
|
||||||
|
&& !malloc_is_system_state_OK()
|
||||||
|
) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
_RTEMS_Lock_allocator();
|
malloc_deferred_frees_process();
|
||||||
p = _Heap_Allocate_aligned_with_boundary(
|
|
||||||
RTEMS_Malloc_Heap,
|
|
||||||
size,
|
|
||||||
alignment,
|
|
||||||
boundary
|
|
||||||
);
|
|
||||||
_RTEMS_Unlock_allocator();
|
|
||||||
|
|
||||||
return p;
|
/* FIXME: Statistics, boundary checks */
|
||||||
|
|
||||||
|
return _Protected_heap_Allocate_aligned_with_boundary(
|
||||||
|
RTEMS_Malloc_Heap,
|
||||||
|
size,
|
||||||
|
alignment,
|
||||||
|
boundary
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ libscore_a_SOURCES += src/objectallocatebyindex.c src/objectgetbyindex.c
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
## PROTECTED_HEAP_C_FILES
|
## PROTECTED_HEAP_C_FILES
|
||||||
libscore_a_SOURCES += src/pheapallocatealigned.c src/pheapallocate.c \
|
libscore_a_SOURCES += src/pheapallocate.c \
|
||||||
src/pheapextend.c src/pheapfree.c src/pheapgetsize.c \
|
src/pheapextend.c src/pheapfree.c src/pheapgetsize.c \
|
||||||
src/pheapgetblocksize.c src/pheapgetfreeinfo.c src/pheapgetinfo.c \
|
src/pheapgetblocksize.c src/pheapgetfreeinfo.c src/pheapgetinfo.c \
|
||||||
src/pheapinit.c src/pheapresizeblock.c src/pheapwalk.c
|
src/pheapinit.c src/pheapresizeblock.c src/pheapwalk.c
|
||||||
|
|||||||
@@ -66,19 +66,37 @@ bool _Protected_heap_Extend(
|
|||||||
/**
|
/**
|
||||||
* @brief See _Heap_Allocate_aligned_with_boundary().
|
* @brief See _Heap_Allocate_aligned_with_boundary().
|
||||||
*/
|
*/
|
||||||
void *_Protected_heap_Allocate(
|
void *_Protected_heap_Allocate_aligned_with_boundary(
|
||||||
Heap_Control *heap,
|
Heap_Control *heap,
|
||||||
uintptr_t size
|
uintptr_t size,
|
||||||
|
uintptr_t alignment,
|
||||||
|
uintptr_t boundary
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief See _Heap_Allocate_aligned_with_boundary().
|
* @brief See _Heap_Allocate_aligned_with_boundary() with boundary equals zero.
|
||||||
*/
|
*/
|
||||||
void *_Protected_heap_Allocate_aligned(
|
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate_aligned(
|
||||||
Heap_Control *heap,
|
Heap_Control *heap,
|
||||||
uintptr_t size,
|
uintptr_t size,
|
||||||
uintptr_t alignment
|
uintptr_t alignment
|
||||||
);
|
)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
_Protected_heap_Allocate_aligned_with_boundary( heap, size, alignment, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief See _Heap_Allocate_aligned_with_boundary() with alignment and
|
||||||
|
* boundary equals zero.
|
||||||
|
*/
|
||||||
|
RTEMS_INLINE_ROUTINE void *_Protected_heap_Allocate(
|
||||||
|
Heap_Control *heap,
|
||||||
|
uintptr_t size
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return _Protected_heap_Allocate_aligned_with_boundary( heap, size, 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief See _Heap_Size_of_alloc_area().
|
* @brief See _Heap_Size_of_alloc_area().
|
||||||
|
|||||||
@@ -24,16 +24,23 @@
|
|||||||
#include <rtems/system.h>
|
#include <rtems/system.h>
|
||||||
#include <rtems/score/protectedheap.h>
|
#include <rtems/score/protectedheap.h>
|
||||||
|
|
||||||
void *_Protected_heap_Allocate(
|
void *_Protected_heap_Allocate_aligned_with_boundary(
|
||||||
Heap_Control *the_heap,
|
Heap_Control *heap,
|
||||||
uintptr_t size
|
uintptr_t size,
|
||||||
|
uintptr_t alignment,
|
||||||
|
uintptr_t boundary
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
_RTEMS_Lock_allocator();
|
_RTEMS_Lock_allocator();
|
||||||
p = _Heap_Allocate( the_heap, size );
|
p = _Heap_Allocate_aligned_with_boundary(
|
||||||
|
heap,
|
||||||
|
size,
|
||||||
|
alignment,
|
||||||
|
boundary
|
||||||
|
);
|
||||||
_RTEMS_Unlock_allocator();
|
_RTEMS_Unlock_allocator();
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file
|
|
||||||
*
|
|
||||||
* @ingroup ScoreProtHeap
|
|
||||||
*
|
|
||||||
* @brief Protected Heap Handler implementation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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 <rtems/system.h>
|
|
||||||
#include <rtems/score/protectedheap.h>
|
|
||||||
|
|
||||||
void *_Protected_heap_Allocate_aligned(
|
|
||||||
Heap_Control *the_heap,
|
|
||||||
uintptr_t size,
|
|
||||||
uintptr_t alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
_RTEMS_Lock_allocator();
|
|
||||||
p = _Heap_Allocate_aligned( the_heap, size, alignment );
|
|
||||||
_RTEMS_Unlock_allocator();
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user