This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, roland/bz10375, created. glibc-2.15-867-g042ccad
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 14 May 2012 23:10:56 -0000
- Subject: GNU C Library master sources branch, roland/bz10375, created. glibc-2.15-867-g042ccad
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, roland/bz10375 has been created
at 042ccad6cc4b247d406279249fad279f2510976c (commit)
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=042ccad6cc4b247d406279249fad279f2510976c
commit 042ccad6cc4b247d406279249fad279f2510976c
Author: Roland McGrath <roland@hack.frob.com>
Date: Mon May 14 16:08:25 2012 -0700
BZ#10375: Configure magic to use -fno-stack-protector if needed.
diff --git a/ChangeLog b/ChangeLog
index 28bb5fd..a942ce8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,15 @@
2012-05-14 Roland McGrath <roland@hack.frob.com>
[BZ #10375]
+ * configure.in (NM): Add AC_CHECK_TOOL for it.
+ (libc_extra_cflags): New substituted variable.
+ Check for -fstack-protector being used implicitly.
+ * configure: Regenerated.
+ * config.make.in (config-extra-cflags): New variable,
+ gets @libc_extra_cflags@.
+ * Makeconfig (CFLAGS): Add $(config-extra-cflags) near the front.
+
+ [BZ #10375]
* configure.in: Check for _FORTIFY_SOURCE being predefined.
(CPPUNDEFS): New substituted variable; add -U_FORTIFY_SOURCE if needed.
* configure: Regenerated.
diff --git a/Makeconfig b/Makeconfig
index b81594f..3a09764 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -668,7 +668,7 @@ CPPFLAGS = $(CPPUNDEFS) $(CPPFLAGS-config) $($(subdir)-CPPFLAGS) \
$(foreach lib,$(libof-$(basename $(@F))) \
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
$(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
-override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \
+override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) $(config-extra-cflags) \
$(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
$(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
$(CFLAGS-$(@F)) \
diff --git a/config.make.in b/config.make.in
index 4fa2608..f0db199 100644
--- a/config.make.in
+++ b/config.make.in
@@ -34,6 +34,7 @@ config-sysdirs = @sysnames@
cflags-cpu = @libc_cv_cc_submachine@
asflags-cpu = @libc_cv_cc_submachine@
+config-extra-cflags = @libc_extra_cflags@
config-cflags-sse4 = @libc_cv_cc_sse4@
config-cflags-avx = @libc_cv_cc_avx@
config-cflags-sse2avx = @libc_cv_cc_sse2avx@
diff --git a/configure b/configure
index fbb4825..029432b 100755
--- a/configure
+++ b/configure
@@ -632,6 +632,7 @@ libc_cv_localedir
libc_cv_slibdir
old_glibc_headers
libc_cv_gcc_unwind_find_fde
+libc_extra_cflags
CPPUNDEFS
sizeof_long_double
EGREP
@@ -666,6 +667,7 @@ libc_cv_gcc_static_libgcc
CXX_SYSINCLUDES
SYSINCLUDES
AUTOCONF
+NM
READELF
SED
MAKEINFO
@@ -5149,6 +5151,98 @@ else
READELF="$ac_cv_prog_READELF"
fi
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ ac_cv_prog_NM="$NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NM="${ac_tool_prefix}nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NM"; then
+ ac_ct_NM=$NM
+ # Extract the first word of "nm", so it can be a program name with args.
+set dummy nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NM"; then
+ ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NM="nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NM=$ac_cv_prog_ac_ct_NM
+if test -n "$ac_ct_NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
+$as_echo "$ac_ct_NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NM" = x; then
+ NM="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NM=$ac_ct_NM
+ fi
+else
+ NM="$ac_cv_prog_NM"
+fi
+
for ac_prog in autoconf
do
@@ -7572,6 +7666,51 @@ if test $libc_cv_predef_fortify_source = yes; then
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC implicitly enables -fstack-protector" >&5
+$as_echo_n "checking whether $CC implicitly enables -fstack-protector... " >&6; }
+if ${libc_cv_predef_stack_protector+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern void foobar (char *);
+int
+main ()
+{
+char large_array[2048]; foobar (large_array);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+libc_undefs=`$NM -u conftest.o |
+ LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
+ 2>&5` || {
+ as_fn_error $? "confusing output from $NM -u" "$LINENO" 5
+}
+echo >&5 "libc_undefs='$libc_undefs'"
+case "$libc_undefs" in
+foobar) libc_cv_predef_stack_protector=no ;;
+'__stack_chk_fail
+foobar') libc_cv_predef_stack_protector=yes ;;
+*) as_fn_error $? "unexpected symbols in test: $libc_undefs" "$LINENO" 5 ;;
+esac
+else
+ as_fn_error $? "test compilation failed" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_predef_stack_protector" >&5
+$as_echo "$libc_cv_predef_stack_protector" >&6; }
+libc_extra_cflags=
+if test $libc_cv_predef_stack_protector = yes; then
+ libc_extra_cflags=-fno-stack-protector
+fi
+
+
### End of automated tests.
### Now run sysdeps configure fragments.
diff --git a/configure.in b/configure.in
index 9dc8c6a..daf2490 100644
--- a/configure.in
+++ b/configure.in
@@ -922,6 +922,7 @@ AC_CHECK_PROG_VER(SED, sed, --version,
SED=: aux_missing="$aux_missing sed")
AC_CHECK_TOOL(READELF, readelf, false)
+AC_CHECK_TOOL(NM, nm, false)
AC_CHECK_PROGS(AUTOCONF, autoconf, no)
case "x$AUTOCONF" in
@@ -2047,6 +2048,39 @@ if test $libc_cv_predef_fortify_source = yes; then
fi
AC_SUBST(CPPUNDEFS)
+dnl Check for silly hacked compilers inserting -fstack-protector.
+dnl This breaks badly for the early startup code we compile, since
+dnl the compiled code can refer to a magic machine-dependent location
+dnl for the canary value before we have sufficient setup for that to
+dnl work. It's also questionable to build all of libc with this flag
+dnl even when you're doing that for most applications you build, since
+dnl libc's code is so heavily-used and performance-sensitive. If we
+dnl ever really want to make that work, it should be enabled explicitly
+dnl in the libc build, not inherited from implicit compiler settings.
+AC_CACHE_CHECK([whether $CC implicitly enables -fstack-protector],
+ libc_cv_predef_stack_protector, [
+AC_TRY_COMPILE([extern void foobar (char *);],
+ [char large_array[2048]; foobar (large_array);], [
+libc_undefs=`$NM -u conftest.o |
+ LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
+ 2>&AS_MESSAGE_LOG_FD` || {
+ AC_MSG_ERROR([confusing output from $NM -u])
+}
+echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
+case "$libc_undefs" in
+foobar) libc_cv_predef_stack_protector=no ;;
+'__stack_chk_fail
+foobar') libc_cv_predef_stack_protector=yes ;;
+*) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;;
+esac],
+ [AC_MSG_ERROR([test compilation failed])])
+])
+libc_extra_cflags=
+if test $libc_cv_predef_stack_protector = yes; then
+ libc_extra_cflags=-fno-stack-protector
+fi
+AC_SUBST(libc_extra_cflags)
+
### End of automated tests.
### Now run sysdeps configure fragments.
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=20b006e84b98a89ba4929dbf15962c38769a3e63
commit 20b006e84b98a89ba4929dbf15962c38769a3e63
Author: Roland McGrath <roland@hack.frob.com>
Date: Mon May 14 15:42:52 2012 -0700
BZ#10375: Configure magic to use -U_FORTIFY_SOURCE if needed.
diff --git a/ChangeLog b/ChangeLog
index e2de309..28bb5fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-05-14 Roland McGrath <roland@hack.frob.com>
+
+ [BZ #10375]
+ * configure.in: Check for _FORTIFY_SOURCE being predefined.
+ (CPPUNDEFS): New substituted variable; add -U_FORTIFY_SOURCE if needed.
+ * configure: Regenerated.
+ * config.make.in (CPPUNDEFS): New substituted variable.
+ * Makeconfig (CPPFLAGS): Put $(CPPUNDEFS) at the beginning.
+ * Makerules ($(stdio_lim:h=st)): Use $(CPPUNDEFS).
+ * time/ctime.c: Don't #undef __OPTIMIZE__ and ctime.
+
2012-05-14 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/configure.in (minimum_kernel): Always
diff --git a/Makeconfig b/Makeconfig
index f68a752..b81594f 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -661,7 +661,8 @@ libio-include = -I$(..)libio
# Note that we can't use -std=* in CPPFLAGS, because it overrides
# the implicit -lang-asm and breaks cpp behavior for .S files--notably
# it causes cpp to stop predefining __ASSEMBLER__.
-CPPFLAGS = $(CPPFLAGS-config) $($(subdir)-CPPFLAGS) $(+includes) $(defines) \
+CPPFLAGS = $(CPPUNDEFS) $(CPPFLAGS-config) $($(subdir)-CPPFLAGS) \
+ $(+includes) $(defines) \
-include $(..)include/libc-symbols.h $(sysdep-CPPFLAGS) \
$(CPPFLAGS-$(suffix $@)) \
$(foreach lib,$(libof-$(basename $(@F))) \
diff --git a/Makerules b/Makerules
index b069763..567a293 100644
--- a/Makerules
+++ b/Makerules
@@ -1227,7 +1227,7 @@ $(stdio_lim:h=st): $(..)stdio-common/stdio_lim.h.in $(..)Rules \
echo '#define _LIBC 1'; \
echo '#include "$(..)misc/sys/uio.h"'; } | \
$(CC) -E -dM -MD -MP -MF $(@:st=dT) -MT '$(@:st=h) $(@:st=d)' \
- $(+includes) -xc - -o $(@:st=hT)
+ $(CPPUNDEFS) $(+includes) -xc - -o $(@:st=hT)
sed $(sed-remove-objpfx) $(sed-remove-dotdot) \
$(@:st=dT) > $(@:st=dt)
mv -f $(@:st=dt) $(@:st=d)
diff --git a/config.make.in b/config.make.in
index 6c4d04e..4fa2608 100644
--- a/config.make.in
+++ b/config.make.in
@@ -104,6 +104,7 @@ CXX = @CXX@
BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@
CPPFLAGS-config = @CPPFLAGS@
+CPPUNDEFS = @CPPUNDEFS@
ASFLAGS-config = @ASFLAGS_config@
AR = @AR@
MAKEINFO = @MAKEINFO@
diff --git a/configure b/configure
index c7cb47d..fbb4825 100755
--- a/configure
+++ b/configure
@@ -632,6 +632,7 @@ libc_cv_localedir
libc_cv_slibdir
old_glibc_headers
libc_cv_gcc_unwind_find_fde
+CPPUNDEFS
sizeof_long_double
EGREP
GREP
@@ -7537,6 +7538,40 @@ _ACEOF
sizeof_long_double=$ac_cv_sizeof_long_double
+CPPUNDEFS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FORTIFY_SOURCE predefine" >&5
+$as_echo_n "checking for _FORTIFY_SOURCE predefine... " >&6; }
+if ${libc_cv_predef_fortify_source+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#ifdef _FORTIFY_SOURCE
+# error bogon
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_cv_predef_fortify_source=no
+else
+ libc_cv_predef_fortify_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_predef_fortify_source" >&5
+$as_echo "$libc_cv_predef_fortify_source" >&6; }
+if test $libc_cv_predef_fortify_source = yes; then
+ CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
+fi
+
+
### End of automated tests.
### Now run sysdeps configure fragments.
diff --git a/configure.in b/configure.in
index 4eb9277..9dc8c6a 100644
--- a/configure.in
+++ b/configure.in
@@ -2031,6 +2031,22 @@ AC_CHECK_SIZEOF(long double, 0)
sizeof_long_double=$ac_cv_sizeof_long_double
AC_SUBST(sizeof_long_double)
+CPPUNDEFS=
+dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
+dnl Since we are building the implementations of the fortified functions here,
+dnl having the macro defined interacts very badly.
+AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
+[AC_TRY_COMPILE([], [
+#ifdef _FORTIFY_SOURCE
+# error bogon
+#endif],
+ [libc_cv_predef_fortify_source=no],
+ [libc_cv_predef_fortify_source=yes])])
+if test $libc_cv_predef_fortify_source = yes; then
+ CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
+fi
+AC_SUBST(CPPUNDEFS)
+
### End of automated tests.
### Now run sysdeps configure fragments.
diff --git a/time/ctime.c b/time/ctime.c
index 28321af..ca2d3ea 100644
--- a/time/ctime.c
+++ b/time/ctime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991-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
@@ -15,12 +15,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#undef __OPTIMIZE__ /* Avoid inline `ctime' function. */
#include <time.h>
-#undef ctime
-
-
/* Return a string as returned by asctime which
is the representation of *T in that form. */
char *
-----------------------------------------------------------------------
hooks/post-receive
--
GNU C Library master sources