210 lines
9.7 KiB
Plaintext
210 lines
9.7 KiB
Plaintext
#! /bin/sh -e
|
|
|
|
# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++.
|
|
# DP: Build libgcc using -fno-stack-protector.
|
|
|
|
dir=
|
|
if [ $# -eq 3 -a "$2" = '-d' ]; then
|
|
pdir="-d $3"
|
|
dir="$3/"
|
|
elif [ $# -ne 1 ]; then
|
|
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
|
exit 1
|
|
fi
|
|
case "$1" in
|
|
-patch)
|
|
patch $pdir -f --no-backup-if-mismatch -p0 < $0
|
|
;;
|
|
-unpatch)
|
|
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
|
|
;;
|
|
*)
|
|
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
|
exit 1
|
|
esac
|
|
exit 0
|
|
|
|
--- gcc/doc/invoke.texi.orig 2007-11-29 11:21:52.863409623 +0000
|
|
+++ gcc/doc/invoke.texi 2007-11-29 11:22:35.014045455 +0000
|
|
@@ -6553,6 +6553,10 @@
|
|
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.
|
|
|
|
+NOTE: In Ubuntu 6.10 and later versions this option is enabled by default
|
|
+for C, C++, ObjC, ObjC++, if neither @option{-no-fstack-protector}
|
|
+nor @option{-nostdlib} are found.
|
|
+
|
|
@item -fstack-protector-all
|
|
@opindex fstack-protector-all
|
|
Like @option{-fstack-protector} except that all functions are protected.
|
|
--- gcc/objc/lang-specs.h.orig 2007-11-29 11:21:52.863409623 +0000
|
|
+++ gcc/objc/lang-specs.h 2007-11-29 11:22:35.014045455 +0000
|
|
@@ -30,13 +30,13 @@
|
|
%{traditional|ftraditional|traditional-cpp:\
|
|
%eGNU Objective C no longer supports traditional compilation}\
|
|
%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
|
|
- cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
|
|
+ cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\
|
|
%{!save-temps:%{!no-integrated-cpp:\
|
|
- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
|
|
+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
|
{".mi", "@objc-cpp-output", 0, 0, 0},
|
|
{"@objc-cpp-output",
|
|
- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
|
+ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
|
{"@objective-c-header",
|
|
"%{E|M|MM:cc1obj -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}\
|
|
@@ -45,10 +45,10 @@
|
|
%{traditional|ftraditional|traditional-cpp:\
|
|
%eGNU Objective C no longer supports traditional compilation}\
|
|
%{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
|
|
- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
|
+ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
|
-o %g.s %{!o*:--output-pch=%i.gch}\
|
|
%W{o*:--output-pch=%*}%V}\
|
|
%{!save-temps:%{!no-integrated-cpp:\
|
|
- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
|
+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
|
-o %g.s %{!o*:--output-pch=%i.gch}\
|
|
%W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
|
|
--- gcc/objcp/lang-specs.h.orig 2007-11-29 11:21:52.863409623 +0000
|
|
+++ gcc/objcp/lang-specs.h 2007-11-29 11:22:35.014045455 +0000
|
|
@@ -36,7 +36,7 @@
|
|
%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
|
|
cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
|
|
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
|
- %(cc1_options) %2 %{+e1*}\
|
|
+ %(cc1_options) %(ssp_default) %2 %{+e1*}\
|
|
-o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
|
|
CPLUSPLUS_CPP_SPEC, 0, 0},
|
|
{"@objective-c++",
|
|
@@ -46,15 +46,15 @@
|
|
%(cpp_options) %2 -o %{save-temps:%b.mii} %{!save-temps:%g.mii} \n}\
|
|
cc1objplus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.mii} %{!save-temps:%g.mii}}\
|
|
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
|
- %(cc1_options) %2 %{+e1*}\
|
|
+ %(cc1_options) %(ssp_default) %2 %{+e1*}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}",
|
|
CPLUSPLUS_CPP_SPEC, 0, 0},
|
|
{".mii", "@objective-c++-cpp-output", 0, 0, 0},
|
|
{"@objective-c++-cpp-output",
|
|
"%{!M:%{!MM:%{!E:\
|
|
- cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
|
|
+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
|
{"@objc++-cpp-output",
|
|
"%{!M:%{!MM:%{!E:\
|
|
- cc1objplus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
|
|
+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
|
--- gcc/cp/lang-specs.h.orig 2007-11-29 11:21:52.863409623 +0000
|
|
+++ gcc/cp/lang-specs.h 2007-11-29 11:22:35.014045455 +0000
|
|
@@ -47,7 +47,7 @@
|
|
%(cpp_options) %2 -o %{save-temps:%b.ii} %{!save-temps:%g.ii} \n}\
|
|
cc1plus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.ii} %{!save-temps:%g.ii}}\
|
|
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
|
- %(cc1_options) %2 %{+e1*}\
|
|
+ %(cc1_options) %(ssp_default) %2 %{+e1*}\
|
|
%{!fsyntax-only:-o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}}",
|
|
CPLUSPLUS_CPP_SPEC, 0, 0},
|
|
{"@c++",
|
|
@@ -57,11 +57,11 @@
|
|
%(cpp_options) %2 -o %{save-temps:%b.ii} %{!save-temps:%g.ii} \n}\
|
|
cc1plus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.ii} %{!save-temps:%g.ii}}\
|
|
%{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
|
- %(cc1_options) %2 %{+e1*}\
|
|
+ %(cc1_options) %(ssp_default) %2 %{+e1*}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}",
|
|
CPLUSPLUS_CPP_SPEC, 0, 0},
|
|
{".ii", "@c++-cpp-output", 0, 0, 0},
|
|
{"@c++-cpp-output",
|
|
"%{!M:%{!MM:%{!E:\
|
|
- cc1plus -fpreprocessed %i %(cc1_options) %2 %{+e*}\
|
|
+ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2 %{+e*}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
|
--- gcc/Makefile.in.orig 2007-11-29 11:21:52.863409623 +0000
|
|
+++ gcc/Makefile.in 2007-11-29 11:23:23.254773156 +0000
|
|
@@ -559,6 +559,7 @@
|
|
LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
|
|
$(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
|
|
-DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
|
|
+ -fno-stack-protector \
|
|
$(INHIBIT_LIBC_CFLAGS)
|
|
|
|
# Additional options to use when compiling libgcc2.a.
|
|
@@ -572,6 +573,7 @@
|
|
CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
|
-finhibit-size-directive -fno-inline-functions -fno-exceptions \
|
|
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
|
|
+ -fno-stack-protector \
|
|
$(INHIBIT_LIBC_CFLAGS)
|
|
|
|
# Additional sources to handle exceptions; overridden by targets as needed.
|
|
--- gcc/gcc.c.orig 2007-11-29 11:21:52.873409773 +0000
|
|
+++ gcc/gcc.c 2007-11-29 11:22:35.024045606 +0000
|
|
@@ -701,6 +701,10 @@
|
|
#endif
|
|
#endif
|
|
|
|
+#ifndef SSP_DEFAULT_SPEC
|
|
+#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!nostdlib:-fstack-protector}}"
|
|
+#endif
|
|
+
|
|
#ifndef LINK_PIE_SPEC
|
|
#ifdef HAVE_LD_PIE
|
|
#define LINK_PIE_SPEC "%{pie:-pie} "
|
|
@@ -754,6 +758,7 @@
|
|
static const char *cc1plus_spec = CC1PLUS_SPEC;
|
|
static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
|
|
static const char *link_ssp_spec = LINK_SSP_SPEC;
|
|
+static const char *ssp_default_spec = SSP_DEFAULT_SPEC;
|
|
static const char *asm_spec = ASM_SPEC;
|
|
static const char *asm_final_spec = ASM_FINAL_SPEC;
|
|
static const char *link_spec = LINK_SPEC;
|
|
@@ -827,6 +832,7 @@
|
|
%{--help=*:--help=%(VALUE)}\
|
|
%{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
|
|
%{fsyntax-only:-o %j} %{-param*}\
|
|
+ %(ssp_default)\
|
|
%{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants}\
|
|
%{coverage:-fprofile-arcs -ftest-coverage}";
|
|
|
|
@@ -988,15 +994,15 @@
|
|
%{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
|
|
%(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i} \n\
|
|
cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} \
|
|
- %(cc1_options)}\
|
|
+ %(cc1_options) %(ssp_default)}\
|
|
%{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
|
|
- cc1 %(cpp_unique_options) %(cc1_options)}}}\
|
|
+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\
|
|
%{!fsyntax-only:%(invoke_as)}} \
|
|
%{combine:\
|
|
%{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
|
|
%(cpp_options) -o %{save-temps:%b.i} %{!save-temps:%g.i}}\
|
|
%{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
|
|
- cc1 %(cpp_unique_options) %(cc1_options)}}\
|
|
+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}\
|
|
%{!fsyntax-only:%(invoke_as)}}}}}}", 0, 1, 1},
|
|
{"-",
|
|
"%{!E:%e-E or -x required when input is from standard input}\
|
|
@@ -1019,7 +1025,7 @@
|
|
%W{o*:--output-pch=%*}%V}}}}}}", 0, 0, 0},
|
|
{".i", "@cpp-output", 0, 1, 0},
|
|
{"@cpp-output",
|
|
- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0},
|
|
+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0},
|
|
{".s", "@assembler", 0, 1, 0},
|
|
{"@assembler",
|
|
"%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 1, 0},
|
|
@@ -1579,6 +1585,7 @@
|
|
INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
|
|
INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec),
|
|
INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec),
|
|
+ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec),
|
|
INIT_STATIC_SPEC ("endfile", &endfile_spec),
|
|
INIT_STATIC_SPEC ("link", &link_spec),
|
|
INIT_STATIC_SPEC ("lib", &lib_spec),
|