> 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

Reply via email to