[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