I've worked around this for now by symlinking bin/libssp-0.dll over
lib/libssp.dll.a, not having any other ideas. I've also added
-fstack-protector to the mingwXX_ldflags, as the mingwXX_cflags contain
-D_FORTIFY_SOURCES=2.
So now the toolchain update is pushed, I'll keep an eye on failures
during the upcoming mass rebuild.
Sandro
On 09.07.20 14:36, Yaakov Selkowitz wrote:
> On Thu, 2020-07-09 at 00:07 +0200, Sandro Mani wrote:
>> I'm working on updating the mingw toolchain [1], and am hitting the
>> situation [2] where I build with -fstack-protector in the ldflags, can
>> confirm that -lssp and -lssp_nonshared are automatically added to the
>> ldflags (seen via gcc -v [3] and strace), but I still get i.e. with this
>> minimal testcase:
>>
>> #include <dirent.h>
>> int main () {
>> return closedir (NULL);
>> }
>>
>> $ i686-w64-mingw32-gcc -o test.exe test.c -fstack-protector
>> /usr/lib/gcc/i686-w64-mingw32/10.1.1/../../../../i686-w64-mingw32/bin/ld:
>>
/usr/i686-w64-mingw32/sys-root/mingw/lib/../lib/libmingwex.a(lib32_libmingwex_a-dirent.o):(.text+0x22f):
>> undefined reference to `__strcpy_chk'
>> collect2: error: ld returned 1 exit status
> Perhaps mingw-crt should be built with -fno-stack-protector?
>
>> OTOH, if I write
>>
>> $ i686-w64-mingw32-gcc -o test.exe test.c -fstack-protector
>> /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll
>>
>> it links correctly.
>>
>> The only other thing which came to mind to verify is that the import
>> library references the correct dll, and this appears to be the case:
>>
>> $ i686-w64-mingw32-dlltool -I
>> /usr/i686-w64-mingw32/sys-root/mingw/lib/libssp.dll.a
>> libssp-0.dll
>>
>> I'd appreciate any pointers as I'm pretty much in the dark here.
>>
>> [
1]https://copr.fedorainfracloud.org/coprs/smani/mingw-7.0.0/builds/
>>
>> [2] Specifically when building mingw-gdb, which adds
>> -D_FORTIFY_SOURCES=2 internally, hence adding -fstack-protector to the
>> ldflags
>>
>> [3] I.e. I gtt COLLECT_GCC_OPTIONS='-v' '-o' 'test.exe'
>> '-fstack-protector' '-mtune=generic' '-march=pentiumpro'
>> /usr/libexec/gcc/i686-w64-mingw32/10.1.1/collect2 -plugin
>> /usr/libexec/gcc/i686-w64-mingw32/10.1.1/liblto_plugin.so
>> -plugin-opt=/usr/libexec/gcc/i686-w64-mingw32/10.1.1/lto-wrapper
>> -plugin-opt=-fresolution=/tmp/cckKHr8u.res
>> -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc
>> -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname
>> -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt
>> -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32
>> -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32
>> -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32
>> -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh
>> -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex
>> -plugin-opt=-pass-through=-lmsvcrt
>> --sysroot=/usr/i686-w64-mingw32/sys-root -m i386pe -Bdynamic -o test.exe
>> /usr/i686-w64-mingw32/sys-root/mingw/lib/../lib/crt2.o
>> /usr/lib/gcc/i686-w64-mingw32/10.1.1/crtbegin.o
>> -L/usr/lib/gcc/i686-w64-mingw32/10.1.1
>> -L/usr/lib/gcc/i686-w64-mingw32/10.1.1/../../../../i686-w64-mingw32/lib/../lib
>> -L/usr/i686-w64-mingw32/sys-root/mingw/lib/../lib
>> -L/usr/lib/gcc/i686-w64-mingw32/10.1.1/../../../../i686-w64-mingw32/lib
>> -L/usr/i686-w64-mingw32/sys-root/mingw/lib /tmp/ccpeowDx.o
>> /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll -lssp_nonshared
>> -lssp -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread
>> -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh
>> -lmoldname -lmingwex -lmsvcrt /usr/lib/gcc/i686-w64-mingw32/10.1.1/crtend.o