[committed] i386: Add __attribute__ ((gcc_struct)) to struct fenv [PR95418]

Message ID CAFULd4ZyVdSxiLKp8ZeLiXqCq44rqhAjPjx8p7cuv4Nt7KJ0_A@mail.gmail.com
State New
Headers show
Series
  • [committed] i386: Add __attribute__ ((gcc_struct)) to struct fenv [PR95418]
Related show

Commit Message

Kees Cook via Gcc-patches June 1, 2020, 8:33 p.m.
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)).

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}, and as
stated in the PR, also tested by Markus on MinGW.

Uros.

Patch

diff --git a/libatomic/config/x86/fenv.c b/libatomic/config/x86/fenv.c
index 88622c613f3..138a67ff217 100644
--- a/libatomic/config/x86/fenv.c
+++ b/libatomic/config/x86/fenv.c
@@ -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) \
diff --git a/libgcc/config/i386/sfp-exceptions.c b/libgcc/config/i386/sfp-exceptions.c
index 72cb0f4d3bb..3aed0af7c46 100644
--- a/libgcc/config/i386/sfp-exceptions.c
+++ b/libgcc/config/i386/sfp-exceptions.c
@@ -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) \
diff --git a/libgfortran/config/fpu-387.h b/libgfortran/config/fpu-387.h
index 8b5e758c2ca..7ff5acdc933 100644
--- a/libgfortran/config/fpu-387.h
+++ b/libgfortran/config/fpu-387.h
@@ -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,