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 6fb5afe..b49202b 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; -- 1.7.9.5 _______________________________________________ Libunwind-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/libunwind-devel
