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