From 76907211538be2c167bd7c1a633f655411828d66 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Thu, 23 Mar 2017 00:54:16 +0000 Subject: [PATCH] [ELF] Add -z nodlopen option. Patch by Mark Kettenis. llvm-svn: 298567 --- lld/ELF/Config.h | 1 + lld/ELF/Driver.cpp | 1 + lld/ELF/SyntheticSections.cpp | 2 ++ lld/test/ELF/dt_flags.s | 6 +++--- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 0bb46c3..a083637 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -142,6 +142,7 @@ struct Configuration { bool ZExecstack; bool ZNocopyreloc; bool ZNodelete; + bool ZNodlopen; bool ZNow; bool ZOrigin; bool ZRelro; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 59258ce..87a5430 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -619,6 +619,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->ZExecstack = hasZOption(Args, "execstack"); Config->ZNocopyreloc = hasZOption(Args, "nocopyreloc"); 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/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 22c7f26..b1509ef 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -1034,6 +1034,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/lld/test/ELF/dt_flags.s b/lld/test/ELF/dt_flags.s index a1d8d77..431f83d 100644 --- a/lld/test/ELF/dt_flags.s +++ b/lld/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 -- 2.7.4