From e6edad069c95127383a8122608a6bd3785413204 Mon Sep 17 00:00:00 2001 From: Tommi Rantala Date: Wed, 12 Sep 2012 14:13:13 +0300 Subject: [PATCH] Use GCC __BIGGEST_ALIGNMENT__ for sos-pool MAX_ALIGN Use the __BIGGEST_ALIGNMENT__ macro provided by GCC for sos_alloc() allocation alignment. The macro gives ``the largest alignment ever used for any data type on the target machine you are compiling for.'' __BIGGEST_ALIGNMENT__ also has some other nice properties, e.g. it is power-of-two on all architectures (note that on i386, sizeof(long double) = 12), and on some architectures (e.g. SuperH) the alignment requirement can be lower than sizeof(long double). --- src/mi/mempool.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mi/mempool.c b/src/mi/mempool.c index 6fb5afe3..b49202b2 100644 --- a/src/mi/mempool.c +++ b/src/mi/mempool.c @@ -25,7 +25,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "libunwind_i.h" -#define MAX_ALIGN (sizeof (long double)) +/* From GCC docs: ``Gcc also provides a target specific macro + * __BIGGEST_ALIGNMENT__, which is the largest alignment ever used for any data + * type on the target machine you are compiling for.'' */ +#ifdef __BIGGEST_ALIGNMENT__ +# define MAX_ALIGN __BIGGEST_ALIGNMENT__ +#else +# define MAX_ALIGN (sizeof (long double)) +#endif static char sos_memory[SOS_MEMORY_SIZE]; static char *sos_memp;