[V2,1/2] x86: Don't add crtfastmath.o for -shared
Checks
Commit Message
Update in V2:
Split -shared change into a separate commit and add some documentation
for it.
Bootstrapped and regtested on x86_64-pc-linu-gnu{-m32,}.
Ok of trunk?
Don't add crtfastmath.o for -shared to avoid changing the MXCSR register
when loading a shared library. crtfastmath.o will be used only when
building executables.
PR target/55522
* config/i386/gnu-user-common.h (GNU_USER_TARGET_MATHFILE_SPEC):
Don't add crtfastmath.o for -shared.
* doc/invoke.texi (-shared): Add related documentation.
---
gcc/config/i386/gnu-user-common.h | 2 +-
gcc/doc/invoke.texi | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
Comments
On Thu, Dec 15, 2022 at 7:23 AM liuhongt <hongtao.liu@intel.com> wrote:
>
> Update in V2:
> Split -shared change into a separate commit and add some documentation
> for it.
> Bootstrapped and regtested on x86_64-pc-linu-gnu{-m32,}.
> Ok of trunk?
>
> Don't add crtfastmath.o for -shared to avoid changing the MXCSR register
> when loading a shared library. crtfastmath.o will be used only when
> building executables.
>
> PR target/55522
> * config/i386/gnu-user-common.h (GNU_USER_TARGET_MATHFILE_SPEC):
> Don't add crtfastmath.o for -shared.
> * doc/invoke.texi (-shared): Add related documentation.
OK.
Thanks,
Uros.
> ---
> gcc/config/i386/gnu-user-common.h | 2 +-
> gcc/doc/invoke.texi | 3 ++-
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/config/i386/gnu-user-common.h b/gcc/config/i386/gnu-user-common.h
> index cab9be2bfb7..9910cd64363 100644
> --- a/gcc/config/i386/gnu-user-common.h
> +++ b/gcc/config/i386/gnu-user-common.h
> @@ -47,7 +47,7 @@ along with GCC; see the file COPYING3. If not see
>
> /* Similar to standard GNU userspace, but adding -ffast-math support. */
> #define GNU_USER_TARGET_MATHFILE_SPEC \
> - "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
> + "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}} \
> %{mpc32:crtprec32.o%s} \
> %{mpc64:crtprec64.o%s} \
> %{mpc80:crtprec80.o%s}"
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index cb40b38b73a..cba4f19f4f4 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -17656,7 +17656,8 @@ needs to build supplementary stub code for constructors to work. On
> multi-libbed systems, @samp{gcc -shared} must select the correct support
> libraries to link against. Failing to supply the correct flags may lead
> to subtle defects. Supplying them in cases where they are not necessary
> -is innocuous.}
> +is innocuous. For x86, crtfastmath.o will not be added when
> +@option{-shared} is specified. }
>
> @item -shared-libgcc
> @itemx -static-libgcc
> --
> 2.27.0
>
@@ -47,7 +47,7 @@ along with GCC; see the file COPYING3. If not see
/* Similar to standard GNU userspace, but adding -ffast-math support. */
#define GNU_USER_TARGET_MATHFILE_SPEC \
- "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
+ "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}} \
%{mpc32:crtprec32.o%s} \
%{mpc64:crtprec64.o%s} \
%{mpc80:crtprec80.o%s}"
@@ -17656,7 +17656,8 @@ needs to build supplementary stub code for constructors to work. On
multi-libbed systems, @samp{gcc -shared} must select the correct support
libraries to link against. Failing to supply the correct flags may lead
to subtle defects. Supplying them in cases where they are not necessary
-is innocuous.}
+is innocuous. For x86, crtfastmath.o will not be added when
+@option{-shared} is specified. }
@item -shared-libgcc
@itemx -static-libgcc