diff options
Diffstat (limited to 'devel/llvm60/files/lld/patch-head-r336664.diff')
-rw-r--r-- | devel/llvm60/files/lld/patch-head-r336664.diff | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/devel/llvm60/files/lld/patch-head-r336664.diff b/devel/llvm60/files/lld/patch-head-r336664.diff deleted file mode 100644 index e26fd06d4c5e..000000000000 --- a/devel/llvm60/files/lld/patch-head-r336664.diff +++ /dev/null @@ -1,52 +0,0 @@ -r336664 | emaste | 2018-07-24 13:35:22 +0200 (Tue, 24 Jul 2018) | 11 lines - -lld: fix addends with partial linking - -[ELF] Update addends in non-allocatable sections for REL targets when -creating a relocatable output. - -LLVM PR: 37735 -LLVM Differential Revision: https://reviews.llvm.org/D48929 - -PR: 225128 -Obtained from: LLVM r336799 by Igor Kudrin - -Index: tools/lld/ELF/InputSection.cpp -=================================================================== ---- tools/lld/ELF/InputSection.cpp (revision 336663) -+++ tools/lld/ELF/InputSection.cpp (revision 336664) -@@ -686,6 +686,23 @@ void InputSection::relocateNonAlloc(uint8_t *Buf, - } - } - -+// This is used when '-r' is given. -+// For REL targets, InputSection::copyRelocations() may store artificial -+// relocations aimed to update addends. They are handled in relocateAlloc() -+// for allocatable sections, and this function does the same for -+// non-allocatable sections, such as sections with debug information. -+static void relocateNonAllocForRelocatable(InputSection *Sec, uint8_t *Buf) { -+ const unsigned Bits = Config->Is64 ? 64 : 32; -+ -+ for (const Relocation &Rel : Sec->Relocations) { -+ // InputSection::copyRelocations() adds only R_ABS relocations. -+ assert(Rel.Expr == R_ABS); -+ uint8_t *BufLoc = Buf + Rel.Offset + Sec->OutSecOff; -+ uint64_t TargetVA = SignExtend64(Rel.Sym->getVA(Rel.Addend), Bits); -+ Target->relocateOne(BufLoc, Rel.Type, TargetVA); -+ } -+} -+ - template <class ELFT> - void InputSectionBase::relocate(uint8_t *Buf, uint8_t *BufEnd) { - if (Flags & SHF_ALLOC) { -@@ -694,7 +711,9 @@ void InputSectionBase::relocate(uint8_t *Buf, uint - } - - auto *Sec = cast<InputSection>(this); -- if (Sec->AreRelocsRela) -+ if (Config->Relocatable) -+ relocateNonAllocForRelocatable(Sec, Buf); -+ else if (Sec->AreRelocsRela) - Sec->relocateNonAlloc<ELFT>(Buf, Sec->template relas<ELFT>()); - else - Sec->relocateNonAlloc<ELFT>(Buf, Sec->template rels<ELFT>()); |