From f62c8abcfbf0d2e7f0a6c6c1dde53158e6fc4e59 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 2 Nov 2012 18:43:27 -0700 Subject: Compile x86 rtld with -mno-sse -mno-mmx --- ChangeLog | 12 ++++++++++ include/bits/stdlib-float.h | 4 ++++ nptl/ChangeLog | 6 +++++ nptl/sysdeps/x86_64/tls.h | 11 +++++++-- stdlib/Makefile | 2 +- stdlib/bits/stdlib-float.h | 31 ++++++++++++++++++++++++++ stdlib/stdlib.h | 6 +---- sysdeps/x86/Makefile | 4 ++++ sysdeps/x86_64/multiarch/strcasestr-nonascii.c | 3 ++- 9 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 include/bits/stdlib-float.h create mode 100644 stdlib/bits/stdlib-float.h create mode 100644 sysdeps/x86/Makefile diff --git a/ChangeLog b/ChangeLog index be5ab22729..fdb2ccb1ab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2012-11-02 H.J. Lu + + * stdlib/Makefile (headers): Add bits/stdlib-float.h. + * stdlib/stdlib.h (atof): Moved to ... + * include/bits/stdlib-float.h: Here. New file. + * stdlib/stdlib.h: Include . + * stdlib/bits/stdlib-float.h: New file. + * sysdeps/x86/Makefile (CFLAGS-.os): Compile rtld routines with + -mno-sse -mno-mmx. + * sysdeps/x86_64/multiarch/strcasestr-nonascii.c: Include + . + 2012-11-02 Joseph Myers * conform/conformtest.pl (@headers): Add fenv.h. diff --git a/include/bits/stdlib-float.h b/include/bits/stdlib-float.h new file mode 100644 index 0000000000..d3f5c5b927 --- /dev/null +++ b/include/bits/stdlib-float.h @@ -0,0 +1,4 @@ +/* No floating-point inline functions in rtld. */ +#ifndef IS_IN_rtld +# include +#endif diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 1c0595be4a..4db686cacd 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2012-11-02 H.J. Lu + + * sysdeps/x86_64/tls.h: Don't include . + (__128bits): New struct typedef. + (tcbhead_t): Replace __m128 with __128bits. + 2012-10-30 Aurelien Jarno Joseph Myers diff --git a/nptl/sysdeps/x86_64/tls.h b/nptl/sysdeps/x86_64/tls.h index b651d1cfa8..bc60a511fb 100644 --- a/nptl/sysdeps/x86_64/tls.h +++ b/nptl/sysdeps/x86_64/tls.h @@ -27,7 +27,14 @@ # include # include # include -# include + +/* Replacement type for __m128 since this file is included by ld.so, + which is compiled with -mno-sse. It must not change the alignment + of rtld_savespace_sse. */ +typedef struct +{ + int i[4]; +} __128bits; /* Type for the dtv. */ @@ -64,7 +71,7 @@ typedef struct void *__private_tm[5]; long int __unused2; /* Have space for the post-AVX register size. */ - __m128 rtld_savespace_sse[8][4] __attribute__ ((aligned (32))); + __128bits rtld_savespace_sse[8][4] __attribute__ ((aligned (32))); void *__padding[8]; } tcbhead_t; diff --git a/stdlib/Makefile b/stdlib/Makefile index 57830a8cb9..5e99d7f7a9 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -20,7 +20,7 @@ # subdir := stdlib -headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h \ +headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \ monetary.h bits/monetary-ldbl.h \ inttypes.h stdint.h bits/wordsize.h \ errno.h sys/errno.h bits/errno.h \ diff --git a/stdlib/bits/stdlib-float.h b/stdlib/bits/stdlib-float.h new file mode 100644 index 0000000000..46f3a32841 --- /dev/null +++ b/stdlib/bits/stdlib-float.h @@ -0,0 +1,31 @@ +/* Floating-point inline functions for stdlib.h. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _STDLIB_H +# error "Never use directly; include instead." +#endif + +#ifdef __USE_EXTERN_INLINES +__BEGIN_NAMESPACE_STD +__extern_inline double +__NTH (atof (const char *__nptr)) +{ + return strtod (__nptr, (char **) NULL); +} +__END_NAMESPACE_STD +#endif /* Optimizing and Inlining. */ diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h index cf3f39ca84..0eb982cbbc 100644 --- a/stdlib/stdlib.h +++ b/stdlib/stdlib.h @@ -274,11 +274,6 @@ extern long double strtold_l (const char *__restrict __nptr, #ifdef __USE_EXTERN_INLINES __BEGIN_NAMESPACE_STD -__extern_inline double -__NTH (atof (const char *__nptr)) -{ - return strtod (__nptr, (char **) NULL); -} __extern_inline int __NTH (atoi (const char *__nptr)) { @@ -953,6 +948,7 @@ extern int getloadavg (double __loadavg[], int __nelem) __THROW __nonnull ((1)); #endif +#include /* Define some macros helping to catch buffer overflows. */ #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile new file mode 100644 index 0000000000..f25d1e2415 --- /dev/null +++ b/sysdeps/x86/Makefile @@ -0,0 +1,4 @@ +ifeq ($(subdir),elf) +CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ + -mno-sse -mno-mmx) +endif diff --git a/sysdeps/x86_64/multiarch/strcasestr-nonascii.c b/sysdeps/x86_64/multiarch/strcasestr-nonascii.c index a1f9968848..db84a43ac0 100644 --- a/sysdeps/x86_64/multiarch/strcasestr-nonascii.c +++ b/sysdeps/x86_64/multiarch/strcasestr-nonascii.c @@ -16,7 +16,8 @@ License along with the GNU C Library; if not, see . */ -# include +#include +#include /* Similar to __m128i_strloadu. Convert to lower case for none-POSIX/C -- cgit v1.2.3