Change how we apply relocations.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 13 Apr 2016 01:40:19 +0000 (01:40 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 13 Apr 2016 01:40:19 +0000 (01:40 +0000)
commit22ef956a45e01463f24e7b7d335606f301865b3f
tree93303525128c2a4476d31d02ef530599fec90405
parentb2d2a018d6383f6e568de4de056f80433f32bf5f
Change how we apply relocations.

With this patch we use the first scan over the relocations to remember
the information we found about them: will them be relaxed, will a plt be
used, etc.

With that the actual relocation application becomes much simpler. That
is particularly true for the interfaces in Target.h.

This unfortunately means that we now do two passes over relocations for
non SHF_ALLOC sections. I think this can be solved by factoring out the
code that scans a single relocation. It can then be used both as a scan
that record info and for a dedicated direct relocation of non SHF_ALLOC
sections.

I also think it is possible to reduce the number of enum values by
representing a target with just an OutputSection and an offset (which
can be from the start or end).

This should unblock adding features like relocation optimizations.

llvm-svn: 266158
lld/ELF/InputSection.cpp
lld/ELF/InputSection.h
lld/ELF/OutputSections.cpp
lld/ELF/OutputSections.h
lld/ELF/Target.cpp
lld/ELF/Target.h
lld/ELF/Writer.cpp
lld/test/ELF/tls-opt.s