summaryrefslogtreecommitdiff
path: root/libc/stdlib
diff options
context:
space:
mode:
authorMiles Bader <miles@lsi.nec.co.jp>2003-09-17 11:50:18 +0000
committerMiles Bader <miles@lsi.nec.co.jp>2003-09-17 11:50:18 +0000
commitf32264c80281c3ff98ad8cfdb7b9ba4c97602e83 (patch)
tree309dd1fb6470ad89b5dc3668ab335327e5d7ff7a /libc/stdlib
parent5e16460b41558637332877d5c69596760fb02832 (diff)
Make sure static heaps are aligned correctly.
Diffstat (limited to 'libc/stdlib')
-rw-r--r--libc/stdlib/malloc/heap.h20
1 files changed, 11 insertions, 9 deletions
diff --git a/libc/stdlib/malloc/heap.h b/libc/stdlib/malloc/heap.h
index 2d6d55fd8..13e37ea6c 100644
--- a/libc/stdlib/malloc/heap.h
+++ b/libc/stdlib/malloc/heap.h
@@ -1,8 +1,8 @@
/*
* libc/stdlib/malloc/heap.h -- heap allocator used for malloc
*
- * Copyright (C) 2002 NEC Corporation
- * Copyright (C) 2002 Miles Bader <miles@gnu.org>
+ * Copyright (C) 2002,03 NEC Electronics Corporation
+ * Copyright (C) 2002,03 Miles Bader <miles@gnu.org>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License. See the file COPYING.LIB in the main
@@ -24,7 +24,8 @@
/* The heap allocates in multiples of, and aligned to, HEAP_GRANULARITY.
HEAP_GRANULARITY must be a power of 2. Malloc depends on this being the
same as MALLOC_ALIGNMENT. */
-#define HEAP_GRANULARITY (sizeof (double))
+#define HEAP_GRANULARITY_TYPE double
+#define HEAP_GRANULARITY (sizeof (HEAP_GRANULARITY_TYPE))
/* A heap is a collection of memory blocks, from which smaller blocks
@@ -74,12 +75,13 @@ struct heap_free_area
/* This rather clumsy macro allows one to declare a static free-area for
passing to HEAP_INIT_WITH_FA initializer macro. This is only use for
which NAME is allowed. */
-#define HEAP_DECLARE_STATIC_FREE_AREA(name, size) \
- static struct \
- { \
- char space[(size) - sizeof (struct heap_free_area)]; \
- struct heap_free_area _fa; \
- } name = { "", { (size), 0, 0 } }
+#define HEAP_DECLARE_STATIC_FREE_AREA(name, size) \
+ static struct \
+ { \
+ HEAP_GRANULARITY_TYPE space[((size) - sizeof (struct heap_free_area)) \
+ / HEAP_GRANULARITY]; \
+ struct heap_free_area _fa; \
+ } name = { { (HEAP_GRANULARITY_TYPE)0 }, { (size), 0, 0 } }
/* Rounds SZ up to be a multiple of HEAP_GRANULARITY. */