configure option to override TARGET_LIBC_PROVIDES_SSP
diff mbox series

Message ID 59DADB2B.5090608@codesourcery.com
State New
Headers show
Series
  • configure option to override TARGET_LIBC_PROVIDES_SSP
Related show

Commit Message

Sandra Loosemore Oct. 9, 2017, 2:12 a.m. UTC
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

Comments

Joseph Myers Oct. 9, 2017, 3:13 p.m. UTC | #1
The install.texi documentation for --disable-libssp only says "Specify 
that the run-time libraries for stack smashing protection should not be 
built.".  I think it needs updating to mention these additional effects as 
well.
Sandra Loosemore Oct. 9, 2017, 8:08 p.m. UTC | #2
On 10/09/2017 09:13 AM, Joseph Myers wrote:
> The install.texi documentation for --disable-libssp only says "Specify
> that the run-time libraries for stack smashing protection should not be
> built.".  I think it needs updating to mention these additional effects as
> well.

Oops.  :")  How about this version?

-Sandra
2017-10-09  Sandra Loosemore  <sandra@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.
	* doc/install.texi (Configuration): Expand --disable-libssp
	documentation.
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,
Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi	(revision 253502)
+++ gcc/doc/install.texi	(working copy)
@@ -1665,7 +1665,8 @@ not be built.
 
 @item --disable-libssp
 Specify that the run-time libraries for stack smashing protection
-should not be built.
+should not be built or linked against.  On many targets library support
+is provided by the C library instead.
 
 @item --disable-libquadmath
 Specify that the GCC quad-precision math library should not be built.
Gerald Pfeifer Oct. 11, 2017, 2:21 p.m. UTC | #3
On Mon, 9 Oct 2017, Sandra Loosemore wrote:
>> The install.texi documentation for --disable-libssp only says "Specify
> that the run-time libraries for stack smashing protection should not be
>> built.".  I think it needs updating to mention these additional effects as
>> well.
> Oops.  :")  How about this version?

Makes sense to me, thanks.  (Though better give Joseph a day or two
to chime in as well, since he spotted this originally.)

Gerald
Sandra Loosemore Oct. 26, 2017, 5:13 p.m. UTC | #4
This one.

https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00537.html

There was discussion about documenting this, but the actual configure 
change hasn't been reviewed yet.

-Sandra
Jeff Law Oct. 30, 2017, 11:15 p.m. UTC | #5
On 10/09/2017 02:08 PM, Sandra Loosemore wrote:
> On 10/09/2017 09:13 AM, Joseph Myers wrote:
>> The install.texi documentation for --disable-libssp only says "Specify
>> that the run-time libraries for stack smashing protection should not be
>> built.".  I think it needs updating to mention these additional effects as
>>
>> well.
> 
> Oops.  :")  How about this version?
> 
> -Sandra
> 
> 
> 
> libssp.log
> 
> 
> 2017-10-09  Sandra Loosemore  <sandra@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.
> 	* doc/install.texi (Configuration): Expand --disable-libssp
> 	documentation.
OK.

Jeff
Joseph Myers Oct. 30, 2017, 11:48 p.m. UTC | #6
On Mon, 9 Oct 2017, Sandra Loosemore wrote:

> On 10/09/2017 09:13 AM, Joseph Myers wrote:
> > The install.texi documentation for --disable-libssp only says "Specify
> > that the run-time libraries for stack smashing protection should not be
> > built.".  I think it needs updating to mention these additional effects as
> > well.
> 
> Oops.  :")  How about this version?

OK with the argument to AC_MSG_ERROR []-quoted (i.e.,

AC_MSG_ERROR([unknown libssp setting $enableval])

which should not change the generated configure script) - the preferred 
autoconf style is generally for each macro argument to have one level of 
[] quotes unless there is some reason for a different level of quoting, 
although gcc/configure.ac is not wonderfully consistent about this.

Patch
diff mbox series

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,