[V2,1/2] x86: Don't add crtfastmath.o for -shared

Message ID 20221215062137.3128845-1-hongtao.liu@intel.com
State Accepted
Headers
Series [V2,1/2] x86: Don't add crtfastmath.o for -shared |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

liuhongt Dec. 15, 2022, 6:21 a.m. UTC
  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

Uros Bizjak Dec. 16, 2022, 9:50 a.m. UTC | #1
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
>
  

Patch

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