[lld] r259478 - [ELF] Finalize .dynamic section at the end

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 2 13:11:39 PST 2016


Thanks!

On 2 February 2016 at 04:07, Simon Atanasyan via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: atanasyan
> Date: Tue Feb  2 03:07:47 2016
> New Revision: 259478
>
> URL: http://llvm.org/viewvc/llvm-project?rev=259478&view=rev
> Log:
> [ELF] Finalize .dynamic section at the end
>
> Some dynamic table tags like RELSZ and PLTRELSZ depens on result of
> finalizing corresponding relocation sections. Therefore we have to
> finalize .dynamic section at the end.
>
> Differential Revision: http://reviews.llvm.org/D16799
>
> Modified:
>     lld/trunk/ELF/Writer.cpp
>     lld/trunk/test/ELF/mips-relocs.s
>
> Modified: lld/trunk/ELF/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=259478&r1=259477&r2=259478&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Tue Feb  2 03:07:47 2016
> @@ -967,11 +967,17 @@ template <class ELFT> bool Writer<ELFT>:
>    if (isOutputDynamic())
>      Out<ELFT>::DynSymTab->finalize();
>
> -  // Fill other section headers. The dynamic string table in finalized
> -  // once the .dynamic finalizer has added a few last strings.
> +  // Fill other section headers. The dynamic table is finalized
> +  // at the end because some tags like RELSZ depend on result
> +  // of finalizing other sections. The dynamic string table is
> +  // finalized once the .dynamic finalizer has added a few last
> +  // strings. See DynamicSection::finalize()
>    for (OutputSectionBase<ELFT> *Sec : OutputSections)
> -    if (Sec != Out<ELFT>::DynStrTab)
> +    if (Sec != Out<ELFT>::DynStrTab && Sec != Out<ELFT>::Dynamic)
>        Sec->finalize();
> +
> +  if (isOutputDynamic())
> +    Out<ELFT>::Dynamic->finalize();
>    return true;
>  }
>
>
> Modified: lld/trunk/test/ELF/mips-relocs.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-relocs.s?rev=259478&r1=259477&r2=259478&view=diff
> ==============================================================================
> --- lld/trunk/test/ELF/mips-relocs.s (original)
> +++ lld/trunk/test/ELF/mips-relocs.s Tue Feb  2 03:07:47 2016
> @@ -4,13 +4,13 @@
>  # RUN: ld.lld -shared %t-be.o -o %t-be.so
>  # RUN: llvm-objdump -t %t-be.so | FileCheck %s
>  # RUN: llvm-objdump -s %t-be.so | FileCheck -check-prefix=BE %s
> -# RUN: llvm-readobj -relocations %t-be.so | FileCheck -check-prefix=REL %s
> +# RUN: llvm-readobj -r -dynamic-table %t-be.so | FileCheck -check-prefix=REL %s
>
>  # RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
>  # RUN: ld.lld -shared %t-el.o -o %t-el.so
>  # RUN: llvm-objdump -t %t-el.so | FileCheck %s
>  # RUN: llvm-objdump -s %t-el.so | FileCheck -check-prefix=EL %s
> -# RUN: llvm-readobj -relocations %t-el.so | FileCheck -check-prefix=REL %s
> +# RUN: llvm-readobj -r -dynamic-table %t-el.so | FileCheck -check-prefix=REL %s
>
>  # REQUIRES: mips
>
> @@ -49,3 +49,8 @@ v2:
>  # REL-NEXT:     0x30008 R_MIPS_REL32 - 0x0
>  # REL-NEXT:   }
>  # REL-NEXT: ]
> +
> +# REL: DynamicSection [
> +# REL:   Tag        Type                 Name/Value
> +# REL:   0x00000012 RELSZ                16 (bytes)
> +# REL:   0x00000013 RELENT               8 (bytes)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list