summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Driver.cpp2
-rw-r--r--lld/ELF/Writer.cpp7
-rw-r--r--lld/test/ELF/zstack-size.s37
3 files changed, 28 insertions, 18 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index bbac77c01fe..74dfc790fef 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -575,7 +575,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
Config->ZNow = hasZOption(Args, "now");
Config->ZOrigin = hasZOption(Args, "origin");
Config->ZRelro = !hasZOption(Args, "norelro");
- Config->ZStackSize = getZOptionValue(Args, "stack-size", -1);
+ Config->ZStackSize = getZOptionValue(Args, "stack-size", 0);
Config->ZWxneeded = hasZOption(Args, "wxneeded");
Config->OFormatBinary = isOutputFormatBinary(Args);
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 09992cad7d0..100c7727791 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -1257,11 +1257,8 @@ template <class ELFT> std::vector<PhdrEntry> Writer<ELFT>::createPhdrs() {
// PT_GNU_STACK is a special section to tell the loader to make the
// pages for the stack non-executable.
- if (!Config->ZExecstack) {
- PhdrEntry *Hdr = AddHdr(PT_GNU_STACK, PF_R | PF_W);
- if (Config->ZStackSize != uint64_t(-1))
- Hdr->p_memsz = Config->ZStackSize;
- }
+ if (!Config->ZExecstack)
+ AddHdr(PT_GNU_STACK, PF_R | PF_W)->p_memsz = Config->ZStackSize;
// PT_OPENBSD_WXNEEDED is a OpenBSD-specific header to mark the executable
// is expected to perform W^X violations, such as calling mprotect(2) or
diff --git a/lld/test/ELF/zstack-size.s b/lld/test/ELF/zstack-size.s
index 36fbd03766c..23eed0a79ec 100644
--- a/lld/test/ELF/zstack-size.s
+++ b/lld/test/ELF/zstack-size.s
@@ -1,20 +1,33 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
# RUN: ld.lld -z stack-size=0x1000 %t -o %t1
-# RUN: llvm-readobj -program-headers %t1 | FileCheck %s
+# RUN: llvm-readobj -program-headers %t1 | FileCheck %s -check-prefix=CHECK1
+
+# RUN: ld.lld -z stack-size=0 %t -o %t2
+# RUN: llvm-readobj -program-headers %t2 | FileCheck %s -check-prefix=CHECK2
.global _start
_start:
nop
-# CHECK: Type: PT_GNU_STACK (0x6474E551)
-# CHECK-NEXT: Offset: 0x0
-# CHECK-NEXT: VirtualAddress: 0x0
-# CHECK-NEXT: PhysicalAddress: 0x0
-# CHECK-NEXT: FileSize: 0
-# CHECK-NEXT: MemSize: 4096
-# CHECK-NEXT: Flags [ (0x6)
-# CHECK-NEXT: PF_R (0x4)
-# CHECK-NEXT: PF_W (0x2)
-# CHECK-NEXT: ]
-# CHECK-NEXT: Alignment: 0
+# CHECK1: Type: PT_GNU_STACK (0x6474E551)
+# CHECK1-NEXT: Offset: 0x0
+# CHECK1-NEXT: VirtualAddress: 0x0
+# CHECK1-NEXT: PhysicalAddress: 0x0
+# CHECK1-NEXT: FileSize: 0
+# CHECK1-NEXT: MemSize: 4096
+# CHECK1-NEXT: Flags [ (0x6)
+# CHECK1-NEXT: PF_R (0x4)
+# CHECK1-NEXT: PF_W (0x2)
+# CHECK1-NEXT: ]
+
+# CHECK2: Type: PT_GNU_STACK (0x6474E551)
+# CHECK2-NEXT: Offset: 0x0
+# CHECK2-NEXT: VirtualAddress: 0x0
+# CHECK2-NEXT: PhysicalAddress: 0x0
+# CHECK2-NEXT: FileSize: 0
+# CHECK2-NEXT: MemSize: 0
+# CHECK2-NEXT: Flags [ (0x6)
+# CHECK2-NEXT: PF_R (0x4)
+# CHECK2-NEXT: PF_W (0x2)
+# CHECK2-NEXT: ]
OpenPOWER on IntegriCloud