]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid segfaults in 64-bit Windows builds
authorEli Zaretskii <eliz@gnu.org>
Sat, 28 Oct 2017 16:39:48 +0000 (19:39 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 28 Oct 2017 16:39:48 +0000 (19:39 +0300)
* 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)

src/alloc.c
src/lisp.h
src/thread.c

index da0c3ad4b3ebd1d6d163f2edd4da8f6a619f187d..d9d74856799b3fe87ee2a31187141914b5244699 100644 (file)
@@ -621,12 +621,6 @@ buffer_memory_full (ptrdiff_t nbytes)
 #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
 #define XMALLOC_OVERRUN_CHECK_OVERHEAD 0
 #else
index 266370333f5f1e2d05aa94b4f1482fbe8eeba952..43b3ec618f071fc4fc375bcff17f6d0ca20f7c34 100644 (file)
@@ -283,6 +283,12 @@ error !;
 # define GCALIGNED /* empty */
 #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
    as macros, not functions, because otherwise runtime performance would
    suffer too much when compiling with GCC without optimization.
index 6f12d796ff99eb965e9b2aef09e1cd53c37c20b2..7a670ba410b97d5fe07472bdc75add81313062c8 100644 (file)
@@ -26,7 +26,9 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #include "coding.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;