__attribute__((aligned)) don't work for stack variables in threads created
with _beginthreadex without alignment.

Signed-off-by: Aleksey Vasenev <margtu-f...@ya.ru>
---
send it again
github: https://github.com/Ratio2/mingw-w64/tree/align
fix crash: ffmpeg -f lavfi -i testsrc -vcodec libvpx -threads 2 -f null -
problem discuss: https://ffmpeg.zeranoe.com/forum/viewtopic.php?t=2236

_beginthreadex does not align the stack on 16-byte boundary as expected
by gcc.

On x86 targets, the force_align_arg_pointer attribute may be applied to
individual function definitions, generating an alternate prologue and
epilogue that realigns the run-time stack if necessary. This supports
mixing legacy codes that run with a 4-byte aligned stack with modern
codes that keep a 16-byte stack for SSE compatibility.
https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html

 mingw-w64-libraries/winpthreads/src/thread.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/mingw-w64-libraries/winpthreads/src/thread.c 
b/mingw-w64-libraries/winpthreads/src/thread.c
index 565ea48..c771daf 100644
--- a/mingw-w64-libraries/winpthreads/src/thread.c
+++ b/mingw-w64-libraries/winpthreads/src/thread.c
@@ -1454,6 +1454,9 @@ pthread_setcanceltype (int type, int *oldtype)
   return 0;
 }
 
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+__attribute__((force_align_arg_pointer))
+#endif
 int
 pthread_create_wrapper (void *args)
 {
-- 
2.9.1


------------------------------------------------------------------------------
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to