Increase the size and alignment of the setjmp buffer. This will allow for

possible future CPU extentions with larger registers.

jmp_buf's size and alignment are baked into the ABI of third party libraries
and thus are very hard to change later so it is best to waste a small amount
of space now.

Reviewed by:	brooks
Differential Revision:	https://reviews.freebsd.org/D3956
This commit is contained in:
Andrew Turner 2015-12-23 15:22:44 +00:00
parent e7beaf9968
commit 91569f1f38

View File

@ -43,13 +43,12 @@
* - 11 general purpose registers
* - 8 floating point registers
* - The signal mask (128 bits)
* i.e. 24 64-bit words, this can be rounded up to 32 to give us some
* space to expand into without affecting the ABI.
* XXX: Is this enough space for expansion?
* i.e. 24 64-bit words, round this up to 31(+1) 128-bit words to allow for
* CPU extensions with larger registers and stronger alignment requirements.
*
* The registers to save are: r19 to r29, and d8 to d15.
*/
#define _JBLEN 32
#define _JBLEN 31
#define _JB_SIGMASK 21
/* This should only be needed in libc and may change */
@ -65,10 +64,10 @@
* internally to avoid some run-time errors for mismatches.
*/
#if __BSD_VISIBLE || __POSIX_VISIBLE || __XSI_VISIBLE
typedef struct _sigjmp_buf { long _sjb[_JBLEN + 1]; } sigjmp_buf[1];
typedef struct _sigjmp_buf { __int128_t _sjb[_JBLEN + 1]; } sigjmp_buf[1];
#endif
typedef struct _jmp_buf { long _jb[_JBLEN + 1]; } jmp_buf[1];
typedef struct _jmp_buf { __int128_t _jb[_JBLEN + 1]; } jmp_buf[1];
#endif /* __ASSEMBLER__ */
#endif /* !_MACHINE_SETJMP_H_ */