aboutsummaryrefslogtreecommitdiff
path: root/contrib/guix/patches/nsis-disable-installer-reloc.patch
blob: 4914527e56bebeb6cd6a82c7f23f6dea698d4766 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Patch NSIS so that it's installer stubs, produced at NSIS build time,
do not contain .reloc sections, which will exist by default when using
binutils/ld 2.36+.

This ultimately fixes an issue when running the installer with the
"Force randomization for images (Mandatory ASLR)" setting active.

This patch has not yet been sent upstream, because it's not clear if this
is the best fix, for the underlying issue, which seems to be that makensis
doesn't account for .reloc sections when it builds installers.

The existence of a reloc section shouldn't be a problem, and, if anything,
is actually a requirement for working ASLR. All other Windows binaries we
produce contain them, and function correctly when under the same
"Force randomization for images (Mandatory ASLR)" setting.

See:
https://github.com/bitcoin/bitcoin/issues/25726
https://sourceforge.net/p/nsis/bugs/1131/

--- a/SCons/Config/gnu
+++ b/SCons/Config/gnu
@@ -102,6 +102,7 @@ stub_env.Append(LINKFLAGS = ['-mwindows'])          # build windows executables
 stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG'])    # no standard libraries
 stub_env.Append(LINKFLAGS = ['$ALIGN_FLAG'])        # 512 bytes align
 stub_env.Append(LINKFLAGS = ['$MAP_FLAG'])          # generate map file
+stub_env.Append(LINKFLAGS = ['-Wl,--disable-reloc-section'])
 
 conf = FlagsConfigure(stub_env)
 conf.CheckCompileFlag('-fno-tree-loop-distribute-patterns')  # GCC 10: Don't generate msvcrt!memmove calls (bug #1248)