mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Work around issues in MinGW-64's setjmp/longjmp support.
It's hard to avoid the conclusion that there is something wrong with setjmp/longjmp on MinGW-64, as we have seen failures come and go after entirely-unrelated-looking changes in our own code. Other projects such as Ruby have given up and started using gcc's setjmp/longjmp builtins on that platform; this patch just follows that lead. Note that this is a pretty fundamental ABI break for functions containining either setjmp or longjmp, so we can't really consider a back-patch. Per reports from Regina Obe and Heath Lord, as well as recent failures on buildfarm member walleye, and less-recent failures on fairywren. Juan José Santamaría Flecha Discussion: https://postgr.es/m/000401d716a0$1ed0fc70$5c72f550$@pcorp.us Discussion: https://postgr.es/m/CA+BEBhvHhM-Bn628pf-LsjqRh3Ang7qCSBG0Ga+7KwhGqrNUPw@mail.gmail.com Discussion: https://postgr.es/m/f1caef93-9640-022e-9211-bbe8755a56b0@2ndQuadrant.com
This commit is contained in:
parent
eeb60e45d8
commit
146cb3889c
@ -1335,14 +1335,21 @@ extern unsigned long long strtoull(const char *str, char **endptr, int base);
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* When there is no sigsetjmp, its functionality is provided by plain
|
* When there is no sigsetjmp, its functionality is provided by plain
|
||||||
* setjmp. Incidentally, nothing provides setjmp's functionality in
|
* setjmp. We now support the case only on Windows. However, it seems
|
||||||
* that case. We now support the case only on Windows.
|
* that MinGW-64 has some longstanding issues in its setjmp support,
|
||||||
|
* so on that toolchain we cheat and use gcc's builtins.
|
||||||
*/
|
*/
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
#ifdef __MINGW64__
|
||||||
|
typedef intptr_t sigjmp_buf[5];
|
||||||
|
#define sigsetjmp(x,y) __builtin_setjmp(x)
|
||||||
|
#define siglongjmp __builtin_longjmp
|
||||||
|
#else /* !__MINGW64__ */
|
||||||
#define sigjmp_buf jmp_buf
|
#define sigjmp_buf jmp_buf
|
||||||
#define sigsetjmp(x,y) setjmp(x)
|
#define sigsetjmp(x,y) setjmp(x)
|
||||||
#define siglongjmp longjmp
|
#define siglongjmp longjmp
|
||||||
#endif
|
#endif /* __MINGW64__ */
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
/* EXEC_BACKEND defines */
|
/* EXEC_BACKEND defines */
|
||||||
#ifdef EXEC_BACKEND
|
#ifdef EXEC_BACKEND
|
||||||
|
Loading…
x
Reference in New Issue
Block a user