[lld] r352413 - ELF: Set sh_info on RelaIplt to point to the IgotPlt output section.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 29 05:22:04 PST 2019


Merged to 8.0 in r352489

On Mon, Jan 28, 2019 at 2:29 PM Peter Collingbourne via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: pcc
> Date: Mon Jan 28 11:29:41 2019
> New Revision: 352413
>
> URL: http://llvm.org/viewvc/llvm-project?rev=352413&view=rev
> Log:
> ELF: Set sh_info on RelaIplt to point to the IgotPlt output section.
>
> Previously we were setting it to the GotPlt output section, which is
> incorrect on ARM where this section is in .got. In static binaries
> this can lead to sh_info being set to -1 (because there is no .got.plt)
> which results in various tools rejecting the output file.
>
> Differential Revision: https://reviews.llvm.org/D57274
>
> Modified:
>     lld/trunk/ELF/SyntheticSections.cpp
>     lld/trunk/test/ELF/arm-gnu-ifunc.s
>
> Modified: lld/trunk/ELF/SyntheticSections.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=352413&r1=352412&r2=352413&view=diff
> ==============================================================================
> --- lld/trunk/ELF/SyntheticSections.cpp (original)
> +++ lld/trunk/ELF/SyntheticSections.cpp Mon Jan 28 11:29:41 2019
> @@ -1512,8 +1512,10 @@ void RelocationBaseSection::finalizeCont
>    else
>      getParent()->Link = 0;
>
> -  if (In.RelaIplt == this || In.RelaPlt == this)
> +  if (In.RelaPlt == this)
>      getParent()->Info = In.GotPlt->getParent()->SectionIndex;
> +  if (In.RelaIplt == this)
> +    getParent()->Info = In.IgotPlt->getParent()->SectionIndex;
>  }
>
>  RelrBaseSection::RelrBaseSection()
>
> Modified: lld/trunk/test/ELF/arm-gnu-ifunc.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/arm-gnu-ifunc.s?rev=352413&r1=352412&r2=352413&view=diff
> ==============================================================================
> --- lld/trunk/test/ELF/arm-gnu-ifunc.s (original)
> +++ lld/trunk/test/ELF/arm-gnu-ifunc.s Mon Jan 28 11:29:41 2019
> @@ -35,6 +35,8 @@ _start:
>  // CHECK-NEXT:     Address: 0x100F4
>  // CHECK-NEXT:     Offset: 0xF4
>  // CHECK-NEXT:     Size: 16
> +// CHECK-NEXT:     Link:
> +// CHECK-NEXT:     Info: 4
>  // CHECK:          Name: .plt
>  // CHECK-NEXT:     Type: SHT_PROGBITS
>  // CHECK-NEXT:     Flags [
> @@ -44,7 +46,8 @@ _start:
>  // CHECK-NEXT:     Address: 0x11020
>  // CHECK-NEXT:     Offset: 0x1020
>  // CHECK-NEXT:     Size: 32
> -// CHECK:          Name: .got
> +// CHECK:          Index: 4
> +// CHECK-NEXT:     Name: .got
>  // CHECK-NEXT:     Type: SHT_PROGBITS
>  // CHECK-NEXT:     Flags [
>  // CHECK-NEXT:       SHF_ALLOC
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list