diff options
author | Denis Kaganovich <mahatma@eu.by> | 2016-10-20 22:01:39 +0200 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-11-15 14:15:19 -0500 |
commit | c7409aded44634411a19b0b7178b7faa237835e6 (patch) | |
tree | a3fbfec4d7a785a397fe9bb2fed98c7dbf86b855 | |
parent | 001f81ad1e792dddd75aa8a6f9d1d9b0ba8dc16e (diff) | |
download | glibc-c7409aded44634411a19b0b7178b7faa237835e6.tar.gz glibc-c7409aded44634411a19b0b7178b7faa237835e6.tar.xz glibc-c7409aded44634411a19b0b7178b7faa237835e6.zip |
configure: accept __stack_chk_fail_local for ssp support too [BZ #20662]
When glibc is compiled with gcc 6.2 that has been configured with --enable-default-pie and --enable-default-ssp, the configure script fails to detect that the compiler has ssp turned on by default when being built for i686-linux-gnu. This is because gcc is emitting __stack_chk_fail_local but the script is only looking for __stack_chk_fail. Support both. Example output: checking whether x86_64-pc-linux-gnu-gcc -m32 -Wl,-O1 -Wl,--as-needed implicitly enables -fstack-protector... no
-rw-r--r-- | ChangeLog | 9 | ||||
-rwxr-xr-x | configure | 8 | ||||
-rw-r--r-- | configure.ac | 8 |
3 files changed, 19 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index e88b7603ed..7b7c5115a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2016-10-20 Denis Kaganovich <mahatma@eu.by> + Magnus Granberg <zorry@gentoo.org> + Mike Frysinger <vapier@gentoo.org> + + [BZ #20662] + * configure.ac (libc_cv_predef_stack_protector): Also check for + __stack_chk_fail_local symbols. + * configure: Regenerated. + 2016-11-15 Florian Weimer <fweimer@redhat.com> * sysdeps/s390/s390-64/setjmp.S (NEED_COMPAT_SYMBOLS): New macro. diff --git a/configure b/configure index e80e0ad56c..d9f8c06bca 100755 --- a/configure +++ b/configure @@ -6340,12 +6340,14 @@ echo >&5 "libc_undefs='$libc_undefs'" # symbols (resolved by the linker), so filter out unknown symbols. # This will fail to produce the correct result if the compiler # defaults to -fstack-protector but this produces an undefined symbol -# other than __stack_chk_fail. However, compilers like that have not -# been encountered in practice. -libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'` +# other than __stack_chk_fail or __stack_chk_fail_local. However, +# compilers like that have not been encountered in practice. +libc_undefs=`echo "$libc_undefs" | \ + egrep '^(foobar|__stack_chk_fail|__stack_chk_fail_local)$'` case "$libc_undefs" in foobar) libc_cv_predef_stack_protector=no ;; '__stack_chk_fail +foobar'|'__stack_chk_fail_local foobar') libc_cv_predef_stack_protector=yes ;; *) as_fn_error $? "unexpected symbols in test: $libc_undefs" "$LINENO" 5 ;; esac diff --git a/configure.ac b/configure.ac index a64aeb9979..de0a40f1a7 100644 --- a/configure.ac +++ b/configure.ac @@ -1667,12 +1667,14 @@ echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'" # symbols (resolved by the linker), so filter out unknown symbols. # This will fail to produce the correct result if the compiler # defaults to -fstack-protector but this produces an undefined symbol -# other than __stack_chk_fail. However, compilers like that have not -# been encountered in practice. -libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'` +# other than __stack_chk_fail or __stack_chk_fail_local. However, +# compilers like that have not been encountered in practice. +libc_undefs=`echo "$libc_undefs" | \ + egrep '^(foobar|__stack_chk_fail|__stack_chk_fail_local)$'` case "$libc_undefs" in foobar) libc_cv_predef_stack_protector=no ;; '__stack_chk_fail +foobar'|'__stack_chk_fail_local foobar') libc_cv_predef_stack_protector=yes ;; *) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;; esac], |