Skip to content
Permalink
Browse files

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.
  • Loading branch information
H.J. Lu
H.J. Lu committed Aug 26, 2015
1 parent b022830 commit 38d22f9f48a84b441c5777aff103f5b980243b5f
Showing with 32 additions and 12 deletions.
  1. +13 −0 ChangeLog
  2. +14 −0 sysdeps/i386/Makefile
  3. +1 −1 sysdeps/{x86 → i386}/tst-ld-sse-use.sh
  4. +0 −11 sysdeps/x86/Makefile
  5. +4 −0 sysdeps/x86_64/Makefile
@@ -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
@@ -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
@@ -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.

@@ -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
@@ -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

0 comments on commit 38d22f9

Please sign in to comment.
You can’t perform that action at this time.