BZ#10375: Configure magic to use -fno-stack-protector if needed.
This commit is contained in:
parent
61653dfb81
commit
30b99d798f
|
@ -1,5 +1,14 @@
|
||||||
2012-05-16 Roland McGrath <roland@hack.frob.com>
|
2012-05-16 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]
|
[BZ #10375]
|
||||||
* configure.in: Check for _FORTIFY_SOURCE being predefined.
|
* configure.in: Check for _FORTIFY_SOURCE being predefined.
|
||||||
(CPPUNDEFS): New substituted variable; add -U_FORTIFY_SOURCE if needed.
|
(CPPUNDEFS): New substituted variable; add -U_FORTIFY_SOURCE if needed.
|
||||||
|
|
|
@ -668,7 +668,7 @@ CPPFLAGS = $(CPPUNDEFS) $(CPPFLAGS-config) $($(subdir)-CPPFLAGS) \
|
||||||
$(foreach lib,$(libof-$(basename $(@F))) \
|
$(foreach lib,$(libof-$(basename $(@F))) \
|
||||||
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
|
$(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
|
||||||
$(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
|
$(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) \
|
$(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
|
||||||
$(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
|
$(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
|
||||||
$(CFLAGS-$(@F)) \
|
$(CFLAGS-$(@F)) \
|
||||||
|
|
28
NEWS
28
NEWS
|
@ -14,20 +14,20 @@ Version 2.16
|
||||||
3440, 3748, 3768, 3866, 3868, 3906, 3976, 3992, 4026, 4108, 4596, 4822,
|
3440, 3748, 3768, 3866, 3868, 3906, 3976, 3992, 4026, 4108, 4596, 4822,
|
||||||
5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730, 6770, 6794, 6884,
|
5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730, 6770, 6794, 6884,
|
||||||
6890, 6894, 6895, 6907, 6911, 6959, 7064, 9739, 9902, 10110, 10135, 10140,
|
6890, 6894, 6895, 6907, 6911, 6959, 7064, 9739, 9902, 10110, 10135, 10140,
|
||||||
10153, 10210, 10254, 10346, 10545, 10716, 11174, 11322, 11365, 11451,
|
10153, 10210, 10254, 10346, 10375 10545, 10716, 11174, 11322, 11365,
|
||||||
11494, 11521, 11677, 11837, 11959, 12047, 12097, 12193, 12297, 12298,
|
11451, 11494, 11521, 11677, 11837, 11959, 12047, 12097, 12193, 12297,
|
||||||
12301, 12340, 12354, 13058, 13361, 13525, 13526, 13527, 13528, 13529,
|
12298, 12301, 12340, 12354, 13058, 13361, 13525, 13526, 13527, 13528,
|
||||||
13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555, 13556,
|
13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555,
|
||||||
13559, 13563, 13566, 13583, 13592, 13594, 13613, 13618, 13637, 13656,
|
13556, 13559, 13563, 13566, 13583, 13592, 13594, 13613, 13618, 13637,
|
||||||
13658, 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13739,
|
13656, 13658, 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738,
|
||||||
13750, 13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806, 13824,
|
13739, 13750, 13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806,
|
||||||
13840, 13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873,
|
13824, 13840, 13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872,
|
||||||
13879, 13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910, 13911,
|
13873, 13879, 13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910,
|
||||||
13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921,
|
13911, 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920,
|
||||||
13922, 13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942, 13954,
|
13921, 13922, 13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942,
|
||||||
13955, 13956, 13963, 13967, 13970, 13973, 13979, 13983, 13986, 14012,
|
13954, 13955, 13956, 13963, 13967, 13970, 13973, 13979, 13983, 13986,
|
||||||
14027, 14033, 14034, 14040, 14043, 14044, 14049, 14053, 14055, 14064,
|
14012, 14027, 14033, 14034, 14040, 14043, 14044, 14049, 14053, 14055,
|
||||||
14080, 14083, 14103, 14104, 14109
|
14064, 14080, 14083, 14103, 14104, 14109
|
||||||
|
|
||||||
* ISO C11 support:
|
* ISO C11 support:
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ config-sysdirs = @sysnames@
|
||||||
cflags-cpu = @libc_cv_cc_submachine@
|
cflags-cpu = @libc_cv_cc_submachine@
|
||||||
asflags-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-sse4 = @libc_cv_cc_sse4@
|
||||||
config-cflags-avx = @libc_cv_cc_avx@
|
config-cflags-avx = @libc_cv_cc_avx@
|
||||||
config-cflags-sse2avx = @libc_cv_cc_sse2avx@
|
config-cflags-sse2avx = @libc_cv_cc_sse2avx@
|
||||||
|
|
139
configure
vendored
139
configure
vendored
|
@ -632,6 +632,7 @@ libc_cv_localedir
|
||||||
libc_cv_slibdir
|
libc_cv_slibdir
|
||||||
old_glibc_headers
|
old_glibc_headers
|
||||||
libc_cv_gcc_unwind_find_fde
|
libc_cv_gcc_unwind_find_fde
|
||||||
|
libc_extra_cflags
|
||||||
CPPUNDEFS
|
CPPUNDEFS
|
||||||
sizeof_long_double
|
sizeof_long_double
|
||||||
EGREP
|
EGREP
|
||||||
|
@ -666,6 +667,7 @@ libc_cv_gcc_static_libgcc
|
||||||
CXX_SYSINCLUDES
|
CXX_SYSINCLUDES
|
||||||
SYSINCLUDES
|
SYSINCLUDES
|
||||||
AUTOCONF
|
AUTOCONF
|
||||||
|
NM
|
||||||
READELF
|
READELF
|
||||||
SED
|
SED
|
||||||
MAKEINFO
|
MAKEINFO
|
||||||
|
@ -5154,6 +5156,98 @@ else
|
||||||
READELF="$ac_cv_prog_READELF"
|
READELF="$ac_cv_prog_READELF"
|
||||||
fi
|
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
|
for ac_prog in autoconf
|
||||||
do
|
do
|
||||||
|
@ -7577,6 +7671,51 @@ if test $libc_cv_predef_fortify_source = yes; then
|
||||||
fi
|
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.
|
### End of automated tests.
|
||||||
### Now run sysdeps configure fragments.
|
### Now run sysdeps configure fragments.
|
||||||
|
|
||||||
|
|
34
configure.in
34
configure.in
|
@ -927,6 +927,7 @@ AC_CHECK_PROG_VER(SED, sed, --version,
|
||||||
SED=: aux_missing="$aux_missing sed")
|
SED=: aux_missing="$aux_missing sed")
|
||||||
|
|
||||||
AC_CHECK_TOOL(READELF, readelf, false)
|
AC_CHECK_TOOL(READELF, readelf, false)
|
||||||
|
AC_CHECK_TOOL(NM, nm, false)
|
||||||
|
|
||||||
AC_CHECK_PROGS(AUTOCONF, autoconf, no)
|
AC_CHECK_PROGS(AUTOCONF, autoconf, no)
|
||||||
case "x$AUTOCONF" in
|
case "x$AUTOCONF" in
|
||||||
|
@ -2052,6 +2053,39 @@ if test $libc_cv_predef_fortify_source = yes; then
|
||||||
fi
|
fi
|
||||||
AC_SUBST(CPPUNDEFS)
|
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.
|
### End of automated tests.
|
||||||
### Now run sysdeps configure fragments.
|
### Now run sysdeps configure fragments.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue