From: H.J. Lu Date: Wed, 26 Aug 2015 14:55:42 +0000 (-0700) Subject: Don't disable SSE in x86-64 ld.so X-Git-Tag: glibc-2.23~556 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38d22f9f48a84b441c5777aff103f5b980243b5f;p=thirdparty%2Fglibc.git Don't disable SSE in x86-64 ld.so Since x86-64 ld.so preserves vector registers now, we can use SSE in x86-64 ld.so. We should run tst-ld-sse-use.sh only on i386. * sysdeps/x86/Makefile [$(subdir) == elf] (CFLAGS-.os, tests-special, $(objpfx)tst-ld-sse-use.out): Moved to ... * sysdeps/i386/Makefile [$(subdir) == elf] (CFLAGS-.os, tests-special, $(objpfx)tst-ld-sse-use.out): Here. Update comments. * sysdeps/x86_64/Makefile [$(subdir) == elf] (CFLAGS-.os): Add -mno-mmx for $(all-rtld-routines). * sysdeps/x86/tst-ld-sse-use.sh: Moved to ... * sysdeps/i386/tst-ld-sse-use.sh: Here. Replace x86-64 with i386. --- diff --git a/ChangeLog b/ChangeLog index 72255512a57..478a0096579 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2015-08-26 H.J. Lu + + * sysdeps/x86/Makefile [$(subdir) == elf] (CFLAGS-.os, + tests-special, $(objpfx)tst-ld-sse-use.out): Moved to ... + * sysdeps/i386/Makefile [$(subdir) == elf] (CFLAGS-.os, + tests-special, $(objpfx)tst-ld-sse-use.out): Here. Update + comments. + * sysdeps/x86_64/Makefile [$(subdir) == elf] (CFLAGS-.os): Add + -mno-mmx for $(all-rtld-routines). + * sysdeps/x86/tst-ld-sse-use.sh: Moved to ... + * sysdeps/i386/tst-ld-sse-use.sh: Here. Replace x86-64 with + i386. + 2015-08-26 Stefan Liebler * sysdeps/generic/unwind.h diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile index 717d8e74544..168512fc327 100644 --- a/sysdeps/i386/Makefile +++ b/sysdeps/i386/Makefile @@ -83,3 +83,17 @@ endif ifeq ($(subdir),csu) gen-as-const-headers += tlsdesc.sym endif + +ifeq ($(subdir),elf) +# Make sure no code in ld.so uses mm/xmm/ymm/zmm registers on i386 since +# the first 3 mm/xmm/ymm/zmm registers are used to pass vector parameters +# which must be preserved. +CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ + -mno-sse -mno-mmx) + +tests-special += $(objpfx)tst-ld-sse-use.out +$(objpfx)tst-ld-sse-use.out: ../sysdeps/i386/tst-ld-sse-use.sh $(objpfx)ld.so + @echo "Checking ld.so for SSE register use. This will take a few seconds..." + $(BASH) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@; \ + $(evaluate-test) +endif diff --git a/sysdeps/x86/tst-ld-sse-use.sh b/sysdeps/i386/tst-ld-sse-use.sh similarity index 97% rename from sysdeps/x86/tst-ld-sse-use.sh rename to sysdeps/i386/tst-ld-sse-use.sh index 839de18546d..85a06510b99 100755 --- a/sysdeps/x86/tst-ld-sse-use.sh +++ b/sysdeps/i386/tst-ld-sse-use.sh @@ -1,5 +1,5 @@ #! /bin/bash -# Make sure no code in ld.so uses xmm/ymm/zmm registers on x86-64. +# Make sure no code in ld.so uses xmm/ymm/zmm registers on i386. # Copyright (C) 2009-2015 Free Software Foundation, Inc. # This file is part of the GNU C Library. diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile index c262fdf4877..0de4f42168c 100644 --- a/sysdeps/x86/Makefile +++ b/sysdeps/x86/Makefile @@ -1,14 +1,3 @@ -ifeq ($(subdir),elf) -CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ - -mno-sse -mno-mmx) - -tests-special += $(objpfx)tst-ld-sse-use.out -$(objpfx)tst-ld-sse-use.out: ../sysdeps/x86/tst-ld-sse-use.sh $(objpfx)ld.so - @echo "Checking ld.so for SSE register use. This will take a few seconds..." - $(BASH) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@; \ - $(evaluate-test) -endif - ifeq ($(subdir),csu) gen-as-const-headers += cpu-features-offsets.sym rtld-global-offsets.sym endif diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile index e50bcadf510..6c283187a86 100644 --- a/sysdeps/x86_64/Makefile +++ b/sysdeps/x86_64/Makefile @@ -19,6 +19,10 @@ gen-as-const-headers += locale-defines.sym endif ifeq ($(subdir),elf) +# There is no good reason to use MMX in x86-64 ld.so with GCC. +CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ + -mno-mmx) + sysdep-dl-routines += tlsdesc dl-tlsdesc tests += ifuncmain8