summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/Driver.cpp5
-rw-r--r--lld/test/COFF/arm64-dynamicbase.s8
-rw-r--r--lld/test/COFF/armnt-dynamicbase.test3
3 files changed, 16 insertions, 0 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 016efc8a02e..a3d5124f9e4 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -1078,6 +1078,11 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
Config->is64() &&
Args.hasFlag(OPT_highentropyva, OPT_highentropyva_no, true);
+ if (!Config->DynamicBase &&
+ (Config->Machine == ARMNT || Config->Machine == ARM64))
+ error("/dynamicbase:no is not compatible with " +
+ machineToStr(Config->Machine));
+
// Handle /entry and /dll
if (auto *Arg = Args.getLastArg(OPT_entry)) {
Config->Entry = addUndefined(mangle(Arg->getValue()));
diff --git a/lld/test/COFF/arm64-dynamicbase.s b/lld/test/COFF/arm64-dynamicbase.s
new file mode 100644
index 00000000000..d4cb12c1c8f
--- /dev/null
+++ b/lld/test/COFF/arm64-dynamicbase.s
@@ -0,0 +1,8 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-windows %s -o %t.obj
+// RUN: not lld-link -entry:_start -subsystem:console %t.obj -out:%t.exe -dynamicbase:no 2>&1 | FileCheck %s
+ .globl _start
+_start:
+ ret
+
+# CHECK: dynamicbase:no is not compatible with arm64
diff --git a/lld/test/COFF/armnt-dynamicbase.test b/lld/test/COFF/armnt-dynamicbase.test
new file mode 100644
index 00000000000..50d3bea54fd
--- /dev/null
+++ b/lld/test/COFF/armnt-dynamicbase.test
@@ -0,0 +1,3 @@
+# RUN: yaml2obj < %p/Inputs/armnt-executable.obj.yaml > %t.obj
+# RUN: not lld-link /out:%t.exe /entry:mainCRTStartup /subsystem:console %t.obj /dynamicbase:no 2>&1 | FileCheck %s
+# CHECK: dynamicbase:no is not compatible with arm
OpenPOWER on IntegriCloud