configure: Force mingw's ld to keep the reloc section
authorAlex Smith <alex.smith@warpsharp.info>
Mon, 21 Sep 2015 04:41:36 +0000 (00:41 -0400)
committerMichael Niedermayer <michael@niedermayer.cc>
Tue, 22 Sep 2015 23:11:53 +0000 (01:11 +0200)
Binutils will always strip the relocation information from executable
files even if it needs it (dynamicbase/ASLR).  We can work around this
by using the pic-executable flag combined with setting the correct entry
point since apparently ld forgets what that should be.  This problem
affects both 32 and 64-bit mingw-w64.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
configure

index da9f42e..f6bc622 100755 (executable)
--- a/configure
+++ b/configure
@@ -4392,6 +4392,16 @@ case $target_os in
         objformat="win32"
         ranlib=:
         enable dos_paths
+        # Lets work around some stupidity in binutils.
+        # ld will strip relocations from executables even though we need them
+        # for dynamicbase (ASLR).  Using -pie does retain the reloc section
+        # however ld then forgets what the entry point should be (oops) so we
+        # have to manually (re)set it.
+        if enabled x86_32; then
+            add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup
+        elif enabled x86_64; then
+            add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup
+        fi
         ;;
     win32|win64)
         disable symver