Hi Guys, There is a small bug in the computation for the size of the builtin setjmp buffer. The size is based upon BITS_PER_WORD / POINTER_SIZE which for most targets equates to 1. But for targets where pointers are larger than a word, it equates to zero. This leads to stack corruption and all kinds of fun things.
The patch is obvious - see below - but since it affects generic code and might have consequences which I have not foreseen, I thought it best to ask for approval first. No regressions with an x86_64-pc-linux toolchain, and quite a few G++ testsuite fixes for an rl78-elf toolchain. OK to apply ? Cheers Nick 2014-05-06 Nick Clifton <ni...@redhat.com> * except.c (init_eh): Fix computation of builtin setjmp buffer size. Index: gcc/except.c =================================================================== --- gcc/except.c (revision 210096) +++ gcc/except.c (working copy) @@ -287,7 +287,7 @@ #endif #else /* builtin_setjmp takes a pointer to 5 words. */ - tmp = size_int (5 * BITS_PER_WORD / POINTER_SIZE - 1); + tmp = size_int (5 * POINTER_SIZE / BITS_PER_WORD - 1); #endif tmp = build_index_type (tmp); tmp = build_array_type (ptr_type_node, tmp);