diff options
-rw-r--r-- | lld/ELF/Driver.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/Writer.cpp | 7 | ||||
-rw-r--r-- | lld/test/ELF/zstack-size.s | 37 |
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: ] |