> We currently read and write beyond the builtin jmpbuf on ILP32 targets > where Pmode == DImode and ptr_mode == SImode. Since the builtin jmpbuf > is an array of 5 pointers, ptr_mode should be used to save and restore > frame and program pointers. Since x86 only saves stack pointer in > stack save area, STACK_SAVEAREA_MODE should be ptr_mode, not Pmode.
I think that some targets really need Pmode. And the buffer should be able to accomodate up to 5 words, see init_eh: /* Compute a minimally sized jump buffer. We need room to store at least 3 pointers - stack pointer, frame pointer and return address. Plus for some targets we need room for an extra pointer - in the case of MIPS this is the global pointer. This makes a total of four pointers, but to be safe we actually allocate room for 5. If pointers are smaller than words then we allocate enough room for 5 words, just in case the backend needs this much room. For more discussion on this issue see: http://gcc.gnu.org/ml/gcc-patches/2014-05/msg00313.html. */ if (POINTER_SIZE > BITS_PER_WORD) tmp = size_int (5 - 1); else tmp = size_int ((5 * BITS_PER_WORD / POINTER_SIZE) - 1); -- Eric Botcazou