summaryrefslogtreecommitdiff
path: root/usr/src/boot/lib/libstand/zalloc_malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/boot/lib/libstand/zalloc_malloc.c')
-rw-r--r--usr/src/boot/lib/libstand/zalloc_malloc.c160
1 files changed, 82 insertions, 78 deletions
diff --git a/usr/src/boot/lib/libstand/zalloc_malloc.c b/usr/src/boot/lib/libstand/zalloc_malloc.c
index b9a295fb38..2117804c5a 100644
--- a/usr/src/boot/lib/libstand/zalloc_malloc.c
+++ b/usr/src/boot/lib/libstand/zalloc_malloc.c
@@ -1,5 +1,5 @@
/*
- * This module derived from code donated to the FreeBSD Project by
+ * This module derived from code donated to the FreeBSD Project by
* Matthew Dillon <dillon@backplane.com>
*
* Copyright (c) 1998 The FreeBSD Project
@@ -28,7 +28,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
/*
* MALLOC.C - malloc equivalent, runs on top of zalloc and uses sbrk
@@ -53,136 +52,142 @@ void mallocstats(void);
void *
Malloc(size_t bytes, const char *file, int line)
{
- Guard *res;
+ Guard *res;
#ifdef USEENDGUARD
- bytes += MALLOCALIGN + 1;
+ bytes += MALLOCALIGN + 1;
#else
- bytes += MALLOCALIGN;
+ bytes += MALLOCALIGN;
#endif
- while ((res = znalloc(&MallocPool, bytes)) == NULL) {
- int incr = (bytes + BLKEXTENDMASK) & ~BLKEXTENDMASK;
- char *base;
+ while ((res = znalloc(&MallocPool, bytes)) == NULL) {
+ int incr = (bytes + BLKEXTENDMASK) & ~BLKEXTENDMASK;
+ char *base;
- if ((base = sbrk(incr)) == (char *)-1)
- return(NULL);
- zextendPool(&MallocPool, base, incr);
- zfree(&MallocPool, base, incr);
- }
+ if ((base = sbrk(incr)) == (char *)-1)
+ return (NULL);
+ zextendPool(&MallocPool, base, incr);
+ zfree(&MallocPool, base, incr);
+ }
#ifdef DMALLOCDEBUG
- if (++MallocCount > MallocMax)
- MallocMax = MallocCount;
+ if (++MallocCount > MallocMax)
+ MallocMax = MallocCount;
#endif
#ifdef USEGUARD
- res->ga_Magic = GAMAGIC;
+ res->ga_Magic = GAMAGIC;
#endif
- res->ga_Bytes = bytes;
+ res->ga_Bytes = bytes;
#ifdef USEENDGUARD
- *((signed char *)res + bytes - 1) = -2;
+ *((signed char *)res + bytes - 1) = -2;
#endif
- return((char *)res + MALLOCALIGN);
+ return ((char *)res + MALLOCALIGN);
}
void
Free(void *ptr, const char *file, int line)
{
- size_t bytes;
+ size_t bytes;
- if (ptr != NULL) {
- Guard *res = (void *)((char *)ptr - MALLOCALIGN);
+ if (ptr != NULL) {
+ Guard *res = (void *)((char *)ptr - MALLOCALIGN);
- if (file == NULL)
- file = "unknown";
+ if (file == NULL)
+ file = "unknown";
#ifdef USEGUARD
- if (res->ga_Magic == GAFREE) {
- printf("free: duplicate free @ %p from %s:%d\n", ptr, file, line);
- return;
- }
- if (res->ga_Magic != GAMAGIC)
- panic("free: guard1 fail @ %p from %s:%d", ptr, file, line);
- res->ga_Magic = GAFREE;
+ if (res->ga_Magic == GAFREE) {
+ printf("free: duplicate free @ %p from %s:%d\n",
+ ptr, file, line);
+ return;
+ }
+ if (res->ga_Magic != GAMAGIC)
+ panic("free: guard1 fail @ %p from %s:%d",
+ ptr, file, line);
+ res->ga_Magic = GAFREE;
#endif
#ifdef USEENDGUARD
- if (*((signed char *)res + res->ga_Bytes - 1) == -1) {
- printf("free: duplicate2 free @ %p from %s:%d\n", ptr, file, line);
- return;
- }
- if (*((signed char *)res + res->ga_Bytes - 1) != -2)
- panic("free: guard2 fail @ %p + %zu from %s:%d", ptr, res->ga_Bytes - MALLOCALIGN, file, line);
- *((signed char *)res + res->ga_Bytes - 1) = -1;
+ if (*((signed char *)res + res->ga_Bytes - 1) == -1) {
+ printf("free: duplicate2 free @ %p from %s:%d\n",
+ ptr, file, line);
+ return;
+ }
+ if (*((signed char *)res + res->ga_Bytes - 1) != -2)
+ panic("free: guard2 fail @ %p + %zu from %s:%d",
+ ptr, res->ga_Bytes - MALLOCALIGN, file, line);
+ *((signed char *)res + res->ga_Bytes - 1) = -1;
#endif
- bytes = res->ga_Bytes;
- zfree(&MallocPool, res, bytes);
+ bytes = res->ga_Bytes;
+ zfree(&MallocPool, res, bytes);
#ifdef DMALLOCDEBUG
- --MallocCount;
+ --MallocCount;
#endif
- }
+ }
}
void *
Calloc(size_t n1, size_t n2, const char *file, int line)
{
- uintptr_t bytes = (uintptr_t)n1 * (uintptr_t)n2;
- void *res;
+ uintptr_t bytes = (uintptr_t)n1 * (uintptr_t)n2;
+ void *res;
- if ((res = Malloc(bytes, file, line)) != NULL) {
- bzero(res, bytes);
+ if ((res = Malloc(bytes, file, line)) != NULL) {
+ bzero(res, bytes);
#ifdef DMALLOCDEBUG
- if (++MallocCount > MallocMax)
- MallocMax = MallocCount;
+ if (++MallocCount > MallocMax)
+ MallocMax = MallocCount;
#endif
- }
- return(res);
+ }
+ return (res);
}
/*
* realloc() - I could be fancier here and free the old buffer before
- * allocating the new one (saving potential fragmentation
+ * allocating the new one (saving potential fragmentation
* and potential buffer copies). But I don't bother.
*/
void *
Realloc(void *ptr, size_t size, const char *file, int line)
{
- void *res;
- size_t old;
-
- if ((res = Malloc(size, file, line)) != NULL) {
- if (ptr) {
- old = *(size_t *)((char *)ptr - MALLOCALIGN) - MALLOCALIGN;
- if (old < size)
- bcopy(ptr, res, old);
- else
- bcopy(ptr, res, size);
- Free(ptr, file, line);
- } else {
+ void *res;
+ size_t old;
+
+ if ((res = Malloc(size, file, line)) != NULL) {
+ if (ptr != NULL) {
+ Guard *g = (Guard *)((char *)ptr - MALLOCALIGN);
+
+ old = g->ga_Bytes - MALLOCALIGN;
+ if (old < size)
+ bcopy(ptr, res, old);
+ else
+ bcopy(ptr, res, size);
+ Free(ptr, file, line);
+ } else {
#ifdef DMALLOCDEBUG
- if (++MallocCount > MallocMax)
- MallocMax = MallocCount;
+ if (++MallocCount > MallocMax)
+ MallocMax = MallocCount;
#ifdef EXITSTATS
- if (DidAtExit == 0) {
- DidAtExit = 1;
- atexit(mallocstats);
- }
+ if (DidAtExit == 0) {
+ DidAtExit = 1;
+ atexit(mallocstats);
+ }
#endif
#endif
+ }
}
- }
- return(res);
+ return (res);
}
void *
Reallocf(void *ptr, size_t size, const char *file, int line)
{
- void *res;
+ void *res;
- if ((res = Realloc(ptr, size, file, line)) == NULL)
- Free(ptr, file, line);
- return(res);
+ if ((res = Realloc(ptr, size, file, line)) == NULL)
+ Free(ptr, file, line);
+ return (res);
}
#ifdef DMALLOCDEBUG
@@ -190,11 +195,10 @@ Reallocf(void *ptr, size_t size, const char *file, int line)
void
mallocstats(void)
{
- printf("Active Allocations: %d/%d\n", MallocCount, MallocMax);
+ printf("Active Allocations: %d/%d\n", MallocCount, MallocMax);
#ifdef ZALLOCDEBUG
- zallocstats(&MallocPool);
+ zallocstats(&MallocPool);
#endif
}
#endif
-