Skip to content

Commit

Permalink
ELF: Set sh_info on RelaIplt to point to the IgotPlt output section.
Browse files Browse the repository at this point in the history
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

llvm-svn: 352413
  • Loading branch information
pcc committed Jan 28, 2019
1 parent 556ea7d commit ff35dba
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
4 changes: 3 additions & 1 deletion lld/ELF/SyntheticSections.cpp
Expand Up @@ -1512,8 +1512,10 @@ void RelocationBaseSection::finalizeContents() {
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()
Expand Down
5 changes: 4 additions & 1 deletion lld/test/ELF/arm-gnu-ifunc.s
Expand Up @@ -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 [
Expand All @@ -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
Expand Down

0 comments on commit ff35dba

Please sign in to comment.