[FFmpeg-devel] [PATCH 1/3] configure: Force mingw's ld to keep the reloc section
Alex Smith
alex.smith at warpsharp.info
Mon Sep 21 06:41:36 CEST 2015
From: Alex Smith <alex.smith at warpsharp.info>
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.
We can combine the nxcompat/dynamicbase check because they were added to
binutils at the same time.
Signed-off-by: Alex Smith <alex.smith at warpsharp.info>
Conflicts:
configure
---
configure | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index d2a25bb..d6ab35a 100755
--- a/configure
+++ b/configure
@@ -4367,8 +4367,6 @@ case $target_os in
LIBTARGET=arm-wince
fi
enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
- check_ldflags -Wl,--nxcompat
- check_ldflags -Wl,--dynamicbase
enabled x86_32 && check_ldflags -Wl,--large-address-aware
shlibdir_default="$bindir_default"
SLIBPREF=""
@@ -4392,6 +4390,17 @@ case $target_os in
objformat="win32"
ranlib=:
enable dos_paths
+ check_ldflags -Wl,--nxcompat,--dynamicbase
+ # 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
--
1.9.5.msysgit.0
More information about the ffmpeg-devel
mailing list