This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RFA: Fix calculation of size of builtin setjmp buffer
- From: Nick Clifton <nickc at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 06 May 2014 13:55:18 +0100
- Subject: RFA: Fix calculation of size of builtin setjmp buffer
- Authentication-results: sourceware.org; auth=none
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 <nickc@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);