Author: robert
Date: 2007-06-11 04:01:10 -0600 (Mon, 11 Jun 2007)
New Revision: 1830
Added:
trunk/gcc/gcc-4.1.2-fstack_protector-1.patch
Log:
Added gcc specs patch for -fstack-protector-all
Added: trunk/gcc/gcc-4.1.2-fstack_protector-1.patch
===================================================================
--- trunk/gcc/gcc-4.1.2-fstack_protector-1.patch
(rev 0)
+++ trunk/gcc/gcc-4.1.2-fstack_protector-1.patch 2007-06-11 10:01:10 UTC
(rev 1830)
@@ -0,0 +1,259 @@
+Submitted By: Robert Connolly <robert at linuxfromscratch dot org> (ashes)
+Date: 2007-06-11
+Initial Package Version: 4.1.2
+Upstream Status: Not Submitted
+Origin: me
+Description: This patch makes '-fstack-protector-all -Wstack-protector' the
+default for C, C++, ObjC, and ObjC++, reduces the minimum array size from 8
+to 4 bytes for '-fstack-protector', and modifies the documentation to match.
+This patch also modifies gcc/configure to detect libc support for
+__stack_chk_fail from libc.a, and works with uClibc and Glibc regardless of
+whether they are installed to /tools or /usr. If you do not have a libc.a,
+then use 'make gcc_cv_libc_provides_ssp=yes' if your libc has
+__stack_chk_fail.
+
+If your libc does not provide SSP, then libssp will be linked automatically.
+
+diff -Naur gcc-4.1.2.orig/gcc/Makefile.in gcc-4.1.2/gcc/Makefile.in
+--- gcc-4.1.2.orig/gcc/Makefile.in 2006-11-01 14:40:44.000000000 +0000
++++ gcc-4.1.2/gcc/Makefile.in 2007-06-10 16:38:22.000000000 +0000
+@@ -536,7 +536,7 @@
+ #
+ LIBGCC2_DEBUG_CFLAGS = -g
+ LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS)
$(TARGET_LIBGCC2_CFLAGS) \
+- $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
++ $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -fno-stack-protector \
+ -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
+ $(INHIBIT_LIBC_CFLAGS)
+
+@@ -549,7 +549,7 @@
+
+ # Options to use when compiling crtbegin/end.
+ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
+- -finhibit-size-directive -fno-inline-functions -fno-exceptions \
++ -finhibit-size-directive -fno-inline-functions -fno-exceptions
-fno-stack-protector \
+ -fno-zero-initialized-in-bss -fno-unit-at-a-time \
+ $(INHIBIT_LIBC_CFLAGS)
+
+diff -Naur gcc-4.1.2.orig/gcc/common.opt gcc-4.1.2/gcc/common.opt
+--- gcc-4.1.2.orig/gcc/common.opt 2006-05-17 18:38:58.000000000 +0000
++++ gcc-4.1.2/gcc/common.opt 2007-06-10 16:38:22.000000000 +0000
+@@ -114,7 +114,7 @@
+ Warn when one local variable shadows another
+
+ Wstack-protector
+-Common Var(warn_stack_protect)
++Common Var(warn_stack_protect) Init(1)
+ Warn when not issuing stack smashing protection for some reason
+
+ Wstrict-aliasing
+@@ -821,7 +821,7 @@
+ Use propolice as a stack protection method
+
+ fstack-protector-all
+-Common Report RejectNegative Var(flag_stack_protect, 2) VarExists
++Common Report RejectNegative Var(flag_stack_protect, 2) Init(2)
+ Use a stack protection method for every function
+
+ fstrength-reduce
+diff -Naur gcc-4.1.2.orig/gcc/configure gcc-4.1.2/gcc/configure
+--- gcc-4.1.2.orig/gcc/configure 2006-11-13 22:09:55.000000000 +0000
++++ gcc-4.1.2/gcc/configure 2007-06-10 16:38:22.000000000 +0000
+@@ -16165,46 +16165,34 @@
+
+ fi
+
++if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
++ if test "x$with_sysroot" = x; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
++ elif test "x$with_sysroot" = xyes; then
++
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
++ else
++ glibc_header_dir="${with_sysroot}/usr/include"
++ fi
++else
++ glibc_header_dir=/usr/include
++fi
++
+ # Test for stack protector support in target C library.
+-case "$target" in
+- *-*-linux*)
+- echo "$as_me:$LINENO: checking __stack_chk_fail in target GNU C library"
>&5
++echo "$as_me:$LINENO: checking __stack_chk_fail in target GNU C library" >&5
+ echo $ECHO_N "checking __stack_chk_fail in target GNU C library... $ECHO_C"
>&6
+ if test "${gcc_cv_libc_provides_ssp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ gcc_cv_libc_provides_ssp=no
+- if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+- if test "x$with_sysroot" = x; then
+- glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+- elif test "x$with_sysroot" = xyes; then
+-
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
+- else
+- glibc_header_dir="${with_sysroot}/usr/include"
+- fi
+- else
+- glibc_header_dir=/usr/include
+- fi
+- # glibc 2.4 and later provides __stack_chk_fail and
+- # either __stack_chk_guard, or TLS access to stack guard canary.
+- if test -f $glibc_header_dir/features.h \
+- && $EGREP '^[ ]*#[ ]*define[ ]+__GNU_LIBRARY__[
]+([1-9][0-9]|[6-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- if $EGREP '^[ ]*#[ ]*define[ ]+__GLIBC__[
]+([1-9][0-9]|[3-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- gcc_cv_libc_provides_ssp=yes
+- elif $EGREP '^[ ]*#[ ]*define[ ]+__GLIBC__[ ]+2' \
+- $glibc_header_dir/features.h > /dev/null \
+- && $EGREP '^[ ]*#[ ]*define[ ]+__GLIBC_MINOR__[
]+([1-9][0-9]|[4-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- gcc_cv_libc_provides_ssp=yes
+- fi
+- fi
++ if $gcc_cv_nm $($CC -print-file-name=libc.a) 2>&1 | \
++ grep '__stack_chk_fail' > /dev/null; then
++ gcc_cv_libc_provides_ssp=yes
++ else
++ gcc_cv_libc_provides_ssp=no
++ fi
+ fi
+ echo "$as_me:$LINENO: result: $gcc_cv_libc_provides_ssp" >&5
+-echo "${ECHO_T}$gcc_cv_libc_provides_ssp" >&6 ;;
+- *) gcc_cv_libc_provides_ssp=no ;;
+-esac
++echo "${ECHO_T}$gcc_cv_libc_provides_ssp" >&6
+ if test x$gcc_cv_libc_provides_ssp = xyes; then
+
+ cat >>confdefs.h <<\_ACEOF
+diff -Naur gcc-4.1.2.orig/gcc/configure.ac gcc-4.1.2/gcc/configure.ac
+--- gcc-4.1.2.orig/gcc/configure.ac 2006-11-13 22:09:55.000000000 +0000
++++ gcc-4.1.2/gcc/configure.ac 2007-06-10 16:38:22.000000000 +0000
+@@ -3091,40 +3091,28 @@
+ [Define to PREFIX/include if cpp should also search that directory.])
+ fi
+
++if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
++ if test "x$with_sysroot" = x; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
++ elif test "x$with_sysroot" = xyes; then
++
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
++ else
++ glibc_header_dir="${with_sysroot}/usr/include"
++ fi
++else
++ glibc_header_dir=/usr/include
++fi
++
+ # Test for stack protector support in target C library.
+-case "$target" in
+- *-*-linux*)
+- AC_CACHE_CHECK(__stack_chk_fail in target GNU C library,
+- gcc_cv_libc_provides_ssp,
+- [gcc_cv_libc_provides_ssp=no
+- if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+- if test "x$with_sysroot" = x; then
+- glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+- elif test "x$with_sysroot" = xyes; then
+-
glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
+- else
+- glibc_header_dir="${with_sysroot}/usr/include"
+- fi
+- else
+- glibc_header_dir=/usr/include
+- fi
+- # glibc 2.4 and later provides __stack_chk_fail and
+- # either __stack_chk_guard, or TLS access to stack guard canary.
+- if test -f $glibc_header_dir/features.h \
+- && $EGREP '^@<:@ @:>@*#[ ]*define[
]+__GNU_LIBRARY__[ ]+([1-9][0-9]|[6-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- if $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[
]+([1-9][0-9]|[3-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- gcc_cv_libc_provides_ssp=yes
+- elif $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[
]+2' \
+- $glibc_header_dir/features.h > /dev/null \
+- && $EGREP '^@<:@ @:>@*#[ ]*define[
]+__GLIBC_MINOR__[ ]+([1-9][0-9]|[4-9])' \
+- $glibc_header_dir/features.h > /dev/null; then
+- gcc_cv_libc_provides_ssp=yes
+- fi
+- fi]) ;;
+- *) gcc_cv_libc_provides_ssp=no ;;
+-esac
++AC_CACHE_CHECK(__stack_chk_fail in target GNU C library,
++ gcc_cv_libc_provides_ssp,
++ [gcc_cv_libc_provides_ssp=no
++ if $gcc_cv_nm $($CC -print-file-name=libc.a) 2>&1 | \
++ grep '__stack_chk_fail' > /dev/null; then
++ gcc_cv_libc_provides_ssp=yes
++ else
++ gcc_cv_libc_provides_ssp=no
++ fi])
+ if test x$gcc_cv_libc_provides_ssp = xyes; then
+ AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1,
+ [Define if your target C library provides stack protector support])
+diff -Naur gcc-4.1.2.orig/gcc/doc/invoke.texi gcc-4.1.2/gcc/doc/invoke.texi
+--- gcc-4.1.2.orig/gcc/doc/invoke.texi 2006-09-25 21:21:58.000000000 +0000
++++ gcc-4.1.2/gcc/doc/invoke.texi 2007-06-10 16:38:22.000000000 +0000
+@@ -5696,12 +5696,13 @@
+ Emit extra code to check for buffer overflows, such as stack smashing
+ attacks. This is done by adding a guard variable to functions with
+ vulnerable objects. This includes functions that call alloca, and
+-functions with buffers larger than 8 bytes. The guards are initialized
++functions with buffers larger than 4 bytes. The guards are initialized
+ when a function is entered and then checked when the function exits.
+ If a guard check fails, an error message is printed and the program exits.
+
+ @item -fstack-protector-all
+ Like @option{-fstack-protector} except that all functions are protected.
++This is the default. Disable this option with @option{-fno-stack-protector}.
+
+ @item --param @[EMAIL PROTECTED]
+ @opindex param
+diff -Naur gcc-4.1.2.orig/gcc/gcc.c gcc-4.1.2/gcc/gcc.c
+--- gcc-4.1.2.orig/gcc/gcc.c 2006-11-07 14:26:21.000000000 +0000
++++ gcc-4.1.2/gcc/gcc.c 2007-06-10 16:40:51.000000000 +0000
+@@ -674,7 +674,7 @@
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+ #define LINK_SSP_SPEC "%{fstack-protector:}"
+ #else
+-#define LINK_SSP_SPEC
"%{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}"
++#define LINK_SSP_SPEC "%{!fno-stack-protector:-lssp_nonshared -lssp}"
+ #endif
+ #endif
+
+diff -Naur gcc-4.1.2.orig/gcc/params.def gcc-4.1.2/gcc/params.def
+--- gcc-4.1.2.orig/gcc/params.def 2006-04-27 14:24:15.000000000 +0000
++++ gcc-4.1.2/gcc/params.def 2007-06-10 16:38:22.000000000 +0000
+@@ -532,7 +532,7 @@
+ DEFPARAM (PARAM_SSP_BUFFER_SIZE,
+ "ssp-buffer-size",
+ "The lower bound for a buffer to be considered for stack smashing
protection",
+- 8, 1, 0)
++ 4, 1, 0)
+
+ /* When we thread through a block we have to make copies of the
+ statements within the block. Clearly for large blocks the code
+diff -Naur gcc-4.1.2.orig/libssp/Makefile.am gcc-4.1.2/libssp/Makefile.am
+--- gcc-4.1.2.orig/libssp/Makefile.am 2006-02-28 00:29:00.000000000 +0000
++++ gcc-4.1.2/libssp/Makefile.am 2007-06-10 16:38:22.000000000 +0000
+@@ -19,7 +19,7 @@
+ version_dep =
+ endif
+
+-AM_CFLAGS = -Wall
++AM_CFLAGS = -Wall -fno-stack-protector
+
+ toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la
+
+diff -Naur gcc-4.1.2.orig/libssp/Makefile.in gcc-4.1.2/libssp/Makefile.in
+--- gcc-4.1.2.orig/libssp/Makefile.in 2006-09-29 21:27:38.000000000 +0000
++++ gcc-4.1.2/libssp/Makefile.in 2007-06-10 16:38:22.000000000 +0000
+@@ -221,7 +221,7 @@
+ @[EMAIL PROTECTED] = -Wl,--version-script=$(srcdir)/ssp.map
+ @[EMAIL PROTECTED] =
+ @[EMAIL PROTECTED] = $(srcdir)/ssp.map
+-AM_CFLAGS = -Wall
++AM_CFLAGS = -Wall -fno-stack-protector
+ toolexeclib_LTLIBRARIES = libssp.la libssp_nonshared.la
+ libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include
+ nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h
--
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page