Unaligned stacks on i686-w64-mingw32 may lead to crashes
Port of original SDL2 patch by Christopher Wellons (@skeeto, #7607) to SDL3.
This commit is contained in:
@@ -24,7 +24,14 @@
|
||||
* If not, you can special case it here by appending || defined(__YOUR_PLATFORM__) */
|
||||
#if ( !defined(SDL_MAIN_NEEDED) && !defined(SDL_MAIN_AVAILABLE) ) || defined(__ANDROID__)
|
||||
|
||||
DECLSPEC int
|
||||
#if defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)
|
||||
#include "windows/SDL_windows.h"
|
||||
#endif
|
||||
#ifndef MINGW32_FORCEALIGN
|
||||
#define MINGW32_FORCEALIGN
|
||||
#endif
|
||||
|
||||
DECLSPEC int MINGW32_FORCEALIGN
|
||||
SDL_RunApp(int argc, char* argv[], SDL_main_func mainFunction, void * reserved)
|
||||
{
|
||||
char empty[1] = {0};
|
||||
|
||||
@@ -76,6 +76,19 @@
|
||||
#define WINVER _WIN32_WINNT
|
||||
#endif
|
||||
|
||||
/* See https://github.com/libsdl-org/SDL/pull/7607 */
|
||||
/* force_align_arg_pointer attribute requires gcc >= 4.2.x. */
|
||||
#if defined(__clang__)
|
||||
#define HAVE_FORCE_ALIGN_ARG_POINTER
|
||||
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
|
||||
#define HAVE_FORCE_ALIGN_ARG_POINTER
|
||||
#endif
|
||||
#if defined(__GNUC__) && defined(__i386__) && defined(HAVE_FORCE_ALIGN_ARG_POINTER)
|
||||
#define MINGW32_FORCEALIGN __attribute__((force_align_arg_pointer))
|
||||
#else
|
||||
#define MINGW32_FORCEALIGN
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <basetyps.h> /* for REFIID with broken mingw.org headers */
|
||||
#include <mmreg.h>
|
||||
|
||||
Reference in New Issue
Block a user