Browse Source

Make sure static heaps are aligned correctly.

Miles Bader 21 years ago
parent
commit
f32264c802
1 changed files with 11 additions and 9 deletions
  1. 11 9
      libc/stdlib/malloc/heap.h

+ 11 - 9
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.  */