Commit Graph

27 Commits

Author SHA1 Message Date
Joel Sherrill
70432fcff2 cpukit/libcsupport/src/[g-r]*: Change license to BSD-2
Updates #3053.
2022-04-01 10:02:30 -05:00
Sebastian Huber
2c5199bb04 Return NULL for zero size allocations
In POSIX, zero size memory allocations are implementation-defined
behaviour.  The implementation has two options:

https://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html

https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html

Linux and FreeBSD return a unique pointer for zero size memory
allocations.   Return NULL on RTEMS to more likely catch the use of a
zero size memory area by erroneous applications.

Update #4390.
2021-05-06 08:03:58 +02:00
Sebastian Huber
d692c62dfb Make zero size allocation result consistent
The zero size allocations had no consistent behaviour in RTEMS.  For
example, malloc( 0 ) returned NULL and posix_memalign( &p, align, 0 )
returned in p a unique pointer (or NULL if no memory is available).  In
POSIX, zero size memory allocations are implementation-defined
behaviour.  The implementation has two options:

https://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html

https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html

Linux and FreeBSD return a unique pointer for zero size memory
allocations.   Use this approach for RTEMS as well throughout the memory
allocation directives

Close #4390.
2021-05-04 09:37:06 +02:00
Sebastian Huber
d8a5e140ec libcsupport: Move rtems_calloc()
Move rtems_calloc() since it only depends on rtems_malloc().  This may
make it easier to customize the heap allocator.

Change licence to BSD-2-Clause according to file history.

Update #3053.
2021-04-20 19:18:23 +02:00
Sebastian Huber
7746b0def9 malloc: Make deferred free support optional
Only include the deferred free support if free() is actually used by the
application.

The free() implementation in RTEMS supports that allocated memory is
freed in interrupt context.  Since the heap is protected by a mutex, the
frees issued in interrupt context cannot immediately be freed to the
heap, instead they are placed on a deferred free list.  This list is
emptied by the core allocation function
rtems_heap_allocate_aligned_with_boundary().  This adds a dependency to
free() in rtems_heap_allocate_aligned_with_boundary(). In order to
better support applications which only allocate memory and never free
it, this dependency should be avoided.  Provide a weak default
implementation of _Malloc_Process_deferred_frees() for
rtems_heap_allocate_aligned_with_boundary().  In the free() module
provide the strong implementation.

Close #4032.
2020-07-24 07:14:02 +02:00
Sebastian Huber
80cf60efec Canonicalize config.h include
Use the following variant which was already used by most source files:

  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
2020-04-16 07:30:00 +02:00
Sebastian Huber
6efc831f0f Add rtems_malloc() and rtems_calloc()
Close #3583.
2018-11-12 13:26:22 +01:00
Sebastian Huber
059529e685 score: Add debug support to chains
This helps to detect

 * double insert, append, prepend errors, and
 * get from empty chain errors.
2016-07-22 09:13:07 +02:00
Sebastian Huber
648a5df4ce malloc: Avoid memory leaks during task delete
Call _Malloc_Process_deferred_frees() owning the allocator lock to
prevent deletion of the executing thread while doing the deferred frees.
2016-04-06 13:52:25 +02:00
Sebastian Huber
d7e68c96b4 malloc: Fix early realloc() allocation 2016-04-06 13:50:16 +02:00
Sebastian Huber
75518fb782 malloc: Fix function definition
Close #2617.
2016-03-01 07:34:56 +01:00
Sebastian Huber
9d1f394345 malloc: Add _Malloc_System_state()
Replace malloc_is_system_state_OK() with _Malloc_System_state() to allow
early allocations, e.g. in bsp_start().  Here the _Thread_Executing is
NULL, thus an _API_Mutex_Lock() would lead to a NULL pointer access.

Move malloc() support code to general case
rtems_heap_allocate_aligned_with_boundary().  Use
rtems_heap_allocate_aligned_with_boundary() to avoid duplicated code.
2016-02-25 11:35:54 +01:00
Sebastian Huber
839d0a74e5 malloc: Use dedicated lock for deferred frees 2016-02-25 09:10:53 +01:00
Sebastian Huber
287a70f935 malloc: Clean up "malloc_p.h" header file 2016-02-25 09:06:07 +01:00
Sebastian Huber
0273349594 libcsupport: malloc_is_system_state_OK()
Move system state check to malloc_is_system_state_OK().
2014-11-25 16:08:16 +01:00
Chris Johns
c49985691f Change all references of rtems.com to rtems.org. 2014-03-21 08:10:47 +11:00
Sebastian Huber
0c3edbf0cf Include missing <rtems/score/threaddispatch.h> 2013-07-26 11:55:47 +02:00
Sebastian Huber
e7ce41bb6d libcsupport: Do not use _ISR_Nest_level
The _Thread_Dispatch_is_enabled() is false if _ISR_Nest_level is not
equal to zero.
2013-07-18 09:58:58 +02:00
Sebastian Huber
49cdf40afa score: Add and use _Thread_Dispatch_is_enabled()
Delete _Thread_Dispatch_in_critical_section() and
_Thread_Is_dispatching_enabled().
2013-06-14 16:26:06 +02:00
Alex Ivanov
c9bb60a94c libcsupport: GCI Doxygen Task #7
http://www.google-melange.com/gci/task/view/google/gci2012/7975223
2012-12-11 06:49:45 -05:00
Sebastian Huber
3b978e190d libcsupport: malloc_deferred_frees_initialize()
Remove this function and statically initialize RTEMS_Malloc_GC_list.
2012-10-25 14:54:05 +02:00
Joel Sherrill
9b4422a251 Remove All CVS Id Strings Possible Using a Script
Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines
  next to each other after Id string line removed.
