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 915