Fix indentation.
[oota-llvm.git] / lib / ExecutionEngine / RuntimeDyld / RuntimeDyld.cpp
1 //===-- RuntimeDyld.cpp - Run-time dynamic linker for MC-JIT ----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Implementation of the MC-JIT runtime dynamic linker.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/ExecutionEngine/RuntimeDyld.h"
15 #include "JITRegistrar.h"
16 #include "ObjectImageCommon.h"
17 #include "RuntimeDyldCheckerImpl.h"
18 #include "RuntimeDyldELF.h"
19 #include "RuntimeDyldImpl.h"
20 #include "RuntimeDyldMachO.h"
21 #include "llvm/Object/ELF.h"
22 #include "llvm/Support/MathExtras.h"
23 #include "llvm/Support/MutexGuard.h"
24
25 using namespace llvm;
26 using namespace llvm::object;
27
28 #define DEBUG_TYPE "dyld"
29
30 // Empty out-of-line virtual destructor as the key function.
31 RuntimeDyldImpl::~RuntimeDyldImpl() {}
32
33 // Pin the JITRegistrar's and ObjectImage*'s vtables to this file.
34 void JITRegistrar::anchor() {}
35 void ObjectImage::anchor() {}
36 void ObjectImageCommon::anchor() {}
37
38 namespace llvm {
39
40 void RuntimeDyldImpl::registerEHFrames() {}
41
42 void RuntimeDyldImpl::deregisterEHFrames() {}
43
44 #ifndef NDEBUG
45 static void dumpSectionMemory(const SectionEntry &S, StringRef State) {
46   dbgs() << "----- Contents of section " << S.Name << " " << State << " -----";
47
48   if (S.Address == nullptr) {
49     dbgs() << "\n          <section not emitted>\n";
50     return;
51   }
52
53   const unsigned ColsPerRow = 16;
54
55   uint8_t *DataAddr = S.Address;
56   uint64_t LoadAddr = S.LoadAddress;
57
58   unsigned StartPadding = LoadAddr & (ColsPerRow - 1);
59   unsigned BytesRemaining = S.Size;
60
61   if (StartPadding) {
62     dbgs() << "\n" << format("0x%016" PRIx64, LoadAddr & ~(ColsPerRow - 1)) << ":";
63     while (StartPadding--)
64       dbgs() << "   ";
65   }
66
67   while (BytesRemaining > 0) {
68     if ((LoadAddr & (ColsPerRow - 1)) == 0)
69       dbgs() << "\n" << format("0x%016" PRIx64, LoadAddr) << ":";
70
71     dbgs() << " " << format("%02x", *DataAddr);
72
73     ++DataAddr;
74     ++LoadAddr;
75     --BytesRemaining;
76   }
77
78   dbgs() << "\n";
79 }
80 #endif
81
82 // Resolve the relocations for all symbols we currently know about.
83 void RuntimeDyldImpl::resolveRelocations() {
84   MutexGuard locked(lock);
85
86   // First, resolve relocations associated with external symbols.
87   resolveExternalSymbols();
88
89   // Just iterate over the sections we have and resolve all the relocations
90   // in them. Gross overkill, but it gets the job done.
91   for (int i = 0, e = Sections.size(); i != e; ++i) {
92     // The Section here (Sections[i]) refers to the section in which the
93     // symbol for the relocation is located.  The SectionID in the relocation
94     // entry provides the section to which the relocation will be applied.
95     uint64_t Addr = Sections[i].LoadAddress;
96     DEBUG(dbgs() << "Resolving relocations Section #" << i << "\t"
97                  << format("0x%x", Addr) << "\n");
98     DEBUG(dumpSectionMemory(Sections[i], "before relocations"));
99     resolveRelocationList(Relocations[i], Addr);
100     DEBUG(dumpSectionMemory(Sections[i], "after relocations"));
101     Relocations.erase(i);
102   }
103 }
104
105 void RuntimeDyldImpl::mapSectionAddress(const void *LocalAddress,
106                                         uint64_t TargetAddress) {
107   MutexGuard locked(lock);
108   for (unsigned i = 0, e = Sections.size(); i != e; ++i) {
109     if (Sections[i].Address == LocalAddress) {
110       reassignSectionAddress(i, TargetAddress);
111       return;
112     }
113   }
114   llvm_unreachable("Attempting to remap address of unknown section!");
115 }
116
117 static std::error_code getOffset(const SymbolRef &Sym, uint64_t &Result) {
118   uint64_t Address;
119   if (std::error_code EC = Sym.getAddress(Address))
120     return EC;
121
122   if (Address == UnknownAddressOrSize) {
123     Result = UnknownAddressOrSize;
124     return object_error::success;
125   }
126
127   const ObjectFile *Obj = Sym.getObject();
128   section_iterator SecI(Obj->section_begin());
129   if (std::error_code EC = Sym.getSection(SecI))
130     return EC;
131
132   if (SecI == Obj->section_end()) {
133     Result = UnknownAddressOrSize;
134     return object_error::success;
135   }
136
137   uint64_t SectionAddress;
138   if (std::error_code EC = SecI->getAddress(SectionAddress))
139     return EC;
140
141   Result = Address - SectionAddress;
142   return object_error::success;
143 }
144
145 std::unique_ptr<ObjectImage>
146 RuntimeDyldImpl::loadObject(std::unique_ptr<ObjectImage> Obj) {
147   MutexGuard locked(lock);
148
149   if (!Obj)
150     return nullptr;
151
152   // Save information about our target
153   Arch = (Triple::ArchType)Obj->getArch();
154   IsTargetLittleEndian = Obj->getObjectFile()->isLittleEndian();
155
156   // Compute the memory size required to load all sections to be loaded
157   // and pass this information to the memory manager
158   if (MemMgr->needsToReserveAllocationSpace()) {
159     uint64_t CodeSize = 0, DataSizeRO = 0, DataSizeRW = 0;
160     computeTotalAllocSize(*Obj, CodeSize, DataSizeRO, DataSizeRW);
161     MemMgr->reserveAllocationSpace(CodeSize, DataSizeRO, DataSizeRW);
162   }
163
164   // Symbols found in this object
165   StringMap<SymbolLoc> LocalSymbols;
166   // Used sections from the object file
167   ObjSectionToIDMap LocalSections;
168
169   // Common symbols requiring allocation, with their sizes and alignments
170   CommonSymbolMap CommonSymbols;
171   // Maximum required total memory to allocate all common symbols
172   uint64_t CommonSize = 0;
173
174   // Parse symbols
175   DEBUG(dbgs() << "Parse symbols:\n");
176   for (symbol_iterator I = Obj->begin_symbols(), E = Obj->end_symbols(); I != E;
177        ++I) {
178     object::SymbolRef::Type SymType;
179     StringRef Name;
180     Check(I->getType(SymType));
181     Check(I->getName(Name));
182
183     uint32_t Flags = I->getFlags();
184
185     bool IsCommon = Flags & SymbolRef::SF_Common;
186     if (IsCommon) {
187       // Add the common symbols to a list.  We'll allocate them all below.
188       if (!GlobalSymbolTable.count(Name)) {
189         uint32_t Align;
190         Check(I->getAlignment(Align));
191         uint64_t Size = 0;
192         Check(I->getSize(Size));
193         CommonSize += Size + Align;
194         CommonSymbols[*I] = CommonSymbolInfo(Size, Align);
195       }
196     } else {
197       if (SymType == object::SymbolRef::ST_Function ||
198           SymType == object::SymbolRef::ST_Data ||
199           SymType == object::SymbolRef::ST_Unknown) {
200         uint64_t SectOffset;
201         StringRef SectionData;
202         bool IsCode;
203         section_iterator SI = Obj->end_sections();
204         Check(getOffset(*I, SectOffset));
205         Check(I->getSection(SI));
206         if (SI == Obj->end_sections())
207           continue;
208         Check(SI->getContents(SectionData));
209         Check(SI->isText(IsCode));
210         unsigned SectionID =
211             findOrEmitSection(*Obj, *SI, IsCode, LocalSections);
212         LocalSymbols[Name.data()] = SymbolLoc(SectionID, SectOffset);
213         DEBUG(dbgs() << "\tOffset: " << format("%p", (uintptr_t)SectOffset)
214                      << " flags: " << Flags << " SID: " << SectionID);
215         GlobalSymbolTable[Name] = SymbolLoc(SectionID, SectOffset);
216       }
217     }
218     DEBUG(dbgs() << "\tType: " << SymType << " Name: " << Name << "\n");
219   }
220
221   // Allocate common symbols
222   if (CommonSize != 0)
223     emitCommonSymbols(*Obj, CommonSymbols, CommonSize, GlobalSymbolTable);
224
225   // Parse and process relocations
226   DEBUG(dbgs() << "Parse relocations:\n");
227   for (section_iterator SI = Obj->begin_sections(), SE = Obj->end_sections();
228        SI != SE; ++SI) {
229     unsigned SectionID = 0;
230     StubMap Stubs;
231     section_iterator RelocatedSection = SI->getRelocatedSection();
232
233     relocation_iterator I = SI->relocation_begin();
234     relocation_iterator E = SI->relocation_end();
235
236     if (I == E && !ProcessAllSections)
237       continue;
238
239     bool IsCode = false;
240     Check(RelocatedSection->isText(IsCode));
241     SectionID =
242         findOrEmitSection(*Obj, *RelocatedSection, IsCode, LocalSections);
243     DEBUG(dbgs() << "\tSectionID: " << SectionID << "\n");
244
245     for (; I != E;)
246       I = processRelocationRef(SectionID, I, *Obj, LocalSections, LocalSymbols,
247                                Stubs);
248
249     // If there is an attached checker, notify it about the stubs for this
250     // section so that they can be verified.
251     if (Checker)
252       Checker->registerStubMap(Obj->getImageName(), SectionID, Stubs);
253   }
254
255   // Give the subclasses a chance to tie-up any loose ends.
256   finalizeLoad(*Obj, LocalSections);
257
258   return Obj;
259 }
260
261 // A helper method for computeTotalAllocSize.
262 // Computes the memory size required to allocate sections with the given sizes,
263 // assuming that all sections are allocated with the given alignment
264 static uint64_t
265 computeAllocationSizeForSections(std::vector<uint64_t> &SectionSizes,
266                                  uint64_t Alignment) {
267   uint64_t TotalSize = 0;
268   for (size_t Idx = 0, Cnt = SectionSizes.size(); Idx < Cnt; Idx++) {
269     uint64_t AlignedSize =
270         (SectionSizes[Idx] + Alignment - 1) / Alignment * Alignment;
271     TotalSize += AlignedSize;
272   }
273   return TotalSize;
274 }
275
276 // Compute an upper bound of the memory size that is required to load all
277 // sections
278 void RuntimeDyldImpl::computeTotalAllocSize(ObjectImage &Obj,
279                                             uint64_t &CodeSize,
280                                             uint64_t &DataSizeRO,
281                                             uint64_t &DataSizeRW) {
282   // Compute the size of all sections required for execution
283   std::vector<uint64_t> CodeSectionSizes;
284   std::vector<uint64_t> ROSectionSizes;
285   std::vector<uint64_t> RWSectionSizes;
286   uint64_t MaxAlignment = sizeof(void *);
287
288   // Collect sizes of all sections to be loaded;
289   // also determine the max alignment of all sections
290   for (section_iterator SI = Obj.begin_sections(), SE = Obj.end_sections();
291        SI != SE; ++SI) {
292     const SectionRef &Section = *SI;
293
294     bool IsRequired;
295     Check(Section.isRequiredForExecution(IsRequired));
296
297     // Consider only the sections that are required to be loaded for execution
298     if (IsRequired) {
299       uint64_t DataSize = 0;
300       uint64_t Alignment64 = 0;
301       bool IsCode = false;
302       bool IsReadOnly = false;
303       StringRef Name;
304       Check(Section.getSize(DataSize));
305       Check(Section.getAlignment(Alignment64));
306       Check(Section.isText(IsCode));
307       Check(Section.isReadOnlyData(IsReadOnly));
308       Check(Section.getName(Name));
309       unsigned Alignment = (unsigned)Alignment64 & 0xffffffffL;
310
311       uint64_t StubBufSize = computeSectionStubBufSize(Obj, Section);
312       uint64_t SectionSize = DataSize + StubBufSize;
313
314       // The .eh_frame section (at least on Linux) needs an extra four bytes
315       // padded
316       // with zeroes added at the end.  For MachO objects, this section has a
317       // slightly different name, so this won't have any effect for MachO
318       // objects.
319       if (Name == ".eh_frame")
320         SectionSize += 4;
321
322       if (SectionSize > 0) {
323         // save the total size of the section
324         if (IsCode) {
325           CodeSectionSizes.push_back(SectionSize);
326         } else if (IsReadOnly) {
327           ROSectionSizes.push_back(SectionSize);
328         } else {
329           RWSectionSizes.push_back(SectionSize);
330         }
331         // update the max alignment
332         if (Alignment > MaxAlignment) {
333           MaxAlignment = Alignment;
334         }
335       }
336     }
337   }
338
339   // Compute the size of all common symbols
340   uint64_t CommonSize = 0;
341   for (symbol_iterator I = Obj.begin_symbols(), E = Obj.end_symbols(); I != E;
342        ++I) {
343     uint32_t Flags = I->getFlags();
344     if (Flags & SymbolRef::SF_Common) {
345       // Add the common symbols to a list.  We'll allocate them all below.
346       uint64_t Size = 0;
347       Check(I->getSize(Size));
348       CommonSize += Size;
349     }
350   }
351   if (CommonSize != 0) {
352     RWSectionSizes.push_back(CommonSize);
353   }
354
355   // Compute the required allocation space for each different type of sections
356   // (code, read-only data, read-write data) assuming that all sections are
357   // allocated with the max alignment. Note that we cannot compute with the
358   // individual alignments of the sections, because then the required size
359   // depends on the order, in which the sections are allocated.
360   CodeSize = computeAllocationSizeForSections(CodeSectionSizes, MaxAlignment);
361   DataSizeRO = computeAllocationSizeForSections(ROSectionSizes, MaxAlignment);
362   DataSizeRW = computeAllocationSizeForSections(RWSectionSizes, MaxAlignment);
363 }
364
365 // compute stub buffer size for the given section
366 unsigned RuntimeDyldImpl::computeSectionStubBufSize(ObjectImage &Obj,
367                                                     const SectionRef &Section) {
368   unsigned StubSize = getMaxStubSize();
369   if (StubSize == 0) {
370     return 0;
371   }
372   // FIXME: this is an inefficient way to handle this. We should computed the
373   // necessary section allocation size in loadObject by walking all the sections
374   // once.
375   unsigned StubBufSize = 0;
376   for (section_iterator SI = Obj.begin_sections(), SE = Obj.end_sections();
377        SI != SE; ++SI) {
378     section_iterator RelSecI = SI->getRelocatedSection();
379     if (!(RelSecI == Section))
380       continue;
381
382     for (const RelocationRef &Reloc : SI->relocations()) {
383       (void)Reloc;
384       StubBufSize += StubSize;
385     }
386   }
387
388   // Get section data size and alignment
389   uint64_t Alignment64;
390   uint64_t DataSize;
391   Check(Section.getSize(DataSize));
392   Check(Section.getAlignment(Alignment64));
393
394   // Add stubbuf size alignment
395   unsigned Alignment = (unsigned)Alignment64 & 0xffffffffL;
396   unsigned StubAlignment = getStubAlignment();
397   unsigned EndAlignment = (DataSize | Alignment) & -(DataSize | Alignment);
398   if (StubAlignment > EndAlignment)
399     StubBufSize += StubAlignment - EndAlignment;
400   return StubBufSize;
401 }
402
403 uint64_t RuntimeDyldImpl::readBytesUnaligned(uint8_t *Src,
404                                              unsigned Size) const {
405   uint64_t Result = 0;
406   if (IsTargetLittleEndian) {
407     Src += Size - 1;
408     while (Size--)
409       Result = (Result << 8) | *Src--;
410   } else
411     while (Size--)
412       Result = (Result << 8) | *Src++;
413
414   return Result;
415 }
416
417 void RuntimeDyldImpl::writeBytesUnaligned(uint64_t Value, uint8_t *Dst,
418                                           unsigned Size) const {
419   if (IsTargetLittleEndian) {
420     while (Size--) {
421       *Dst++ = Value & 0xFF;
422       Value >>= 8;
423     }
424   } else {
425     Dst += Size - 1;
426     while (Size--) {
427       *Dst-- = Value & 0xFF;
428       Value >>= 8;
429     }
430   }
431 }
432
433 void RuntimeDyldImpl::emitCommonSymbols(ObjectImage &Obj,
434                                         const CommonSymbolMap &CommonSymbols,
435                                         uint64_t TotalSize,
436                                         SymbolTableMap &SymbolTable) {
437   // Allocate memory for the section
438   unsigned SectionID = Sections.size();
439   uint8_t *Addr = MemMgr->allocateDataSection(TotalSize, sizeof(void *),
440                                               SectionID, StringRef(), false);
441   if (!Addr)
442     report_fatal_error("Unable to allocate memory for common symbols!");
443   uint64_t Offset = 0;
444   Sections.push_back(SectionEntry("<common symbols>", Addr, TotalSize, 0));
445   memset(Addr, 0, TotalSize);
446
447   DEBUG(dbgs() << "emitCommonSection SectionID: " << SectionID << " new addr: "
448                << format("%p", Addr) << " DataSize: " << TotalSize << "\n");
449
450   // Assign the address of each symbol
451   for (CommonSymbolMap::const_iterator it = CommonSymbols.begin(),
452        itEnd = CommonSymbols.end(); it != itEnd; ++it) {
453     uint64_t Size = it->second.first;
454     uint64_t Align = it->second.second;
455     StringRef Name;
456     it->first.getName(Name);
457     if (Align) {
458       // This symbol has an alignment requirement.
459       uint64_t AlignOffset = OffsetToAlignment((uint64_t)Addr, Align);
460       Addr += AlignOffset;
461       Offset += AlignOffset;
462       DEBUG(dbgs() << "Allocating common symbol " << Name << " address "
463                    << format("%p\n", Addr));
464     }
465     Obj.updateSymbolAddress(it->first, (uint64_t)Addr);
466     SymbolTable[Name.data()] = SymbolLoc(SectionID, Offset);
467     Offset += Size;
468     Addr += Size;
469   }
470 }
471
472 unsigned RuntimeDyldImpl::emitSection(ObjectImage &Obj,
473                                       const SectionRef &Section, bool IsCode) {
474
475   StringRef data;
476   uint64_t Alignment64;
477   Check(Section.getContents(data));
478   Check(Section.getAlignment(Alignment64));
479
480   unsigned Alignment = (unsigned)Alignment64 & 0xffffffffL;
481   bool IsRequired;
482   bool IsVirtual;
483   bool IsZeroInit;
484   bool IsReadOnly;
485   uint64_t DataSize;
486   unsigned PaddingSize = 0;
487   unsigned StubBufSize = 0;
488   StringRef Name;
489   Check(Section.isRequiredForExecution(IsRequired));
490   Check(Section.isVirtual(IsVirtual));
491   Check(Section.isZeroInit(IsZeroInit));
492   Check(Section.isReadOnlyData(IsReadOnly));
493   Check(Section.getSize(DataSize));
494   Check(Section.getName(Name));
495
496   StubBufSize = computeSectionStubBufSize(Obj, Section);
497
498   // The .eh_frame section (at least on Linux) needs an extra four bytes padded
499   // with zeroes added at the end.  For MachO objects, this section has a
500   // slightly different name, so this won't have any effect for MachO objects.
501   if (Name == ".eh_frame")
502     PaddingSize = 4;
503
504   uintptr_t Allocate;
505   unsigned SectionID = Sections.size();
506   uint8_t *Addr;
507   const char *pData = nullptr;
508
509   // Some sections, such as debug info, don't need to be loaded for execution.
510   // Leave those where they are.
511   if (IsRequired) {
512     Allocate = DataSize + PaddingSize + StubBufSize;
513     Addr = IsCode ? MemMgr->allocateCodeSection(Allocate, Alignment, SectionID,
514                                                 Name)
515                   : MemMgr->allocateDataSection(Allocate, Alignment, SectionID,
516                                                 Name, IsReadOnly);
517     if (!Addr)
518       report_fatal_error("Unable to allocate section memory!");
519
520     // Virtual sections have no data in the object image, so leave pData = 0
521     if (!IsVirtual)
522       pData = data.data();
523
524     // Zero-initialize or copy the data from the image
525     if (IsZeroInit || IsVirtual)
526       memset(Addr, 0, DataSize);
527     else
528       memcpy(Addr, pData, DataSize);
529
530     // Fill in any extra bytes we allocated for padding
531     if (PaddingSize != 0) {
532       memset(Addr + DataSize, 0, PaddingSize);
533       // Update the DataSize variable so that the stub offset is set correctly.
534       DataSize += PaddingSize;
535     }
536
537     DEBUG(dbgs() << "emitSection SectionID: " << SectionID << " Name: " << Name
538                  << " obj addr: " << format("%p", pData)
539                  << " new addr: " << format("%p", Addr)
540                  << " DataSize: " << DataSize << " StubBufSize: " << StubBufSize
541                  << " Allocate: " << Allocate << "\n");
542     Obj.updateSectionAddress(Section, (uint64_t)Addr);
543   } else {
544     // Even if we didn't load the section, we need to record an entry for it
545     // to handle later processing (and by 'handle' I mean don't do anything
546     // with these sections).
547     Allocate = 0;
548     Addr = nullptr;
549     DEBUG(dbgs() << "emitSection SectionID: " << SectionID << " Name: " << Name
550                  << " obj addr: " << format("%p", data.data()) << " new addr: 0"
551                  << " DataSize: " << DataSize << " StubBufSize: " << StubBufSize
552                  << " Allocate: " << Allocate << "\n");
553   }
554
555   Sections.push_back(SectionEntry(Name, Addr, DataSize, (uintptr_t)pData));
556
557   if (Checker)
558     Checker->registerSection(Obj.getImageName(), SectionID);
559
560   return SectionID;
561 }
562
563 unsigned RuntimeDyldImpl::findOrEmitSection(ObjectImage &Obj,
564                                             const SectionRef &Section,
565                                             bool IsCode,
566                                             ObjSectionToIDMap &LocalSections) {
567
568   unsigned SectionID = 0;
569   ObjSectionToIDMap::iterator i = LocalSections.find(Section);
570   if (i != LocalSections.end())
571     SectionID = i->second;
572   else {
573     SectionID = emitSection(Obj, Section, IsCode);
574     LocalSections[Section] = SectionID;
575   }
576   return SectionID;
577 }
578
579 void RuntimeDyldImpl::addRelocationForSection(const RelocationEntry &RE,
580                                               unsigned SectionID) {
581   Relocations[SectionID].push_back(RE);
582 }
583
584 void RuntimeDyldImpl::addRelocationForSymbol(const RelocationEntry &RE,
585                                              StringRef SymbolName) {
586   // Relocation by symbol.  If the symbol is found in the global symbol table,
587   // create an appropriate section relocation.  Otherwise, add it to
588   // ExternalSymbolRelocations.
589   SymbolTableMap::const_iterator Loc = GlobalSymbolTable.find(SymbolName);
590   if (Loc == GlobalSymbolTable.end()) {
591     ExternalSymbolRelocations[SymbolName].push_back(RE);
592   } else {
593     // Copy the RE since we want to modify its addend.
594     RelocationEntry RECopy = RE;
595     RECopy.Addend += Loc->second.second;
596     Relocations[Loc->second.first].push_back(RECopy);
597   }
598 }
599
600 uint8_t *RuntimeDyldImpl::createStubFunction(uint8_t *Addr,
601                                              unsigned AbiVariant) {
602   if (Arch == Triple::aarch64 || Arch == Triple::aarch64_be) {
603     // This stub has to be able to access the full address space,
604     // since symbol lookup won't necessarily find a handy, in-range,
605     // PLT stub for functions which could be anywhere.
606     uint32_t *StubAddr = (uint32_t *)Addr;
607
608     // Stub can use ip0 (== x16) to calculate address
609     *StubAddr = 0xd2e00010; // movz ip0, #:abs_g3:<addr>
610     StubAddr++;
611     *StubAddr = 0xf2c00010; // movk ip0, #:abs_g2_nc:<addr>
612     StubAddr++;
613     *StubAddr = 0xf2a00010; // movk ip0, #:abs_g1_nc:<addr>
614     StubAddr++;
615     *StubAddr = 0xf2800010; // movk ip0, #:abs_g0_nc:<addr>
616     StubAddr++;
617     *StubAddr = 0xd61f0200; // br ip0
618
619     return Addr;
620   } else if (Arch == Triple::arm || Arch == Triple::armeb) {
621     // TODO: There is only ARM far stub now. We should add the Thumb stub,
622     // and stubs for branches Thumb - ARM and ARM - Thumb.
623     uint32_t *StubAddr = (uint32_t *)Addr;
624     *StubAddr = 0xe51ff004; // ldr pc,<label>
625     return (uint8_t *)++StubAddr;
626   } else if (Arch == Triple::mipsel || Arch == Triple::mips) {
627     uint32_t *StubAddr = (uint32_t *)Addr;
628     // 0:   3c190000        lui     t9,%hi(addr).
629     // 4:   27390000        addiu   t9,t9,%lo(addr).
630     // 8:   03200008        jr      t9.
631     // c:   00000000        nop.
632     const unsigned LuiT9Instr = 0x3c190000, AdduiT9Instr = 0x27390000;
633     const unsigned JrT9Instr = 0x03200008, NopInstr = 0x0;
634
635     *StubAddr = LuiT9Instr;
636     StubAddr++;
637     *StubAddr = AdduiT9Instr;
638     StubAddr++;
639     *StubAddr = JrT9Instr;
640     StubAddr++;
641     *StubAddr = NopInstr;
642     return Addr;
643   } else if (Arch == Triple::ppc64 || Arch == Triple::ppc64le) {
644     // Depending on which version of the ELF ABI is in use, we need to
645     // generate one of two variants of the stub.  They both start with
646     // the same sequence to load the target address into r12.
647     writeInt32BE(Addr,    0x3D800000); // lis   r12, highest(addr)
648     writeInt32BE(Addr+4,  0x618C0000); // ori   r12, higher(addr)
649     writeInt32BE(Addr+8,  0x798C07C6); // sldi  r12, r12, 32
650     writeInt32BE(Addr+12, 0x658C0000); // oris  r12, r12, h(addr)
651     writeInt32BE(Addr+16, 0x618C0000); // ori   r12, r12, l(addr)
652     if (AbiVariant == 2) {
653       // PowerPC64 stub ELFv2 ABI: The address points to the function itself.
654       // The address is already in r12 as required by the ABI.  Branch to it.
655       writeInt32BE(Addr+20, 0xF8410018); // std   r2,  24(r1)
656       writeInt32BE(Addr+24, 0x7D8903A6); // mtctr r12
657       writeInt32BE(Addr+28, 0x4E800420); // bctr
658     } else {
659       // PowerPC64 stub ELFv1 ABI: The address points to a function descriptor.
660       // Load the function address on r11 and sets it to control register. Also
661       // loads the function TOC in r2 and environment pointer to r11.
662       writeInt32BE(Addr+20, 0xF8410028); // std   r2,  40(r1)
663       writeInt32BE(Addr+24, 0xE96C0000); // ld    r11, 0(r12)
664       writeInt32BE(Addr+28, 0xE84C0008); // ld    r2,  0(r12)
665       writeInt32BE(Addr+32, 0x7D6903A6); // mtctr r11
666       writeInt32BE(Addr+36, 0xE96C0010); // ld    r11, 16(r2)
667       writeInt32BE(Addr+40, 0x4E800420); // bctr
668     }
669     return Addr;
670   } else if (Arch == Triple::systemz) {
671     writeInt16BE(Addr,    0xC418);     // lgrl %r1,.+8
672     writeInt16BE(Addr+2,  0x0000);
673     writeInt16BE(Addr+4,  0x0004);
674     writeInt16BE(Addr+6,  0x07F1);     // brc 15,%r1
675     // 8-byte address stored at Addr + 8
676     return Addr;
677   } else if (Arch == Triple::x86_64) {
678     *Addr      = 0xFF; // jmp
679     *(Addr+1)  = 0x25; // rip
680     // 32-bit PC-relative address of the GOT entry will be stored at Addr+2
681   } else if (Arch == Triple::x86) {
682     *Addr      = 0xE9; // 32-bit pc-relative jump.
683   }
684   return Addr;
685 }
686
687 // Assign an address to a symbol name and resolve all the relocations
688 // associated with it.
689 void RuntimeDyldImpl::reassignSectionAddress(unsigned SectionID,
690                                              uint64_t Addr) {
691   // The address to use for relocation resolution is not
692   // the address of the local section buffer. We must be doing
693   // a remote execution environment of some sort. Relocations can't
694   // be applied until all the sections have been moved.  The client must
695   // trigger this with a call to MCJIT::finalize() or
696   // RuntimeDyld::resolveRelocations().
697   //
698   // Addr is a uint64_t because we can't assume the pointer width
699   // of the target is the same as that of the host. Just use a generic
700   // "big enough" type.
701   DEBUG(dbgs() << "Reassigning address for section "
702                << SectionID << " (" << Sections[SectionID].Name << "): "
703                << format("0x%016" PRIx64, Sections[SectionID].LoadAddress) << " -> "
704                << format("0x%016" PRIx64, Addr) << "\n");
705   Sections[SectionID].LoadAddress = Addr;
706 }
707
708 void RuntimeDyldImpl::resolveRelocationList(const RelocationList &Relocs,
709                                             uint64_t Value) {
710   for (unsigned i = 0, e = Relocs.size(); i != e; ++i) {
711     const RelocationEntry &RE = Relocs[i];
712     // Ignore relocations for sections that were not loaded
713     if (Sections[RE.SectionID].Address == nullptr)
714       continue;
715     resolveRelocation(RE, Value);
716   }
717 }
718
719 void RuntimeDyldImpl::resolveExternalSymbols() {
720   while (!ExternalSymbolRelocations.empty()) {
721     StringMap<RelocationList>::iterator i = ExternalSymbolRelocations.begin();
722
723     StringRef Name = i->first();
724     if (Name.size() == 0) {
725       // This is an absolute symbol, use an address of zero.
726       DEBUG(dbgs() << "Resolving absolute relocations."
727                    << "\n");
728       RelocationList &Relocs = i->second;
729       resolveRelocationList(Relocs, 0);
730     } else {
731       uint64_t Addr = 0;
732       SymbolTableMap::const_iterator Loc = GlobalSymbolTable.find(Name);
733       if (Loc == GlobalSymbolTable.end()) {
734         // This is an external symbol, try to get its address from
735         // MemoryManager.
736         Addr = MemMgr->getSymbolAddress(Name.data());
737         // The call to getSymbolAddress may have caused additional modules to
738         // be loaded, which may have added new entries to the
739         // ExternalSymbolRelocations map.  Consquently, we need to update our
740         // iterator.  This is also why retrieval of the relocation list
741         // associated with this symbol is deferred until below this point.
742         // New entries may have been added to the relocation list.
743         i = ExternalSymbolRelocations.find(Name);
744       } else {
745         // We found the symbol in our global table.  It was probably in a
746         // Module that we loaded previously.
747         SymbolLoc SymLoc = Loc->second;
748         Addr = getSectionLoadAddress(SymLoc.first) + SymLoc.second;
749       }
750
751       // FIXME: Implement error handling that doesn't kill the host program!
752       if (!Addr)
753         report_fatal_error("Program used external function '" + Name +
754                            "' which could not be resolved!");
755
756       updateGOTEntries(Name, Addr);
757       DEBUG(dbgs() << "Resolving relocations Name: " << Name << "\t"
758                    << format("0x%lx", Addr) << "\n");
759       // This list may have been updated when we called getSymbolAddress, so
760       // don't change this code to get the list earlier.
761       RelocationList &Relocs = i->second;
762       resolveRelocationList(Relocs, Addr);
763     }
764
765     ExternalSymbolRelocations.erase(i);
766   }
767 }
768
769 //===----------------------------------------------------------------------===//
770 // RuntimeDyld class implementation
771 RuntimeDyld::RuntimeDyld(RTDyldMemoryManager *mm) {
772   // FIXME: There's a potential issue lurking here if a single instance of
773   // RuntimeDyld is used to load multiple objects.  The current implementation
774   // associates a single memory manager with a RuntimeDyld instance.  Even
775   // though the public class spawns a new 'impl' instance for each load,
776   // they share a single memory manager.  This can become a problem when page
777   // permissions are applied.
778   Dyld = nullptr;
779   MM = mm;
780   ProcessAllSections = false;
781   Checker = nullptr;
782 }
783
784 RuntimeDyld::~RuntimeDyld() {}
785
786 static std::unique_ptr<RuntimeDyldELF>
787 createRuntimeDyldELF(RTDyldMemoryManager *MM, bool ProcessAllSections,
788                      RuntimeDyldCheckerImpl *Checker) {
789   std::unique_ptr<RuntimeDyldELF> Dyld(new RuntimeDyldELF(MM));
790   Dyld->setProcessAllSections(ProcessAllSections);
791   Dyld->setRuntimeDyldChecker(Checker);
792   return Dyld;
793 }
794
795 static std::unique_ptr<RuntimeDyldMachO>
796 createRuntimeDyldMachO(Triple::ArchType Arch, RTDyldMemoryManager *MM,
797                        bool ProcessAllSections, RuntimeDyldCheckerImpl *Checker) {
798   std::unique_ptr<RuntimeDyldMachO> Dyld(RuntimeDyldMachO::create(Arch, MM));
799   Dyld->setProcessAllSections(ProcessAllSections);
800   Dyld->setRuntimeDyldChecker(Checker);
801   return Dyld;
802 }
803
804 std::unique_ptr<ObjectImage>
805 RuntimeDyld::loadObject(std::unique_ptr<ObjectFile> InputObject) {
806   std::unique_ptr<ObjectImage> InputImage;
807
808   ObjectFile &Obj = *InputObject;
809
810   if (InputObject->isELF()) {
811     InputImage.reset(RuntimeDyldELF::createObjectImageFromFile(std::move(InputObject)));
812     if (!Dyld)
813       Dyld = createRuntimeDyldELF(MM, ProcessAllSections, Checker);
814   } else if (InputObject->isMachO()) {
815     InputImage.reset(RuntimeDyldMachO::createObjectImageFromFile(std::move(InputObject)));
816     if (!Dyld)
817       Dyld = createRuntimeDyldMachO(
818           static_cast<Triple::ArchType>(InputImage->getArch()), MM,
819           ProcessAllSections, Checker);
820   } else
821     report_fatal_error("Incompatible object format!");
822
823   if (!Dyld->isCompatibleFile(&Obj))
824     report_fatal_error("Incompatible object format!");
825
826   return Dyld->loadObject(std::move(InputImage));
827 }
828
829 std::unique_ptr<ObjectImage>
830 RuntimeDyld::loadObject(std::unique_ptr<ObjectBuffer> InputBuffer) {
831   std::unique_ptr<ObjectImage> InputImage;
832   sys::fs::file_magic Type = sys::fs::identify_magic(InputBuffer->getBuffer());
833   auto *InputBufferPtr = InputBuffer.get();
834
835   switch (Type) {
836   case sys::fs::file_magic::elf_relocatable:
837   case sys::fs::file_magic::elf_executable:
838   case sys::fs::file_magic::elf_shared_object:
839   case sys::fs::file_magic::elf_core:
840     InputImage = RuntimeDyldELF::createObjectImage(std::move(InputBuffer));
841     if (!Dyld)
842       Dyld = createRuntimeDyldELF(MM, ProcessAllSections, Checker);
843     break;
844   case sys::fs::file_magic::macho_object:
845   case sys::fs::file_magic::macho_executable:
846   case sys::fs::file_magic::macho_fixed_virtual_memory_shared_lib:
847   case sys::fs::file_magic::macho_core:
848   case sys::fs::file_magic::macho_preload_executable:
849   case sys::fs::file_magic::macho_dynamically_linked_shared_lib:
850   case sys::fs::file_magic::macho_dynamic_linker:
851   case sys::fs::file_magic::macho_bundle:
852   case sys::fs::file_magic::macho_dynamically_linked_shared_lib_stub:
853   case sys::fs::file_magic::macho_dsym_companion:
854     InputImage = RuntimeDyldMachO::createObjectImage(std::move(InputBuffer));
855     if (!Dyld)
856       Dyld = createRuntimeDyldMachO(
857           static_cast<Triple::ArchType>(InputImage->getArch()), MM,
858           ProcessAllSections, Checker);
859     break;
860   case sys::fs::file_magic::unknown:
861   case sys::fs::file_magic::bitcode:
862   case sys::fs::file_magic::archive:
863   case sys::fs::file_magic::coff_object:
864   case sys::fs::file_magic::coff_import_library:
865   case sys::fs::file_magic::pecoff_executable:
866   case sys::fs::file_magic::macho_universal_binary:
867   case sys::fs::file_magic::windows_resource:
868     report_fatal_error("Incompatible object format!");
869   }
870
871   if (!Dyld->isCompatibleFormat(InputBufferPtr))
872     report_fatal_error("Incompatible object format!");
873
874   return Dyld->loadObject(std::move(InputImage));
875 }
876
877 void *RuntimeDyld::getSymbolAddress(StringRef Name) const {
878   if (!Dyld)
879     return nullptr;
880   return Dyld->getSymbolAddress(Name);
881 }
882
883 uint64_t RuntimeDyld::getSymbolLoadAddress(StringRef Name) const {
884   if (!Dyld)
885     return 0;
886   return Dyld->getSymbolLoadAddress(Name);
887 }
888
889 void RuntimeDyld::resolveRelocations() { Dyld->resolveRelocations(); }
890
891 void RuntimeDyld::reassignSectionAddress(unsigned SectionID, uint64_t Addr) {
892   Dyld->reassignSectionAddress(SectionID, Addr);
893 }
894
895 void RuntimeDyld::mapSectionAddress(const void *LocalAddress,
896                                     uint64_t TargetAddress) {
897   Dyld->mapSectionAddress(LocalAddress, TargetAddress);
898 }
899
900 bool RuntimeDyld::hasError() { return Dyld->hasError(); }
901
902 StringRef RuntimeDyld::getErrorString() { return Dyld->getErrorString(); }
903
904 void RuntimeDyld::registerEHFrames() {
905   if (Dyld)
906     Dyld->registerEHFrames();
907 }
908
909 void RuntimeDyld::deregisterEHFrames() {
910   if (Dyld)
911     Dyld->deregisterEHFrames();
912 }
913
914 } // end namespace llvm