[PATCH] D33145: Clear output section from linker script command when it's removed.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue May 23 17:27:18 PDT 2017


LGTM!

Thanks,
Rafael

Dmitry Mikulin via Phabricator <reviews at reviews.llvm.org> writes:

> dmikulin updated this revision to Diff 99989.
> dmikulin added a comment.
> Herald added a subscriber: emaste.
>
> Removed Writer.cpp changes.
>
>
> https://reviews.llvm.org/D33145
>
> Files:
>   ELF/LinkerScript.cpp
>   test/ELF/linkerscript/arm-lscript.s
>
>
> Index: test/ELF/linkerscript/arm-lscript.s
> ===================================================================
> --- /dev/null
> +++ test/ELF/linkerscript/arm-lscript.s
> @@ -0,0 +1,9 @@
> +// REQUIRES: arm
> +// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
> +// RUN: echo  "SECTIONS { \
> +// RUN:         .rel.dyn : {    } \
> +// RUN:         .zed     : { PROVIDE_HIDDEN (foobar = .); } \
> +// RUN:         }" > %t.script
> +// This is a test case for PR33029. Making sure that linker can digest
> +// the above script without dumping core.
> +// RUN: ld.lld -emit-relocs -T %t.script %t.o -shared -o %t.so
> Index: ELF/LinkerScript.cpp
> ===================================================================
> --- ELF/LinkerScript.cpp
> +++ ELF/LinkerScript.cpp
> @@ -684,22 +684,20 @@
>    // '.' is assigned to, but creating these section should not have any bad
>    // consequeces and gives us a section to put the symbol in.
>    uint64_t Flags = SHF_ALLOC;
> -  uint32_t Type = SHT_PROGBITS;
>  
>    for (int I = 0, E = Opt.Commands.size(); I != E; ++I) {
>      auto *Cmd = dyn_cast<OutputSectionCommand>(Opt.Commands[I]);
>      if (!Cmd)
>        continue;
>      if (OutputSection *Sec = Cmd->Sec) {
>        Flags = Sec->Flags;
> -      Type = Sec->Type;
>        continue;
>      }
>  
>      if (isAllSectionDescription(*Cmd))
>        continue;
>  
> -    auto *OutSec = make<OutputSection>(Cmd->Name, Type, Flags);
> +    auto *OutSec = make<OutputSection>(Cmd->Name, SHT_PROGBITS, Flags);
>      OutSec->SectionIndex = I;
>      OutputSections->push_back(OutSec);
>      Cmd->Sec = OutSec;
>
>
> Index: test/ELF/linkerscript/arm-lscript.s
> ===================================================================
> --- /dev/null
> +++ test/ELF/linkerscript/arm-lscript.s
> @@ -0,0 +1,9 @@
> +// REQUIRES: arm
> +// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
> +// RUN: echo  "SECTIONS { \
> +// RUN:         .rel.dyn : {    } \
> +// RUN:         .zed     : { PROVIDE_HIDDEN (foobar = .); } \
> +// RUN:         }" > %t.script
> +// This is a test case for PR33029. Making sure that linker can digest
> +// the above script without dumping core.
> +// RUN: ld.lld -emit-relocs -T %t.script %t.o -shared -o %t.so
> Index: ELF/LinkerScript.cpp
> ===================================================================
> --- ELF/LinkerScript.cpp
> +++ ELF/LinkerScript.cpp
> @@ -684,22 +684,20 @@
>    // '.' is assigned to, but creating these section should not have any bad
>    // consequeces and gives us a section to put the symbol in.
>    uint64_t Flags = SHF_ALLOC;
> -  uint32_t Type = SHT_PROGBITS;
>  
>    for (int I = 0, E = Opt.Commands.size(); I != E; ++I) {
>      auto *Cmd = dyn_cast<OutputSectionCommand>(Opt.Commands[I]);
>      if (!Cmd)
>        continue;
>      if (OutputSection *Sec = Cmd->Sec) {
>        Flags = Sec->Flags;
> -      Type = Sec->Type;
>        continue;
>      }
>  
>      if (isAllSectionDescription(*Cmd))
>        continue;
>  
> -    auto *OutSec = make<OutputSection>(Cmd->Name, Type, Flags);
> +    auto *OutSec = make<OutputSection>(Cmd->Name, SHT_PROGBITS, Flags);
>      OutSec->SectionIndex = I;
>      OutputSections->push_back(OutSec);
>      Cmd->Sec = OutSec;


More information about the llvm-commits mailing list