diff --git a/core/include/oneway_malloc.h b/core/include/oneway_malloc.h deleted file mode 100644 index 3f24ff3075..0000000000 --- a/core/include/oneway_malloc.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2013 Freie Universität Berlin - * - * This file is subject to the terms and conditions of the GNU Lesser General - * Public License. See the file LICENSE in the top level directory for more - * details. - */ - -/** - * @addtogroup core_util - * @{ - * - * @file oneway_malloc.h - * @brief Simple malloc wrapper for sbrk - * - * @author Freie Universität Berlin, Computer Systems & Telematics - * @author Kaspar Schleiser - * - * @detail Simple malloc implementation for plattforms - * without malloc in libc, e.g. msb430. - */ - -#ifndef _MALLOC_H_ -#define _MALLOC_H_ - -#include - -/** - * @brief Allocates a block of `size` bytes of memory - * - * @param[in] Size of the memory block, in bytes. - * - * @return On success, a pointer to the memory block allocated by the function. - * @return NULL otherwise. - */ -void *_malloc(size_t size); - -/** - * @brief Changes the size of the memory block pointed to by ptr. - * - * @param[in] Pointer to a memory block previously allocated with malloc, - * calloc or realloc. - * - * @param[in] New size for the memory block, in bytes. - * - * @return A pointer to the reallocated memory block, which may be either - * the same as ptr or a new location. - */ -void *_realloc(void *ptr, size_t size); - -/** - * @brief Allocates a block of memory for an array of num elements, - * each of them size bytes long, and initializes all its bits to zero. - * - * @param[in] Number of elements to allocate. - * @param[in] Size of each element. - * - * @return On success, a pointer to the memory block allocated by the function. - * If the function failed to allocate the requested block of memory, - * a null pointer is returned. - */ -void *_calloc(int size, size_t cnt); - -/** - * @brief A block of memory previously allocated by a call to malloc, - * calloc or realloc is deallocated, making it available again - * for further allocations. - * - * @param[in] Pointer to a memory block previously allocated with malloc, - * calloc or realloc. - */ -void _free(void *ptr); - -/** @} */ -#endif /* _MALLOC_H_ */ diff --git a/core/oneway_malloc.c b/core/oneway_malloc.c deleted file mode 100644 index 348ab641de..0000000000 --- a/core/oneway_malloc.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2013 Freie Universität Berlin - * - * This file is subject to the terms and conditions of the GNU Lesser General - * Public License. See the file LICENSE in the top level directory for more - * details. - */ - -/** - * @ingroup core_util - * @{ - * - * @file oneway_malloc.c - * @brief Simple malloc wrapper for SBRK - - * @author Kaspar Schleiser - * - * @} - */ - -#include -#include -#include - -#define ENABLE_DEBUG (0) -#include "debug.h" - -extern void *sbrk(int incr); - -void *_malloc(size_t size) -{ - void *ptr = sbrk(size); - - DEBUG("_malloc(): allocating block of size %u at 0x%X.\n", (unsigned int) size, (unsigned int)ptr); - - if (ptr != (void*) - 1) { - return ptr; - } - else { - return NULL; - } -} - -void *_realloc(void *ptr, size_t size) -{ - void *newptr = _malloc(size); - memcpy(newptr, ptr, size); - free(ptr); - return newptr; -} - -void *_calloc(int size, size_t cnt) -{ - void *mem = _malloc(size * cnt); - if (mem) { - memset(mem, 0, size * cnt); - } - return mem; -} - -void _free(void *ptr) -{ - /* who cares about pointers? */ - (void) ptr; - - DEBUG("_free(): block at 0x%X lost.\n", (unsigned int)ptr); -} diff --git a/cpu/msp430-common/Makefile.include b/cpu/msp430-common/Makefile.include index caa62451a9..02ed2b915e 100644 --- a/cpu/msp430-common/Makefile.include +++ b/cpu/msp430-common/Makefile.include @@ -1 +1,3 @@ INCLUDES += -I$(RIOTBASE)/cpu/msp430-common/include/ + +DEFAULT_MODULE += oneway_malloc diff --git a/cpu/msp430-common/include/malloc.h b/cpu/msp430-common/include/malloc.h deleted file mode 100644 index f465d2c11b..0000000000 --- a/cpu/msp430-common/include/malloc.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __MALLOC_H -#define __MALLOC_H - -#include "oneway_malloc.h" - -#define malloc _malloc -#define calloc _calloc -#define realloc _realloc -#define free _free - -#endif /* __MALLOC_H */ diff --git a/sys/Makefile b/sys/Makefile index e9e61c1ccf..c20e4781f9 100644 --- a/sys/Makefile +++ b/sys/Makefile @@ -89,6 +89,9 @@ endif ifneq (,$(filter quad_math,$(USEMODULE))) DIRS += quad_math endif +ifneq (,$(filter oneway_malloc,$(USEMODULE))) + DIRS += oneway-malloc +endif all: $(BINDIR)$(MODULE).a @for i in $(DIRS) ; do "$(MAKE)" -C $$i || exit 1; done ; diff --git a/sys/Makefile.include b/sys/Makefile.include index ddf496ce1b..2073b310a7 100644 --- a/sys/Makefile.include +++ b/sys/Makefile.include @@ -43,3 +43,7 @@ endif ifneq (,$(filter pthread,$(USEMODULE))) USEMODULE_INCLUDES += $(RIOTBASE)/sys/posix/pthread/include endif + +ifneq (,$(filter oneway_malloc,$(USEMODULE))) + USEMODULE_INCLUDES += $(RIOTBASE)/sys/oneway-malloc/include +endif diff --git a/sys/oneway-malloc/Makefile b/sys/oneway-malloc/Makefile new file mode 100644 index 0000000000..c5eae4a3c0 --- /dev/null +++ b/sys/oneway-malloc/Makefile @@ -0,0 +1,3 @@ +MODULE = oneway_malloc + +include $(RIOTBASE)/Makefile.base diff --git a/sys/oneway-malloc/include/malloc.h b/sys/oneway-malloc/include/malloc.h new file mode 100644 index 0000000000..0212e0c758 --- /dev/null +++ b/sys/oneway-malloc/include/malloc.h @@ -0,0 +1,11 @@ +#ifndef __MALLOC_H +#define __MALLOC_H + +#include + +void *malloc(size_t size); +void *realloc(void *ptr, size_t size); +void *calloc(int size, size_t cnt); +void free(void *ptr); + +#endif /* __MALLOC_H */ diff --git a/sys/oneway-malloc/oneway-malloc.c b/sys/oneway-malloc/oneway-malloc.c new file mode 100644 index 0000000000..35024717e3 --- /dev/null +++ b/sys/oneway-malloc/oneway-malloc.c @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @addtogroup oneway_malloc + * @ingroup sys + * @{ + * + * @file oneway_malloc.c + * @brief Simple malloc wrapper for SBRK + + * @author Kaspar Schleiser + * + * @} + */ + +#include + +#include "malloc.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +extern void *sbrk(int incr); + +void __attribute__((weak)) *malloc(size_t size) +{ + if (size != 0) { + void *ptr = sbrk(size); + + DEBUG("malloc(): allocating block of size %u at %p.\n", (unsigned int) size, ptr); + + if (ptr != (void*) -1) { + return ptr; + } + } + return NULL; +} + +void __attribute__((weak)) *realloc(void *ptr, size_t size) +{ + if (ptr == NULL) { + return malloc(size); + } + else if (size == 0) { + free(ptr); + return NULL; + } + else { + void *newptr = malloc(size); + if (newptr) { + memcpy(newptr, ptr, size); + } + return newptr; + } +} + +void __attribute__((weak)) *calloc(int size, size_t cnt) +{ + void *mem = malloc(size * cnt); + if (mem) { + memset(mem, 0, size * cnt); + } + return mem; +} + +void __attribute__((weak)) free(void *ptr) +{ + /* who cares about pointers? */ + (void) ptr; + + DEBUG("free(): block at %p lost.\n", ptr); +}