Index: elfutils-0.122/libdw/libdwP.h
===================================================================
--- elfutils-0.122.orig/libdw/libdwP.h	2006-08-13 16:38:25.000000000 +0000
+++ elfutils-0.122/libdw/libdwP.h	2006-08-13 16:41:27.000000000 +0000
@@ -313,25 +313,25 @@
 /* Set error value.  */
 extern void __libdw_seterrno (int value) internal_function;
 
+#define libdw_alloc_padding(mem, type)					\
+     ((__alignof (type) - ((uintptr_t) (mem) & (__alignof (type) - 1)))	\
+      & (__alignof (type) - 1))
+
 
 /* Memory handling, the easy parts.  This macro does not do any locking.  */
 #define libdw_alloc(dbg, type, tsize, cnt) \
   ({ struct libdw_memblock *_tail = (dbg)->mem_tail;			      \
      size_t _required = (tsize) * (cnt);				      \
      type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\
-     size_t _padding = ((__alignof (type)				      \
-			 - ((uintptr_t) _result & (__alignof (type) - 1)))    \
-			& (__alignof (type) - 1));			      \
+     size_t _padding = libdw_alloc_padding(_result, type);                    \
      if (unlikely (_tail->remaining < _required + _padding))		      \
        {								      \
-	 _result = (type *) __libdw_allocate (dbg, _required);		      \
+	 _result = (type *) __libdw_allocate (dbg, _required+__alignof(type));\
+	 _padding = libdw_alloc_padding(_result, type);                       \
 	 _tail = (dbg)->mem_tail;					      \
        }								      \
-     else								      \
-       {								      \
-	 _required += _padding;						      \
-	 _result = (type *) ((char *) _result + _padding);		      \
-       }								      \
+     _required += _padding;						      \
+     _result = (type *) ((char *) _result + _padding);		              \
      _tail->remaining -= _required;					      \
      _result; })
 

