aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-08-26 07:55:42 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-08-26 07:55:42 -0700
commit38d22f9f48a84b441c5777aff103f5b980243b5f (patch)
treedcdb83615ee08ced45c18c00c23edca112ed1cb1
parentb022830bebc23456fc40825c6b5507bc0f52381f (diff)
downloadglibc-38d22f9f48a84b441c5777aff103f5b980243b5f.tar
glibc-38d22f9f48a84b441c5777aff103f5b980243b5f.tar.gz
glibc-38d22f9f48a84b441c5777aff103f5b980243b5f.tar.bz2
glibc-38d22f9f48a84b441c5777aff103f5b980243b5f.zip
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.
-rw-r--r--ChangeLog13
-rw-r--r--sysdeps/i386/Makefile14
-rwxr-xr-xsysdeps/i386/tst-ld-sse-use.sh (renamed from sysdeps/x86/tst-ld-sse-use.sh)2
-rw-r--r--sysdeps/x86/Makefile11
-rw-r--r--sysdeps/x86_64/Makefile4
5 files changed, 32 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 72255512a5..478a009657 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-08-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ * 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 <stli@linux.vnet.ibm.com>
* sysdeps/generic/unwind.h
diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile
index 717d8e7454..168512fc32 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
index 839de18546..85a06510b9 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 c262fdf487..0de4f42168 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 e50bcadf51..6c283187a8 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