From 3520b766ee279dfcde5f21a208f2f61fac18f6e6 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Fri, 19 May 2017 20:47:28 +0000 Subject: Merging r298567: ------------------------------------------------------------------------ r298567 | davide | 2017-03-22 20:54:16 -0400 (Wed, 22 Mar 2017) | 3 lines [ELF] Add -z nodlopen option. Patch by Mark Kettenis. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/lld/branches/release_40@303455 91177308-0d34-0410-b5e6-96231b3b80d8 --- ELF/Config.h | 1 + ELF/Driver.cpp | 1 + ELF/SyntheticSections.cpp | 2 ++ test/ELF/dt_flags.s | 6 +++--- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ELF/Config.h b/ELF/Config.h index b7706205a..f58e3e571 100644 --- a/ELF/Config.h +++ b/ELF/Config.h @@ -135,6 +135,7 @@ struct Configuration { bool ZCombreloc; bool ZExecstack; bool ZNodelete; + bool ZNodlopen; bool ZNow; bool ZOrigin; bool ZRelro; diff --git a/ELF/Driver.cpp b/ELF/Driver.cpp index 4f4466a8a..e3719d765 100644 --- a/ELF/Driver.cpp +++ b/ELF/Driver.cpp @@ -548,6 +548,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->ZCombreloc = !hasZOption(Args, "nocombreloc"); Config->ZExecstack = hasZOption(Args, "execstack"); Config->ZNodelete = hasZOption(Args, "nodelete"); + Config->ZNodlopen = hasZOption(Args, "nodlopen"); Config->ZNow = hasZOption(Args, "now"); Config->ZOrigin = hasZOption(Args, "origin"); Config->ZRelro = !hasZOption(Args, "norelro"); diff --git a/ELF/SyntheticSections.cpp b/ELF/SyntheticSections.cpp index b673a4ece..d1b6755ab 100644 --- a/ELF/SyntheticSections.cpp +++ b/ELF/SyntheticSections.cpp @@ -816,6 +816,8 @@ template void DynamicSection::addEntries() { DtFlags |= DF_SYMBOLIC; if (Config->ZNodelete) DtFlags1 |= DF_1_NODELETE; + if (Config->ZNodlopen) + DtFlags1 |= DF_1_NOOPEN; if (Config->ZNow) { DtFlags |= DF_BIND_NOW; DtFlags1 |= DF_1_NOW; diff --git a/test/ELF/dt_flags.s b/test/ELF/dt_flags.s index a1d8d7743..431f83df7 100644 --- a/test/ELF/dt_flags.s +++ b/test/ELF/dt_flags.s @@ -2,19 +2,19 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t # RUN: ld.lld -shared %t -o %t.so -# RUN: ld.lld -z now -z nodelete -z origin -Bsymbolic %t %t.so -o %t1 +# RUN: ld.lld -z now -z nodelete -z nodlopen -z origin -Bsymbolic %t %t.so -o %t1 # RUN: ld.lld %t %t.so -o %t2 # RUN: llvm-readobj -dynamic-table %t1 | FileCheck -check-prefix=FLAGS %s # RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s # FLAGS: DynamicSection [ # FLAGS: 0x000000000000001E FLAGS ORIGIN SYMBOLIC BIND_NOW -# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE ORIGIN +# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE NOOPEN ORIGIN # FLAGS: ] # CHECK: DynamicSection [ # CHECK-NOT: 0x000000000000001E FLAGS ORIGIN SYMBOLIC BIND_NOW -# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE ORIGIN +# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE NOOPEN ORIGIN # CHECK: ] .globl _start -- cgit v1.2.3