This is an archive of the discontinued LLVM Phabricator instance.

Don't push relocation sections onto InputSection<ELFT>::Discarded.RelocSections
AbandonedPublic

Authored by silvas on Feb 4 2016, 1:30 PM.

Details

Reviewers
ruiu
rafael
Summary

LLVM3.3 (and earlier) would fail to include a relocation section in
the group that the section it was relocating is in. Object files
affected by this issue have been encountered in the wild when using LLD.

This would result in a siutation like:

Section {
  Index: 5
  Name: .text._Z3fooIiEvv (6)
  Type: SHT_PROGBITS (0x1)
  Flags [ (0x206)
    SHF_ALLOC (0x2)
    SHF_EXECINSTR (0x4)
    SHF_GROUP (0x200)
  ]
  Address: 0x0
  Offset: 0x48
  Size: 5
  Link: 0
  Info: 0
  AddressAlignment: 1
  EntrySize: 0
}
Section {
  Index: 6
  Name: .rela.text._Z3fooIiEvv (1)
  Type: SHT_RELA (0x4)
  Flags [ (0x0)
  ]
  Address: 0x0
  Offset: 0x3F0
  Size: 24
  Link: 8
  Info: 5
  AddressAlignment: 8
  EntrySize: 24
}

In LLD, during symbol resolution, we discard the section containing the
weak symbol, but this amounts to replacing it with
InputSection<ELFT>::Discarded.
When we later saw the corresponding relocation section, we would then
end up pusing onto InputSection<ELFT>::Discarded.RelocSections, which is
bogus.

Diff Detail

Event Timeline

silvas updated this revision to Diff 46956.Feb 4 2016, 1:30 PM
silvas retitled this revision from to Don't push relocation sections onto InputSection<ELFT>::Discarded.RelocSections.
silvas updated this object.
silvas added reviewers: ruiu, rafael.
silvas added subscribers: Bigcheese, llvm-commits.
silvas abandoned this revision.Feb 4 2016, 1:31 PM

Sorry, this is my fault. Apparently the email does get to llvm-commits once you add it as a subcriber

ruiu edited edge metadata.Feb 4 2016, 1:32 PM

Please submit with a comment.

silvas added a comment.Feb 4 2016, 1:35 PM

btw, I filed https://llvm.org/bugs/show_bug.cgi?id=26480 so that this hopefully is fixed so the confusion doesn't happen again.