i386: Add __attribute__ ((gcc_struct)) to struct fenv [PR95418]
authorUros Bizjak <ubizjak@gmail.com>
Mon, 1 Jun 2020 20:23:51 +0000 (22:23 +0200)
committerUros Bizjak <ubizjak@gmail.com>
Mon, 1 Jun 2020 20:29:20 +0000 (22:29 +0200)
Windows ABI (MinGW) is different than Linux ABI when bitfileds are involved.
The following patch adds __attribute__ ((gcc_struct)) to struct fenv in order
to match the layout of x87 state image in memory.

2020-06-01  Uroš Bizjak  <ubizjak@gmail.com>

libatomic/ChangeLog:
* config/x86/fenv.c (struct fenv): Add __attribute__ ((gcc_struct)).

libgcc/ChangeLog:
* config/i386/sfp-exceptions.c (struct fenv):
Add __attribute__ ((gcc_struct)).

libgfortran/ChangeLog:
PR libfortran/95418
* config/fpu-387.h (struct fenv): Add __attribute__ ((gcc_struct)).

libatomic/config/x86/fenv.c
libgcc/config/i386/sfp-exceptions.c
libgfortran/config/fpu-387.h

index 88622c613f318c9f304466dae2fb4a6be91da39d..138a67ff2176fdaca2b2b3e61e269ac092b2d955 100644 (file)
@@ -45,7 +45,7 @@ struct fenv
   unsigned int __data_offset;
   unsigned short int __data_selector;
   unsigned short int __unused5;
-};
+} __attribute__ ((gcc_struct));
 
 #ifdef __SSE_MATH__
 # define __math_force_eval_div(x, y) \
index 72cb0f4d3bb3bc5cbc2b960aeea25101f3f1ed14..3aed0af7c46b2bc6fc79809a5a07184f7a56b503 100644 (file)
@@ -39,7 +39,7 @@ struct fenv
   unsigned int __data_offset;
   unsigned short int __data_selector;
   unsigned short int __unused5;
-};
+} __attribute__ ((gcc_struct));
 
 #ifdef __SSE_MATH__
 # define __math_force_eval_div(x, y) \
index 8b5e758c2caa0b44f39b9baf9ede8117056b6d35..7ff5acdc933bc01c402070cf6d7ac45eee6cc8e1 100644 (file)
@@ -85,7 +85,7 @@ struct fenv
   unsigned short int __data_selector;
   unsigned short int __unused5;
   unsigned int __mxcsr;
-};
+} __attribute__ ((gcc_struct));
 
 /* Check we can actually store the FPU state in the allocated size.  */
 _Static_assert (sizeof(struct fenv) <= (size_t) GFC_FPE_STATE_BUFFER_SIZE,