Avoid segfaults in 64-bit Windows builds

* src/lisp.h (COMMON_MULTIPLE): Move here from alloc.c.
* src/thread.c (THREAD_ALIGNMENT): New macro.
(main_thread): Use THREAD_ALIGNMENT to align propertly.  (Bug#29040)
This commit is contained in:
Eli Zaretskii 2017-10-28 19:39:48 +03:00
parent a8e6741066
commit 00c3c6d88d
3 changed files with 9 additions and 7 deletions

View file

@ -621,12 +621,6 @@ buffer_memory_full (ptrdiff_t nbytes)
#endif #endif
} }
/* A common multiple of the positive integers A and B. Ideally this
would be the least common multiple, but there's no way to do that
as a constant expression in C, so do the best that we can easily do. */
#define COMMON_MULTIPLE(a, b) \
((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
#ifndef XMALLOC_OVERRUN_CHECK #ifndef XMALLOC_OVERRUN_CHECK
#define XMALLOC_OVERRUN_CHECK_OVERHEAD 0 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
#else #else

View file

@ -283,6 +283,12 @@ error !;
# define GCALIGNED /* empty */ # define GCALIGNED /* empty */
#endif #endif
/* A common multiple of the positive integers A and B. Ideally this
would be the least common multiple, but there's no way to do that
as a constant expression in C, so do the best that we can easily do. */
#define COMMON_MULTIPLE(a, b) \
((a) % (b) == 0 ? (a) : (b) % (a) == 0 ? (b) : (a) * (b))
/* Some operations are so commonly executed that they are implemented /* Some operations are so commonly executed that they are implemented
as macros, not functions, because otherwise runtime performance would as macros, not functions, because otherwise runtime performance would
suffer too much when compiling with GCC without optimization. suffer too much when compiling with GCC without optimization.

View file

@ -26,7 +26,9 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "coding.h" #include "coding.h"
#include "syssignal.h" #include "syssignal.h"
static struct thread_state alignas (GCALIGNMENT) main_thread; #define THREAD_ALIGNMENT COMMON_MULTIPLE (alignof (max_align_t), GCALIGNMENT)
static struct thread_state alignas (THREAD_ALIGNMENT) main_thread;
struct thread_state *current_thread = &main_thread; struct thread_state *current_thread = &main_thread;