+ remove entire comment blocks which only exited to
  contain CVS Ids
+ If the processing left a blank line at the top of
  a file, it was removed.
2012-05-11 08:44:13 -05:00
Jennifer Averett
d7c388321a 2011-04-21 Jennifer Averett <Jennifer.Averett@OARcorp.com
PR 1777/cpukit
	* libcsupport/src/malloc_deferred.c, libcsupport/src/realloc.c,
	score/Makefile.am, score/cpu/lm32/irq.c, score/cpu/nios2/irq.c,
	score/include/rtems/score/coremutex.h,
	score/include/rtems/score/thread.h,
	score/inline/rtems/score/thread.inl, score/src/heapfree.c,
	score/src/pheapwalk.c, score/src/smp.c, score/src/threaddispatch.c:
	Consolidated access to _Thread_Dispatch_disable_level.
	* score/src/threaddisabledispatch.c, score/src/threadenabledispatch.c:
	New files.
2011-04-21 19:05:15 +00:00
Ralf Corsepius
4088d01d9f Convert using "bool". 2008-09-01 11:42:19 +00:00
Chris Johns
72d2ec4da4 2008-07-03 Chris Johns <chrisj@rtems.org>
* cpukit/libcsupport/include/chain.h: Removed. Use the SAPI
	interface that is supported.

	* cpukit/libcsupport/Makefile.am,
	cpukit/libcsupport/preinstall.am: Remove chain.h header
	references.

	* cpukit/sapi/include/rtems/chain.h,
	cpukit/sapi/inline/rtems/chain.inl: New. A supported chains
	interface.

	* cpukit/sapi/Makefile.am, cpukit/sapi/preinstall.am: Updated to
	include the new chains interface.

	* cpukit/libfs/src/imfs/imfs.h,
	cpukit/libfs/src/imfs/imfs_creat.c,
	cpukit/libfs/src/imfs/imfs_debug.c,
	cpukit/libfs/src/imfs/imfs_directory.c,
	cpukit/libfs/src/imfs/imfs_fsunmount.c,
	cpukit/libfs/src/imfs/imfs_getchild.c,
	cpukit/libfs/src/imfs/imfs_load_tar.c,
	cpukit/libfs/src/imfs/imfs_rmnod.c,
	cpukit/libfs/src/imfs/memfile.c,
	cpukit/libfs/src/nfsclient/src/nfs.c,
	cpukit/libcsupport/include/rtems/libio.h,
	cpukit/libcsupport/src/malloc_deferred.c,
	cpukit/libcsupport/src/mount.c,
	cpukit/libcsupport/src/privateenv.c,
	cpukit/libcsupport/src/unmount.c: Change to the new chains
	interface.

	* cpukit/libcsupport/src/malloc_boundary.c: Remove warning.
2008-07-03 01:37:38 +00:00
Joel Sherrill
635865aefd 2008-01-09 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/Makefile.am, libcsupport/include/rtems/malloc.h,
	libcsupport/src/free.c, libcsupport/src/malloc.c,
	libcsupport/src/malloc_deferred.c,
	libcsupport/src/malloc_initialize.c, libcsupport/src/malloc_p.h,
	libcsupport/src/malloc_sbrk_helpers.c,
	libcsupport/src/posix_memalign.c: Place all deferred free code and
	place it in subroutines. Add plugin for dirtying allocated memory to
	assist in debugging. Clean up comments and spacing as needed.
	* libcsupport/src/malloc_dirtier.c: New file.
2008-01-09 21:08:36 +00:00
Joel Sherrill
8e30a269a2 2007-12-19 Joel Sherrill <joel.sherrill@OARcorp.com>
* libcsupport/Makefile.am, libcsupport/include/rtems/malloc.h,
	libcsupport/src/free.c, libcsupport/src/malloc.c,
	libcsupport/src/malloc_p.h,
	libcsupport/src/malloc_report_statistics_plugin.c,
	libmisc/shell/shell.c, libmisc/shell/shell.h,
	score/src/objectinitializeinformation.c: Add posix_memalign. Split
	out management of deferred frees to subroutines.
	* libcsupport/src/malloc_deferred.c, libcsupport/src/posix_memalign.c: New files.
2007-12-19 16:03:54 +00:00