From 75b4202ab03337edb37536e3d9470a48a04c9341 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 10 Oct 2013 22:32:36 -0700 Subject: Fix readdir regressions on sparc 32-bit. * sysdeps/posix/dirstream.h (struct __dirstream): Fix alignment of directory block. --- sysdeps/posix/dirstream.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'sysdeps/posix') diff --git a/sysdeps/posix/dirstream.h b/sysdeps/posix/dirstream.h index 8e8570d..be20895 100644 --- a/sysdeps/posix/dirstream.h +++ b/sysdeps/posix/dirstream.h @@ -41,8 +41,13 @@ struct __dirstream int errcode; /* Delayed error code. */ - /* Directory block. */ - char data[0] __attribute__ ((aligned (__alignof__ (void*)))); + /* Directory block. We must make sure that this block starts + at an address that is aligned adequately enough to store + dirent entries. Using the alignment of "void *" is not + sufficient because dirents on 32-bit platforms can require + 64-bit alignment. We use "long double" here to be consistent + with what malloc uses. */ + char data[0] __attribute__ ((aligned (__alignof__ (long double)))); }; #define _DIR_dirfd(dirp) ((dirp)->fd) -- cgit v1.1