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

llvm-svn: 352413
This commit is contained in:
Peter Collingbourne 2019-01-28 19:29:41 +00:00
parent 556ea7d2e0
commit ff35dbac47
2 changed files with 7 additions and 2 deletions

View File

@ -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()

View File

@ -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