Re: Bug: linking shared libraries on Cygwin results in undefined references to __stack_chck_guard for code compiled with -fstack-protector

Richard PALO <[email protected]>
Newsgroups gmane.comp.gnu.libtool.patches,gmane.comp.gnu.libtool.bugs
Message-ID <[email protected]>
Le 02/11/13 23:45, Richard PALO a écrit :
> Le 02/06/10 05:24, Yaakov (Cygwin/X) a écrit :
>> On Sat, 15 May 2010 09:07:49 +0200
>> Bart Van Assche <[email protected]> wrote:
>>> This behavior has been observed with libtool version 2.2.6.
>>
>> Bug confirmed.  When code is compiled with -fstack-protector{,-all},
>> GCC "emits extra code to check for buffer overflows, such as stack
>> smashing attacks".  This extra code uses symbols from libssp, and
>> therefore (at least) Cygwin's GCC specs contain:
>>
>> *link_ssp:
>> %{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp}
>>
>> Therefore, when libtool fails to pass -fstack-protector{,-all} at link
>> stage, the link fails.
>>
>> Patch attached.  (Yes, I have a copyright assignment on file.)
>>
>>
>> Yaakov
>> Cygwin/X
>>
> 
> I've done some limited testing of this patch on a SunOS distro with 
> pkgsrc, and it certainly helps a number of cases since it is gcc that 
> generates the necessary '-lssp_nonshared -lssp' libs for linking (at 
> least in absence of '-nostdlib').
> 
> Please include in the upcoming version.
> 
> 
> 
> 

I'd like to propose a slight modification this which, in addition, seems to get over the
issue (at least on solaris) of c++ shared libraries linking '-nostdlib'.  

This could easily be adapted for other hosts using g++. Note, it is harmless if '-dumpspecs'
or no spec with fstack-protector* is available.

It appears there was no warm welcome in tossing the '-nostdlib' setup for g++ shared libraries 
for solaris, so this seems to be a reasonable workaround.

-- 
Richard PALO
0001-workaround-for-nostdlib-with-fstack-protector-on-sol.patch (text/x-patch, 1.9 KB)
From 5dfcf84c8243441f30a3c852791b8d46bc4d2c53 Mon Sep 17 00:00:00 2001
From: Richard PALO <[email protected]>
Date: Thu, 24 Sep 2015 13:23:56 +0200
Subject: [PATCH] workaround for -nostdlib with -fstack-protector on solaris

---
 build-aux/ltmain.in | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
index 0c40da0..7a6356b 100644
--- a/build-aux/ltmain.in
+++ b/build-aux/ltmain.in
@@ -5364,8 +5364,7 @@ func_mode_link ()
       # -stdlib=*            select c++ std lib with clang
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
-      -specs=*)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*|-specs=*)
         func_quote_for_eval "$arg"
 	arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
@@ -5374,6 +5373,25 @@ func_mode_link ()
         continue
         ;;
 
+      -fstack-protector*)
+        func_quote_for_eval "$arg"
+        arg=$func_quote_for_eval_result
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+
+        # Explicitly add solaris ssp libs to postdeps to counter
+        # linking with g++ -nostdlib when supplied -fstack-protector*
+        test CXX = "$tagname" && {
+          case $host_os in
+          solaris*)
+            func_append postdeps " `$compile_command -dumpspecs 2>/dev/null | $SED -n '/fstack-protector/{s/^.*://;s/}$//;p;}'`"
+            ;;
+          esac
+        }
+        continue
+        ;;
+
       -Z*)
         if test os2 = "`expr $host : '.*\(os2\)'`"; then
           # OS/2 uses -Zxxx to specify OS/2-specific options
-- 
2.5.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.