[lld] r250771 - [ELF2] Introduce support for -z nodelete.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 19 19:57:34 PDT 2015
On Mon, Oct 19, 2015 at 5:20 PM, Davide Italiano via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: davide
> Date: Mon Oct 19 19:20:20 2015
> New Revision: 250771
>
> URL: http://llvm.org/viewvc/llvm-project?rev=250771&view=rev
> Log:
> [ELF2] Introduce support for -z nodelete.
>
>
> Modified:
> lld/trunk/ELF/Config.h
> lld/trunk/ELF/Driver.cpp
> lld/trunk/ELF/OutputSections.cpp
> lld/trunk/test/elf2/dt_flags.s
>
> Modified: lld/trunk/ELF/Config.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=250771&r1=250770&r2=250771&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Config.h (original)
> +++ lld/trunk/ELF/Config.h Mon Oct 19 19:20:20 2015
> @@ -57,6 +57,7 @@ struct Configuration {
> bool Shared;
> bool Static = false;
> bool Verbose;
> + bool ZNodelete = false;
> bool ZNow = false;
> ELFKind EKind = ELFNoneKind;
> uint16_t EMachine = llvm::ELF::EM_NONE;
>
> Modified: lld/trunk/ELF/Driver.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=250771&r1=250770&r2=250771&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Driver.cpp (original)
> +++ lld/trunk/ELF/Driver.cpp Mon Oct 19 19:20:20 2015
> @@ -158,9 +158,13 @@ void LinkerDriver::createFiles(opt::Inpu
> for (auto *Arg : Args.filtered(OPT_undefined))
> Config->Undefined.push_back(Arg->getValue());
>
> - for (auto *Arg : Args.filtered(OPT_z))
> - if (Arg->getValue() == StringRef("now"))
> + // FIXME: Group -z options together in Config.
>
Does this FIXME make sense? To me, -z is a random collection of features
that happen to be for some reason in -z *featurename* form, so I don't see
a strong reason to group them specially.
+ for (auto *Arg : Args.filtered(OPT_z)) {
> + if (Arg->getValue() == StringRef("nodelete"))
> + Config->ZNodelete = true;
> + else if (Arg->getValue() == StringRef("now"))
> Config->ZNow = true;
> + }
>
> for (auto *Arg : Args) {
> switch (Arg->getOption().getID()) {
>
> Modified: lld/trunk/ELF/OutputSections.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=250771&r1=250770&r2=250771&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/OutputSections.cpp (original)
> +++ lld/trunk/ELF/OutputSections.cpp Mon Oct 19 19:20:20 2015
> @@ -296,7 +296,7 @@ template <class ELFT> void DynamicSectio
> ++NumEntries; // DT_FINI
> if (Config->Bsymbolic)
> ++NumEntries; // DT_FLAGS
> - if (Config->ZNow)
> + if (Config->ZNodelete || Config->ZNow)
> ++NumEntries; // DT_FLAGS_1
> ++NumEntries; // DT_NULL
>
> @@ -374,6 +374,8 @@ template <class ELFT> void DynamicSectio
> if (Flags)
> WriteVal(DT_FLAGS, Flags);
> Flags = 0;
> + if (Config->ZNodelete)
> + Flags |= DF_1_NODELETE;
> if (Config->ZNow)
> Flags |= DF_1_NOW;
> if (Flags)
>
> Modified: lld/trunk/test/elf2/dt_flags.s
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/dt_flags.s?rev=250771&r1=250770&r2=250771&view=diff
>
> ==============================================================================
> --- lld/trunk/test/elf2/dt_flags.s (original)
> +++ lld/trunk/test/elf2/dt_flags.s Mon Oct 19 19:20:20 2015
> @@ -9,12 +9,12 @@
>
> # FLAGS: DynamicSection [
> # FLAGS: 0x000000000000001E FLAGS SYMBOLIC
> -# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW
> +# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE
> # FLAGS: ]
>
> # CHECK: DynamicSection [
> # CHECK-NOT: 0x000000000000001E FLAGS SYMBOLIC
> -# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW
> +# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE
> # CHECK: ]
>
> .globl _start
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151019/7a78cf92/attachment.html>
More information about the llvm-commits
mailing list