diff options
| -rw-r--r-- | lld/COFF/Driver.cpp | 5 | ||||
| -rw-r--r-- | lld/test/COFF/arm64-dynamicbase.s | 8 | ||||
| -rw-r--r-- | lld/test/COFF/armnt-dynamicbase.test | 3 |
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 |

