diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 18:56:13 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 18:57:13 +0000 |
commit | 82dd75a7f436a19047325d62182590c9f9e23a78 (patch) | |
tree | 60ca20c8cf2b0d178d84725c0715471f76df97e1 /sysdeps/i386/Makefile | |
parent | 0bbb676a2342367c4e52b35e890f24667dabb348 (diff) | |
parent | 963c37d5c0eb62b38f8764b23931c0dcdd497a13 (diff) |
Merge commit 'refs/top-bases/t/tls' into t/tls
Diffstat (limited to 'sysdeps/i386/Makefile')
-rw-r--r-- | sysdeps/i386/Makefile | 58 |
1 files changed, 15 insertions, 43 deletions
diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile index 168512fc32..c0a4fe15d4 100644 --- a/sysdeps/i386/Makefile +++ b/sysdeps/i386/Makefile @@ -5,6 +5,14 @@ asm-CPPFLAGS += -DGAS_SYNTAX # The i386 `long double' is a distinct type we support. long-double-fcts = yes +ifeq ($(subdir),math) +# These functions change the rounding mode internally and need to +# update both the SSE2 rounding mode and the 387 rounding mode. See +# the handling of MATH_SET_BOTH_ROUNDING_MODES in +# sysdeps/i386/fpu/fenv_private.h. +CFLAGS-e_gamma_r.c += -DMATH_SET_BOTH_ROUNDING_MODES +endif + ifeq ($(subdir),string) sysdep_routines += cacheinfo endif @@ -19,50 +27,10 @@ CFLAGS-dl-load.c += -Wno-unused CFLAGS-dl-reloc.c += -Wno-unused endif -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -fexceptions -endif - -# Most of the glibc routines don't ever call user defined callbacks -# nor use any FPU or SSE* and as such don't need bigger %esp alignment -# than 4 bytes. -# Lots of routines in math will use FPU, so make math subdir an exception -# here. -# In gcc 4.6 (and maybe earlier?) giving -mpreferred-stack-boundary=2 is -# an error, so don't try to reduce it here like we used to. We still -# explicit set -mpreferred-stack-boundary=4 the places where it matters, -# in case an older compiler defaulted to 2. -ifeq ($(subdir),math) -sysdep-CFLAGS += -mpreferred-stack-boundary=4 -else ifeq ($(subdir),csu) -sysdep-CFLAGS += -mpreferred-stack-boundary=4 gen-as-const-headers += link-defines.sym else -# Likewise, any function which calls user callbacks -uses-callbacks += -mpreferred-stack-boundary=4 -# Likewise, any stack alignment tests -stack-align-test-flags += -malign-double -mpreferred-stack-boundary=4 -endif -endif - -# And a couple of other routines -ifeq ($(subdir),stdlib) -CFLAGS-exit.c += -mpreferred-stack-boundary=4 -CFLAGS-cxa_finalize.c += -mpreferred-stack-boundary=4 -endif -ifeq ($(subdir),elf) -CFLAGS-dl-init.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-fini.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-open.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-close.c += -mpreferred-stack-boundary=4 -CFLAGS-dl-error.c += -mpreferred-stack-boundary=4 -endif -ifeq ($(subdir),dlfcn) -CFLAGS-dlopen.c += -mpreferred-stack-boundary=4 -CFLAGS-dlopenold.c += -mpreferred-stack-boundary=4 -CFLAGS-dlclose.c += -mpreferred-stack-boundary=4 -CFLAGS-dlerror.c += -mpreferred-stack-boundary=4 +stack-align-test-flags += -malign-double endif ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS))) @@ -84,16 +52,20 @@ 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. +# With SSE disabled, ensure -fpmath is not set to use sse either. +rtld-CFLAGS += -mno-sse -mno-mmx -mfpmath=387 +ifeq ($(subdir),elf) CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ - -mno-sse -mno-mmx) + $(rtld-CFLAGS)) 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) +else +CFLAGS-.os += $(if $(filter rtld-%.os,$(@F)), $(rtld-CFLAGS)) endif |