This patch allows you to configure GCC to explicitly (not) add
-lssp_nonshared -lssp link options when the -fstack-protector options
are provided, by overriding the inferred default setting for
TARGET_LIBC_PROVIDES_SSP. The specific use case this is for is a
bare-metal target where the runtime support is provided by an external
BSP library. Without the patch, you get linker errors about the missing
libraries.
Is this OK? I tested with an x86_64-linux-gnu bootstrap as well as both
nios2-elf and nios2-linux-gnu (requiring another patch still in my queue).
-Sandra
2017-10-08 Sandra Loosemore <san...@codesourcery.com>
gcc/
* configure.ac (--enable-libssp): New.
(gcc_cv_libc_provides_ssp): Check for explicit setting before
trying to determine target-specific default. Adjust indentation.
* configure: Regenerated.
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac (revision 253502)
+++ gcc/configure.ac (working copy)
@@ -5751,10 +5751,25 @@ if test x$gcc_cv_solaris_crts = xyes; th
[Define if the system-provided CRTs are present on Solaris.])
fi
+AC_ARG_ENABLE(libssp,
+[AS_HELP_STRING([--enable-libssp], [enable linking against libssp])],
+[case "${enableval}" in
+ yes|no)
+ ;;
+ *)
+ AC_MSG_ERROR(unknown libssp setting $enableval)
+ ;;
+esac], [])
+
# Test for stack protector support in target C library.
AC_CACHE_CHECK(__stack_chk_fail in target C library,
- gcc_cv_libc_provides_ssp,
- [gcc_cv_libc_provides_ssp=no
+ gcc_cv_libc_provides_ssp,
+ [gcc_cv_libc_provides_ssp=no
+ if test "x$enable_libssp" = "xno"; then
+ gcc_cv_libc_provides_ssp=yes
+ elif test "x$enable_libssp" = "xyes"; then
+ gcc_cv_libc_provides_ssp=no
+ else
case "$target" in
*-*-musl*)
# All versions of musl provide stack protector
@@ -5791,8 +5806,9 @@ AC_CACHE_CHECK(__stack_chk_fail in targe
AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
[echo "no __stack_chk_fail on this target"])
;;
- *) gcc_cv_libc_provides_ssp=no ;;
- esac])
+ *) gcc_cv_libc_provides_ssp=no ;;
+ esac
+ fi])
if test x$gcc_cv_libc_provides_ssp = xyes; then
AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,