diff options
Diffstat (limited to 'libc/stdlib/malloc-standard')
| -rw-r--r-- | libc/stdlib/malloc-standard/Makefile.in | 18 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/calloc.c | 1 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/free.c | 7 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/mallinfo.c | 11 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/malloc.c | 7 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/malloc.h | 37 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/memalign.c | 4 | ||||
| -rw-r--r-- | libc/stdlib/malloc-standard/realloc.c | 4 |
8 files changed, 41 insertions, 48 deletions
diff --git a/libc/stdlib/malloc-standard/Makefile.in b/libc/stdlib/malloc-standard/Makefile.in index 3bbe93e08..04a46b681 100644 --- a/libc/stdlib/malloc-standard/Makefile.in +++ b/libc/stdlib/malloc-standard/Makefile.in @@ -1,23 +1,23 @@ # Makefile for uClibc # -# Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org> +# Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org> # # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -# calloc.c can be found at uClibc/libc/stdlib/calloc.c -# valloc.c can be found at uClibc/libc/stdlib/valloc.c -CSRC := malloc.c calloc.c realloc.c free.c memalign.c mallopt.c mallinfo.c +subdirs += libc/stdlib/malloc-standard STDLIB_MALLOC_STANDARD_DIR := $(top_srcdir)libc/stdlib/malloc-standard STDLIB_MALLOC_STANDARD_OUT := $(top_builddir)libc/stdlib/malloc-standard -STDLIB_MALLOC_STANDARD_SRC := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_DIR)/%.c,$(CSRC)) -STDLIB_MALLOC_STANDARD_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_OUT)/%.o,$(CSRC)) +CSRC-y := $(notdir $(wildcard $(STDLIB_MALLOC_STANDARD_DIR)/*.c)) + +STDLIB_MALLOC_STANDARD_SRC := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_DIR)/%.c,$(CSRC-y)) +STDLIB_MALLOC_STANDARD_OBJ := $(patsubst %.c,$(STDLIB_MALLOC_STANDARD_OUT)/%.o,$(CSRC-y)) libc-$(MALLOC_STANDARD) += $(STDLIB_MALLOC_STANDARD_OBJ) -objclean-y += stdlib_malloc_standard_objclean +objclean-y += CLEAN_libc/stdlib/malloc-standard -stdlib_malloc_standard_objclean: - $(RM) $(STDLIB_MALLOC_STANDARD_OUT)/*.{o,os} +CLEAN_libc/stdlib/malloc-standard: + $(do_rm) $(addprefix $(STDLIB_MALLOC_STANDARD_OUT)/*., o os) diff --git a/libc/stdlib/malloc-standard/calloc.c b/libc/stdlib/malloc-standard/calloc.c index 80ba3d04a..a70516f0e 100644 --- a/libc/stdlib/malloc-standard/calloc.c +++ b/libc/stdlib/malloc-standard/calloc.c @@ -16,7 +16,6 @@ #include "malloc.h" -/* Experimentally off - libc_hidden_proto(memset) */ /* ------------------------------ calloc ------------------------------ */ void* calloc(size_t n_elements, size_t elem_size) diff --git a/libc/stdlib/malloc-standard/free.c b/libc/stdlib/malloc-standard/free.c index 4d24697be..8b7a81fca 100644 --- a/libc/stdlib/malloc-standard/free.c +++ b/libc/stdlib/malloc-standard/free.c @@ -16,7 +16,6 @@ #include "malloc.h" -libc_hidden_proto(munmap) /* ------------------------- __malloc_trim ------------------------- __malloc_trim is an inverse of sorts to __malloc_alloc. It gives memory @@ -105,9 +104,13 @@ static int __malloc_trim(size_t pad, mstate av) */ int malloc_trim(size_t pad) { + int r; + __MALLOC_LOCK; mstate av = get_malloc_state(); __malloc_consolidate(av); - return __malloc_trim(pad, av); + r = __malloc_trim(pad, av); + __MALLOC_UNLOCK; + return r; } /* diff --git a/libc/stdlib/malloc-standard/mallinfo.c b/libc/stdlib/malloc-standard/mallinfo.c index 18331010a..dbe4d49b8 100644 --- a/libc/stdlib/malloc-standard/mallinfo.c +++ b/libc/stdlib/malloc-standard/mallinfo.c @@ -15,11 +15,10 @@ */ #include "malloc.h" +#include <stdio.h> /* fprintf */ -libc_hidden_proto(fprintf) /* ------------------------------ mallinfo ------------------------------ */ -libc_hidden_proto(mallinfo) struct mallinfo mallinfo(void) { mstate av; @@ -82,16 +81,12 @@ struct mallinfo mallinfo(void) } libc_hidden_def(mallinfo) -void malloc_stats(FILE *file) +void malloc_stats(void) { struct mallinfo mi; - if (file==NULL) { - file = stderr; - } - mi = mallinfo(); - fprintf(file, + fprintf(stderr, "total bytes allocated = %10u\n" "total bytes in use bytes = %10u\n" "total non-mmapped bytes allocated = %10d\n" diff --git a/libc/stdlib/malloc-standard/malloc.c b/libc/stdlib/malloc-standard/malloc.c index 3253ebda6..fd33b50c7 100644 --- a/libc/stdlib/malloc-standard/malloc.c +++ b/libc/stdlib/malloc-standard/malloc.c @@ -744,7 +744,7 @@ static void* __malloc_alloc(size_t nb, mstate av) } /* catch all failure paths */ - errno = ENOMEM; + __set_errno(ENOMEM); return 0; } @@ -832,8 +832,6 @@ void* malloc(size_t bytes) } #endif - __MALLOC_LOCK; - av = get_malloc_state(); /* Convert request size to internal form by adding (sizeof(size_t)) bytes overhead plus possibly more to obtain necessary alignment and/or @@ -845,6 +843,9 @@ void* malloc(size_t bytes) checked_request2size(bytes, nb); + __MALLOC_LOCK; + av = get_malloc_state(); + /* Bypass search if no frees yet */ diff --git a/libc/stdlib/malloc-standard/malloc.h b/libc/stdlib/malloc-standard/malloc.h index e0f3658b7..1a4cc5a62 100644 --- a/libc/stdlib/malloc-standard/malloc.h +++ b/libc/stdlib/malloc-standard/malloc.h @@ -24,13 +24,13 @@ #include <sys/mman.h> #include <bits/uClibc_mutex.h> -libc_hidden_proto(mmap) -libc_hidden_proto(sysconf) -libc_hidden_proto(sbrk) -libc_hidden_proto(abort) -__UCLIBC_MUTEX_EXTERN(__malloc_lock); +__UCLIBC_MUTEX_EXTERN(__malloc_lock) +#if defined __UCLIBC_HAS_THREADS__ && !defined __LINUXTHREADS_OLD__ + attribute_hidden +#endif + ; #define __MALLOC_LOCK __UCLIBC_MUTEX_LOCK(__malloc_lock) #define __MALLOC_UNLOCK __UCLIBC_MUTEX_UNLOCK(__malloc_lock) @@ -353,16 +353,13 @@ __UCLIBC_MUTEX_EXTERN(__malloc_lock); #endif #ifdef __ARCH_USE_MMU__ - -#define MMAP(addr, size, prot) \ - (mmap((addr), (size), (prot), MAP_PRIVATE|MAP_ANONYMOUS, 0, 0)) - +# define _MAP_UNINITIALIZED 0 #else +# define _MAP_UNINITIALIZED MAP_UNINITIALIZED +#endif #define MMAP(addr, size, prot) \ - (mmap((addr), (size), (prot), MAP_SHARED|MAP_ANONYMOUS, 0, 0)) - -#endif + (mmap((addr), (size), (prot), MAP_PRIVATE|MAP_ANONYMOUS|_MAP_UNINITIALIZED, 0, 0)) /* ----------------------- Chunk representations ----------------------- */ @@ -515,7 +512,7 @@ nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ #define checked_request2size(req, sz) \ if (REQUEST_OUT_OF_RANGE(req)) { \ - errno = ENOMEM; \ + __set_errno(ENOMEM); \ return 0; \ } \ (sz) = request2size(req); @@ -917,7 +914,7 @@ typedef struct malloc_state *mstate; malloc relies on the property that malloc_state is initialized to all zeroes (as is true of C statics). */ -extern struct malloc_state __malloc_state; /* never directly referenced */ +extern struct malloc_state __malloc_state attribute_hidden; /* never directly referenced */ /* All uses of av_ are via get_malloc_state(). @@ -954,12 +951,12 @@ void __malloc_consolidate(mstate) attribute_hidden; #define check_malloced_chunk(P,N) __do_check_malloced_chunk(P,N) #define check_malloc_state() __do_check_malloc_state() -extern void __do_check_chunk(mchunkptr p); -extern void __do_check_free_chunk(mchunkptr p); -extern void __do_check_inuse_chunk(mchunkptr p); -extern void __do_check_remalloced_chunk(mchunkptr p, size_t s); -extern void __do_check_malloced_chunk(mchunkptr p, size_t s); -extern void __do_check_malloc_state(void); +extern void __do_check_chunk(mchunkptr p) attribute_hidden; +extern void __do_check_free_chunk(mchunkptr p) attribute_hidden; +extern void __do_check_inuse_chunk(mchunkptr p) attribute_hidden; +extern void __do_check_remalloced_chunk(mchunkptr p, size_t s) attribute_hidden; +extern void __do_check_malloced_chunk(mchunkptr p, size_t s) attribute_hidden; +extern void __do_check_malloc_state(void) attribute_hidden; #include <assert.h> diff --git a/libc/stdlib/malloc-standard/memalign.c b/libc/stdlib/malloc-standard/memalign.c index 7e0674be5..e9ae5a7b9 100644 --- a/libc/stdlib/malloc-standard/memalign.c +++ b/libc/stdlib/malloc-standard/memalign.c @@ -52,8 +52,8 @@ void* memalign(size_t alignment, size_t bytes) alignment = a; } - __MALLOC_LOCK; checked_request2size(bytes, nb); + __MALLOC_LOCK; /* Strategy: find a spot within that chunk that meets the alignment * request, and then possibly free the leading and trailing space. */ @@ -127,4 +127,4 @@ void* memalign(size_t alignment, size_t bytes) __MALLOC_UNLOCK; return retval; } - +libc_hidden_def(memalign) diff --git a/libc/stdlib/malloc-standard/realloc.c b/libc/stdlib/malloc-standard/realloc.c index 41cae43d1..e49d11125 100644 --- a/libc/stdlib/malloc-standard/realloc.c +++ b/libc/stdlib/malloc-standard/realloc.c @@ -16,8 +16,6 @@ #include "malloc.h" -libc_hidden_proto(mremap) -/* Experimentally off - libc_hidden_proto(memcpy) */ /* ------------------------------ realloc ------------------------------ */ void* realloc(void* oldmem, size_t bytes) @@ -56,9 +54,9 @@ void* realloc(void* oldmem, size_t bytes) return NULL; } + checked_request2size(bytes, nb); __MALLOC_LOCK; av = get_malloc_state(); - checked_request2size(bytes, nb); oldp = mem2chunk(oldmem); oldsize = chunksize(oldp); |
