diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2020-01-24 22:00:03 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2020-01-24 22:00:03 +0000 |
commit | 480093f4440d54b30b3025afeac24b48f2ba7a2e (patch) | |
tree | 162e72994062888647caf0d875428db9445491a8 /contrib/llvm-project/lld/ELF/Relocations.h | |
parent | 489b1cf2ecf5b9b4a394857987014bfb09067726 (diff) | |
parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) | |
download | src-480093f4440d54b30b3025afeac24b48f2ba7a2e.tar.gz src-480093f4440d54b30b3025afeac24b48f2ba7a2e.zip |
Merge ^/vendor/lvm-project/master up to its last change (upstream commit
e26a78e70), and resolve conflicts.
Notes
Notes:
svn path=/projects/clang1000-import/; revision=357095
Diffstat (limited to 'contrib/llvm-project/lld/ELF/Relocations.h')
-rw-r--r-- | contrib/llvm-project/lld/ELF/Relocations.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/contrib/llvm-project/lld/ELF/Relocations.h b/contrib/llvm-project/lld/ELF/Relocations.h index befe15b8f3b9..bfec1e628851 100644 --- a/contrib/llvm-project/lld/ELF/Relocations.h +++ b/contrib/llvm-project/lld/ELF/Relocations.h @@ -40,7 +40,6 @@ enum RelExpr { R_GOTPLT, R_GOTPLTREL, R_GOTREL, - R_HINT, R_NEG_TLS, R_NONE, R_PC, @@ -115,8 +114,6 @@ template <class ELFT> void scanRelocations(InputSectionBase &); template <class ELFT> void reportUndefinedSymbols(); -void addIRelativeRelocs(); - class ThunkSection; class Thunk; struct InputSectionDescription; @@ -150,10 +147,17 @@ private: bool normalizeExistingThunk(Relocation &rel, uint64_t src); - // Record all the available Thunks for a Symbol - llvm::DenseMap<std::pair<SectionBase *, uint64_t>, std::vector<Thunk *>> - thunkedSymbolsBySection; - llvm::DenseMap<Symbol *, std::vector<Thunk *>> thunkedSymbols; + // Record all the available Thunks for a (Symbol, addend) pair, where Symbol + // is represented as a (section, offset) pair. There may be multiple + // relocations sharing the same (section, offset + addend) pair. We may revert + // a relocation back to its original non-Thunk target, and restore the + // original addend, so we cannot fold offset + addend. A nested pair is used + // because DenseMapInfo is not specialized for std::tuple. + llvm::DenseMap<std::pair<std::pair<SectionBase *, uint64_t>, int64_t>, + std::vector<Thunk *>> + thunkedSymbolsBySectionAndAddend; + llvm::DenseMap<std::pair<Symbol *, int64_t>, std::vector<Thunk *>> + thunkedSymbols; // Find a Thunk from the Thunks symbol definition, we can use this to find // the Thunk from a relocation to the Thunks symbol definition. |