Skip to content

Commit

Permalink
A new try at getting -fstack-protector working, by adding it to the
Browse files Browse the repository at this point in the history
gcc link flags so that any implementation dependant libraries are also
linked in.

p4raw-id: //depot/perl@32669
  • Loading branch information
nwc10 committed Dec 20, 2007
1 parent 01c2a94 commit 6682be1
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
22 changes: 18 additions & 4 deletions Configure
Expand Up @@ -1328,7 +1328,7 @@ libswanted_uselargefiles=''
: List of libraries we want.
: If anyone needs extra -lxxx, put those in a hint file.
libswanted="sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun"
libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD"
libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD ssp"
: We probably want to search /usr/shlib before most other libraries.
: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
Expand Down Expand Up @@ -5047,17 +5047,19 @@ esac

: argument order is deliberate, as the flag will start with - which set could
: think is an option
checkccflag='check=$1; flag=$2;
checkccflag='check=$1; flag=$2; callback=$3;
echo " ";
echo "Checking if your compiler accepts $flag" 2>&1;
echo "int main(void) { return 0; }" > gcctest.c;
if $cc -O2 $flag -o gcctest gcctest.c; then
if $cc -O2 $flag -o gcctest gcctest.c && ./gcctest; then
echo "Yes, it does." 2>&1;
case "$ccflags" in
*$check*)
echo "Leaving current flags $ccflags alone." 2>&1
;;
*) dflt="$dflt $flag" ;;
*) dflt="$dflt $flag";
eval $callback
;;
esac
else
echo "Nope, it does not, but that is ok." 2>&1;
Expand Down Expand Up @@ -5098,6 +5100,18 @@ default|recommended)
eval $checkccflag
;;
esac

# on x86_64 (at least) we require an extra library (libssp) in the
# link command line. This library is not named, so I infer that it is
# an implementation detail that may change. Hence the safest approach
# is to add the flag to the flags passed to the compiler at link time,
# as that way the compiler can do the right implementation dependant
# thing. (NWC)
case "$gccversion" in
?*) set stack-protector -fstack-protector 'ldflags="$ldflags -fstack-protector"'
eval $checkccflag
;;
esac
;;
esac

Expand Down
2 changes: 1 addition & 1 deletion cflags.SH
Expand Up @@ -134,7 +134,7 @@ case "$gccversion" in
'') ;;
[12]*) ;; # gcc versions 1 (gasp!) and 2 are not good for this.
Intel*) ;; # # Is that you, Intel C++?
*) for opt in -ansi -pedantic -std=c89 -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat -fstack-protector
*) for opt in -ansi -pedantic -std=c89 -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat
do
case " $ccflags " in
*" $opt "*) ;; # Skip if already there.
Expand Down

0 comments on commit 6682be1

Please sign in to comment.