1 //===- ObjectLinker.cpp ---------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #include <mcld/Object/ObjectLinker.h> 10 11 #include <mcld/LinkerConfig.h> 12 #include <mcld/LinkerScript.h> 13 #include <mcld/Module.h> 14 #include <mcld/InputTree.h> 15 #include <mcld/IRBuilder.h> 16 #include <mcld/LD/LDSection.h> 17 #include <mcld/LD/LDContext.h> 18 #include <mcld/LD/Archive.h> 19 #include <mcld/LD/ArchiveReader.h> 20 #include <mcld/LD/ObjectReader.h> 21 #include <mcld/LD/DynObjReader.h> 22 #include <mcld/LD/GroupReader.h> 23 #include <mcld/LD/BinaryReader.h> 24 #include <mcld/LD/GarbageCollection.h> 25 #include <mcld/LD/IdenticalCodeFolding.h> 26 #include <mcld/LD/ObjectWriter.h> 27 #include <mcld/LD/ResolveInfo.h> 28 #include <mcld/LD/RelocData.h> 29 #include <mcld/LD/Relocator.h> 30 #include <mcld/LD/SectionData.h> 31 #include <mcld/LD/BranchIslandFactory.h> 32 #include <mcld/Script/ScriptFile.h> 33 #include <mcld/Script/ScriptReader.h> 34 #include <mcld/Script/Assignment.h> 35 #include <mcld/Script/Operand.h> 36 #include <mcld/Script/RpnEvaluator.h> 37 #include <mcld/Support/RealPath.h> 38 #include <mcld/Support/FileOutputBuffer.h> 39 #include <mcld/Support/MsgHandling.h> 40 #include <mcld/Target/TargetLDBackend.h> 41 #include <mcld/Fragment/Relocation.h> 42 #include <mcld/Object/ObjectBuilder.h> 43 44 #include <llvm/Support/Casting.h> 45 #include <llvm/Support/Host.h> 46 #include <system_error> 47 48 using namespace llvm; 49 using namespace mcld; 50 51 //===----------------------------------------------------------------------===// 52 // ObjectLinker 53 //===----------------------------------------------------------------------===// 54 ObjectLinker::ObjectLinker(const LinkerConfig& pConfig, 55 TargetLDBackend& pLDBackend) 56 : m_Config(pConfig), 57 m_pModule(NULL), 58 m_pBuilder(NULL), 59 m_LDBackend(pLDBackend), 60 m_pObjectReader(NULL), 61 m_pDynObjReader(NULL), 62 m_pArchiveReader(NULL), 63 m_pGroupReader(NULL), 64 m_pBinaryReader(NULL), 65 m_pScriptReader(NULL), 66 m_pWriter(NULL) { 67 } 68 69 ObjectLinker::~ObjectLinker() 70 { 71 delete m_pObjectReader; 72 delete m_pDynObjReader; 73 delete m_pArchiveReader; 74 delete m_pGroupReader; 75 delete m_pBinaryReader; 76 delete m_pScriptReader; 77 delete m_pWriter; 78 } 79 80 bool ObjectLinker::initialize(Module& pModule, IRBuilder& pBuilder) 81 { 82 m_pModule = &pModule; 83 m_pBuilder = &pBuilder; 84 85 // initialize the readers and writers 86 m_pObjectReader = m_LDBackend.createObjectReader(*m_pBuilder); 87 m_pArchiveReader = m_LDBackend.createArchiveReader(*m_pModule); 88 m_pDynObjReader = m_LDBackend.createDynObjReader(*m_pBuilder); 89 m_pBinaryReader = m_LDBackend.createBinaryReader(*m_pBuilder); 90 m_pGroupReader = new GroupReader(*m_pModule, *m_pObjectReader, 91 *m_pDynObjReader, *m_pArchiveReader, *m_pBinaryReader); 92 m_pScriptReader = new ScriptReader(*m_pGroupReader); 93 m_pWriter = m_LDBackend.createWriter(); 94 95 // initialize Relocator 96 m_LDBackend.initRelocator(); 97 98 return true; 99 } 100 101 /// initStdSections - initialize standard sections 102 bool ObjectLinker::initStdSections() 103 { 104 ObjectBuilder builder(*m_pModule); 105 106 // initialize standard sections 107 if (!m_LDBackend.initStdSections(builder)) 108 return false; 109 110 // initialize target-dependent sections 111 m_LDBackend.initTargetSections(*m_pModule, builder); 112 113 return true; 114 } 115 116 void ObjectLinker::addUndefinedSymbols() 117 { 118 // Add the symbol set by -u as an undefind global symbol into symbol pool 119 GeneralOptions::const_undef_sym_iterator usym; 120 GeneralOptions::const_undef_sym_iterator usymEnd = 121 m_Config.options().undef_sym_end(); 122 for (usym = m_Config.options().undef_sym_begin(); usym != usymEnd; ++usym) { 123 Resolver::Result result; 124 m_pModule->getNamePool().insertSymbol(*usym, // name 125 false, // isDyn 126 ResolveInfo::NoType, 127 ResolveInfo::Undefined, 128 ResolveInfo::Global, 129 0x0, // size 130 0x0, // value 131 ResolveInfo::Default, 132 NULL, 133 result); 134 135 LDSymbol* output_sym = result.info->outSymbol(); 136 bool has_output_sym = (NULL != output_sym); 137 138 // create the output symbol if it dose not have one 139 if (!result.existent || !has_output_sym) { 140 output_sym = LDSymbol::Create(*result.info); 141 result.info->setSymPtr(output_sym); 142 output_sym->setFragmentRef(FragmentRef::Null()); 143 } 144 } 145 } 146 147 void ObjectLinker::normalize() 148 { 149 // ----- set up inputs ----- // 150 Module::input_iterator input, inEnd = m_pModule->input_end(); 151 for (input = m_pModule->input_begin(); input!=inEnd; ++input) { 152 // is a group node 153 if (isGroup(input)) { 154 getGroupReader()->readGroup(input, inEnd, m_pBuilder->getInputBuilder(), 155 m_Config); 156 continue; 157 } 158 159 // already got type - for example, bitcode or external OIR (object 160 // intermediate representation) 161 if ((*input)->type() == Input::Script || 162 (*input)->type() == Input::Archive || 163 (*input)->type() == Input::External) 164 continue; 165 166 if (Input::Object == (*input)->type()) { 167 m_pModule->getObjectList().push_back(*input); 168 continue; 169 } 170 171 if (Input::DynObj == (*input)->type()) { 172 m_pModule->getLibraryList().push_back(*input); 173 continue; 174 } 175 176 bool doContinue = false; 177 // read input as a binary file 178 if (getBinaryReader()->isMyFormat(**input, doContinue)) { 179 (*input)->setType(Input::Object); 180 getBinaryReader()->readBinary(**input); 181 m_pModule->getObjectList().push_back(*input); 182 } 183 // is a relocatable object file 184 else if (doContinue && getObjectReader()->isMyFormat(**input, doContinue)) { 185 (*input)->setType(Input::Object); 186 getObjectReader()->readHeader(**input); 187 getObjectReader()->readSections(**input); 188 getObjectReader()->readSymbols(**input); 189 m_pModule->getObjectList().push_back(*input); 190 } 191 // is a shared object file 192 else if (doContinue && getDynObjReader()->isMyFormat(**input, doContinue)) { 193 (*input)->setType(Input::DynObj); 194 getDynObjReader()->readHeader(**input); 195 getDynObjReader()->readSymbols(**input); 196 m_pModule->getLibraryList().push_back(*input); 197 } 198 // is an archive 199 else if (doContinue && getArchiveReader()->isMyFormat(**input, doContinue)) { 200 (*input)->setType(Input::Archive); 201 if (m_Config.options().isInExcludeLIBS(**input)) { 202 (*input)->setNoExport(); 203 } 204 Archive archive(**input, m_pBuilder->getInputBuilder()); 205 getArchiveReader()->readArchive(m_Config, archive); 206 if(archive.numOfObjectMember() > 0) { 207 m_pModule->getInputTree().merge<InputTree::Inclusive>(input, 208 archive.inputs()); 209 } 210 } 211 // try to parse input as a linker script 212 else if (doContinue && getScriptReader()->isMyFormat(**input, doContinue)) { 213 ScriptFile script(ScriptFile::LDScript, **input, 214 m_pBuilder->getInputBuilder()); 215 if (getScriptReader()->readScript(m_Config, script)) { 216 (*input)->setType(Input::Script); 217 script.activate(*m_pModule); 218 if (script.inputs().size() > 0) { 219 m_pModule->getInputTree().merge<InputTree::Inclusive>(input, 220 script.inputs()); 221 } 222 } 223 } 224 else { 225 if (m_Config.options().warnMismatch()) 226 warning(diag::warn_unrecognized_input_file) << (*input)->path() 227 << m_Config.targets().triple().str(); 228 } 229 } // end of for 230 } 231 232 bool ObjectLinker::linkable() const 233 { 234 // check we have input and output files 235 if (m_pModule->getInputTree().empty()) { 236 error(diag::err_no_inputs); 237 return false; 238 } 239 240 // can not mix -static with shared objects 241 Module::const_lib_iterator lib, libEnd = m_pModule->lib_end(); 242 for (lib = m_pModule->lib_begin(); lib != libEnd; ++lib) { 243 if((*lib)->attribute()->isStatic()) { 244 error(diag::err_mixed_shared_static_objects) 245 << (*lib)->name() << (*lib)->path(); 246 return false; 247 } 248 } 249 250 // --nmagic and --omagic options lead to static executable program. 251 // These options turn off page alignment of sections. Because the 252 // sections are not aligned to pages, these sections can not contain any 253 // exported functions. Also, because the two options disable linking 254 // against shared libraries, the output absolutely does not call outside 255 // functions. 256 if (m_Config.options().nmagic() && !m_Config.isCodeStatic()) { 257 error(diag::err_nmagic_not_static); 258 return false; 259 } 260 if (m_Config.options().omagic() && !m_Config.isCodeStatic()) { 261 error(diag::err_omagic_not_static); 262 return false; 263 } 264 265 return true; 266 } 267 268 void ObjectLinker::dataStrippingOpt() 269 { 270 // Garbege collection 271 if (m_Config.options().GCSections()) { 272 GarbageCollection GC(m_Config, m_LDBackend, *m_pModule); 273 GC.run(); 274 } 275 276 // Identical code folding 277 if (m_Config.options().getICFMode() != GeneralOptions::ICF_None) { 278 IdenticalCodeFolding icf(m_Config, m_LDBackend, *m_pModule); 279 icf.foldIdenticalCode(); 280 } 281 return; 282 } 283 284 /// readRelocations - read all relocation entries 285 /// 286 /// All symbols should be read and resolved before this function. 287 bool ObjectLinker::readRelocations() 288 { 289 // Bitcode is read by the other path. This function reads relocation sections 290 // in object files. 291 mcld::InputTree::bfs_iterator input, inEnd = m_pModule->getInputTree().bfs_end(); 292 for (input=m_pModule->getInputTree().bfs_begin(); input!=inEnd; ++input) { 293 if ((*input)->type() == Input::Object && (*input)->hasMemArea()) { 294 if (!getObjectReader()->readRelocations(**input)) 295 return false; 296 } 297 // ignore the other kinds of files. 298 } 299 return true; 300 } 301 302 /// mergeSections - put allinput sections into output sections 303 bool ObjectLinker::mergeSections() 304 { 305 ObjectBuilder builder(*m_pModule); 306 Module::obj_iterator obj, objEnd = m_pModule->obj_end(); 307 for (obj = m_pModule->obj_begin(); obj != objEnd; ++obj) { 308 LDContext::sect_iterator sect, sectEnd = (*obj)->context()->sectEnd(); 309 for (sect = (*obj)->context()->sectBegin(); sect != sectEnd; ++sect) { 310 switch ((*sect)->kind()) { 311 // Some *INPUT sections should not be merged. 312 case LDFileFormat::Folded: 313 case LDFileFormat::Ignore: 314 case LDFileFormat::Null: 315 case LDFileFormat::NamePool: 316 case LDFileFormat::Group: 317 case LDFileFormat::StackNote: 318 // skip 319 continue; 320 case LDFileFormat::Relocation: { 321 if (!(*sect)->hasRelocData()) 322 continue; // skip 323 324 if ((*sect)->getLink()->kind() == LDFileFormat::Ignore || 325 (*sect)->getLink()->kind() == LDFileFormat::Folded) 326 (*sect)->setKind(LDFileFormat::Ignore); 327 break; 328 } 329 case LDFileFormat::Target: 330 if (!m_LDBackend.mergeSection(*m_pModule, **obj, **sect)) { 331 error(diag::err_cannot_merge_section) << (*sect)->name() 332 << (*obj)->name(); 333 return false; 334 } 335 break; 336 case LDFileFormat::EhFrame: { 337 if (!(*sect)->hasEhFrame()) 338 continue; // skip 339 340 LDSection* out_sect = NULL; 341 if (NULL != (out_sect = builder.MergeSection(**obj, **sect))) { 342 if (!m_LDBackend.updateSectionFlags(*out_sect, **sect)) { 343 error(diag::err_cannot_merge_section) << (*sect)->name() 344 << (*obj)->name(); 345 return false; 346 } 347 } 348 break; 349 } 350 default: { 351 if (!(*sect)->hasSectionData()) 352 continue; // skip 353 354 LDSection* out_sect = NULL; 355 if (NULL != (out_sect = builder.MergeSection(**obj, **sect))) { 356 if (!m_LDBackend.updateSectionFlags(*out_sect, **sect)) { 357 error(diag::err_cannot_merge_section) << (*sect)->name() 358 << (*obj)->name(); 359 return false; 360 } 361 } 362 break; 363 } 364 } // end of switch 365 } // for each section 366 } // for each obj 367 368 RpnEvaluator evaluator(*m_pModule, m_LDBackend); 369 SectionMap::iterator out, outBegin, outEnd; 370 outBegin = m_pModule->getScript().sectionMap().begin(); 371 outEnd = m_pModule->getScript().sectionMap().end(); 372 for (out = outBegin; out != outEnd; ++out) { 373 uint64_t out_align = 0x0, in_align = 0x0; 374 LDSection* out_sect = (*out)->getSection(); 375 SectionMap::Output::iterator in, inBegin, inEnd; 376 inBegin = (*out)->begin(); 377 inEnd = (*out)->end(); 378 379 // force input alignment from ldscript if any 380 if ((*out)->prolog().hasSubAlign()) { 381 evaluator.eval((*out)->prolog().subAlign(), in_align); 382 } 383 384 for (in = inBegin; in != inEnd; ++in) { 385 LDSection* in_sect = (*in)->getSection(); 386 if ((*out)->prolog().hasSubAlign()) 387 in_sect->setAlign(in_align); 388 389 if (builder.MoveSectionData(*in_sect->getSectionData(), 390 *out_sect->getSectionData())) { 391 builder.UpdateSectionAlign(*out_sect, *in_sect); 392 m_LDBackend.updateSectionFlags(*out_sect, *in_sect); 393 } 394 } // for each input section description 395 396 // force output alignment from ldscript if any 397 if ((*out)->prolog().hasAlign()) { 398 evaluator.eval((*out)->prolog().align(), out_align); 399 out_sect->setAlign(out_align); 400 } 401 402 if ((*out)->hasContent()) { 403 LDSection* target = m_pModule->getSection((*out)->name()); 404 assert(target != NULL && target->hasSectionData()); 405 if (builder.MoveSectionData(*out_sect->getSectionData(), 406 *target->getSectionData())) { 407 builder.UpdateSectionAlign(*target, *out_sect); 408 m_LDBackend.updateSectionFlags(*target, *out_sect); 409 } 410 } 411 } // for each output section description 412 413 return true; 414 } 415 416 void ObjectLinker::addSymbolToOutput(ResolveInfo& pInfo, Module& pModule) 417 { 418 // section symbols will be defined by linker later, we should not add section 419 // symbols to output here 420 if (ResolveInfo::Section == pInfo.type() || NULL == pInfo.outSymbol()) 421 return; 422 423 // if the symbols defined in the Ignore sections (e.g. discared by GC), then 424 // not to put them to output 425 if (pInfo.outSymbol()->hasFragRef() && LDFileFormat::Ignore == 426 pInfo.outSymbol()->fragRef()->frag()->getParent()->getSection().kind()) 427 return; 428 429 if (pInfo.shouldForceLocal(m_Config)) 430 pModule.getSymbolTable().forceLocal(*pInfo.outSymbol()); 431 else 432 pModule.getSymbolTable().add(*pInfo.outSymbol()); 433 } 434 435 void ObjectLinker::addSymbolsToOutput(Module& pModule) 436 { 437 // Traverse all the free ResolveInfo and add the output symobols to output 438 NamePool::freeinfo_iterator free_it, 439 free_end = pModule.getNamePool().freeinfo_end(); 440 for (free_it = pModule.getNamePool().freeinfo_begin(); free_it != free_end; 441 ++free_it) 442 addSymbolToOutput(**free_it, pModule); 443 444 445 // Traverse all the resolveInfo and add the output symbol to output 446 NamePool::syminfo_iterator info_it, 447 info_end = pModule.getNamePool().syminfo_end(); 448 for (info_it = pModule.getNamePool().syminfo_begin(); info_it != info_end; 449 ++info_it) 450 addSymbolToOutput(*info_it.getEntry(), pModule); 451 } 452 453 454 /// addStandardSymbols - shared object and executable files need some 455 /// standard symbols 456 /// @return if there are some input symbols with the same name to the 457 /// standard symbols, return false 458 bool ObjectLinker::addStandardSymbols() 459 { 460 // create and add section symbols for each output section 461 Module::iterator iter, iterEnd = m_pModule->end(); 462 for (iter = m_pModule->begin(); iter != iterEnd; ++iter) { 463 m_pModule->getSectionSymbolSet().add(**iter, m_pModule->getNamePool()); 464 } 465 466 return m_LDBackend.initStandardSymbols(*m_pBuilder, *m_pModule); 467 } 468 469 /// addTargetSymbols - some targets, such as MIPS and ARM, need some 470 /// target-dependent symbols 471 /// @return if there are some input symbols with the same name to the 472 /// target symbols, return false 473 bool ObjectLinker::addTargetSymbols() 474 { 475 m_LDBackend.initTargetSymbols(*m_pBuilder, *m_pModule); 476 return true; 477 } 478 479 /// addScriptSymbols - define symbols from the command line option or linker 480 /// scripts. 481 bool ObjectLinker::addScriptSymbols() 482 { 483 LinkerScript& script = m_pModule->getScript(); 484 LinkerScript::Assignments::iterator it, ie = script.assignments().end(); 485 // go through the entire symbol assignments 486 for (it = script.assignments().begin(); it != ie; ++it) { 487 LDSymbol* symbol = NULL; 488 assert((*it).second.symbol().type() == Operand::SYMBOL); 489 const llvm::StringRef symName = (*it).second.symbol().name(); 490 ResolveInfo::Type type = ResolveInfo::NoType; 491 ResolveInfo::Visibility vis = ResolveInfo::Default; 492 size_t size = 0; 493 ResolveInfo* old_info = m_pModule->getNamePool().findInfo(symName); 494 // if the symbol does not exist, we can set type to NOTYPE 495 // else we retain its type, same goes for size - 0 or retain old value 496 // and visibility - Default or retain 497 if (old_info != NULL) { 498 type = static_cast<ResolveInfo::Type>(old_info->type()); 499 vis = old_info->visibility(); 500 size = old_info->size(); 501 } 502 503 // Add symbol and refine the visibility if needed 504 // FIXME: bfd linker would change the binding instead, but currently 505 // ABS is also a kind of Binding in ResolveInfo. 506 switch ((*it).second.type()) { 507 case Assignment::HIDDEN: 508 vis = ResolveInfo::Hidden; 509 // Fall through 510 case Assignment::DEFAULT: 511 symbol = 512 m_pBuilder->AddSymbol<IRBuilder::Force, 513 IRBuilder::Unresolve>(symName, 514 type, 515 ResolveInfo::Define, 516 ResolveInfo::Absolute, 517 size, 518 0x0, 519 FragmentRef::Null(), 520 vis); 521 break; 522 case Assignment::PROVIDE_HIDDEN: 523 vis = ResolveInfo::Hidden; 524 // Fall through 525 case Assignment::PROVIDE: 526 symbol = 527 m_pBuilder->AddSymbol<IRBuilder::AsReferred, 528 IRBuilder::Unresolve>(symName, 529 type, 530 ResolveInfo::Define, 531 ResolveInfo::Absolute, 532 size, 533 0x0, 534 FragmentRef::Null(), 535 vis); 536 break; 537 } 538 // Set symbol of this assignment. 539 (*it).first = symbol; 540 } 541 return true; 542 } 543 544 bool ObjectLinker::scanRelocations() 545 { 546 // apply all relocations of all inputs 547 Module::obj_iterator input, inEnd = m_pModule->obj_end(); 548 for (input = m_pModule->obj_begin(); input != inEnd; ++input) { 549 m_LDBackend.getRelocator()->initializeScan(**input); 550 LDContext::sect_iterator rs, rsEnd = (*input)->context()->relocSectEnd(); 551 for (rs = (*input)->context()->relocSectBegin(); rs != rsEnd; ++rs) { 552 // bypass the reloc section if 553 // 1. its section kind is changed to Ignore. (The target section is a 554 // discarded group section.) 555 // 2. it has no reloc data. (All symbols in the input relocs are in the 556 // discarded group sections) 557 if (LDFileFormat::Ignore == (*rs)->kind() || !(*rs)->hasRelocData()) 558 continue; 559 RelocData::iterator reloc, rEnd = (*rs)->getRelocData()->end(); 560 for (reloc = (*rs)->getRelocData()->begin(); reloc != rEnd; ++reloc) { 561 Relocation* relocation = llvm::cast<Relocation>(reloc); 562 563 // bypass the reloc if the symbol is in the discarded input section 564 ResolveInfo* info = relocation->symInfo(); 565 if (!info->outSymbol()->hasFragRef() && 566 ResolveInfo::Section == info->type() && 567 ResolveInfo::Undefined == info->desc()) 568 continue; 569 570 // scan relocation 571 if (LinkerConfig::Object != m_Config.codeGenType()) 572 m_LDBackend.getRelocator()->scanRelocation( 573 *relocation, *m_pBuilder, *m_pModule, **rs, **input); 574 else 575 m_LDBackend.getRelocator()->partialScanRelocation( 576 *relocation, *m_pModule, **rs); 577 } // for all relocations 578 } // for all relocation section 579 m_LDBackend.getRelocator()->finalizeScan(**input); 580 } // for all inputs 581 return true; 582 } 583 584 /// initStubs - initialize stub-related stuff. 585 bool ObjectLinker::initStubs() 586 { 587 // initialize BranchIslandFactory 588 m_LDBackend.initBRIslandFactory(); 589 590 // initialize StubFactory 591 m_LDBackend.initStubFactory(); 592 593 // initialize target stubs 594 m_LDBackend.initTargetStubs(); 595 return true; 596 } 597 598 /// allocateCommonSymobols - allocate fragments for common symbols to the 599 /// corresponding sections 600 bool ObjectLinker::allocateCommonSymbols() 601 { 602 if (LinkerConfig::Object != m_Config.codeGenType() || 603 m_Config.options().isDefineCommon()) 604 return m_LDBackend.allocateCommonSymbols(*m_pModule); 605 return true; 606 } 607 608 /// prelayout - help backend to do some modification before layout 609 bool ObjectLinker::prelayout() 610 { 611 // finalize the section symbols, set their fragment reference and push them 612 // into output symbol table 613 Module::iterator sect, sEnd = m_pModule->end(); 614 for (sect = m_pModule->begin(); sect != sEnd; ++sect) { 615 m_pModule->getSectionSymbolSet().finalize(**sect, 616 m_pModule->getSymbolTable(), 617 m_Config.codeGenType() == LinkerConfig::Object); 618 } 619 620 m_LDBackend.preLayout(*m_pModule, *m_pBuilder); 621 622 /// check program interpreter - computer the name size of the runtime dyld 623 if (!m_Config.isCodeStatic() && 624 (LinkerConfig::Exec == m_Config.codeGenType() || 625 m_Config.options().isPIE() || 626 m_Config.options().hasDyld())) 627 m_LDBackend.sizeInterp(); 628 629 /// measure NamePools - compute the size of name pool sections 630 /// In ELF, will compute the size of.symtab, .strtab, .dynsym, .dynstr, 631 /// .hash and .shstrtab sections. 632 /// 633 /// dump all symbols and strings from ObjectLinker and build the format-dependent 634 /// hash table. 635 /// @note sizeNamePools replies on LinkerConfig::CodePosition. Must determine 636 /// code position model before calling GNULDBackend::sizeNamePools() 637 m_LDBackend.sizeNamePools(*m_pModule); 638 639 // Do this after backend prelayout since it may add eh_frame entries. 640 LDSection* eh_frame_sect = m_pModule->getSection(".eh_frame"); 641 if (eh_frame_sect && eh_frame_sect->hasEhFrame()) 642 eh_frame_sect->getEhFrame()->computeOffsetSize(); 643 m_LDBackend.createAndSizeEhFrameHdr(*m_pModule); 644 645 return true; 646 } 647 648 /// layout - linearly layout all output sections and reserve some space 649 /// for GOT/PLT 650 /// Because we do not support instruction relaxing in this early version, 651 /// if there is a branch can not jump to its target, we return false 652 /// directly 653 bool ObjectLinker::layout() 654 { 655 m_LDBackend.layout(*m_pModule); 656 return true; 657 } 658 659 /// prelayout - help backend to do some modification after layout 660 bool ObjectLinker::postlayout() 661 { 662 m_LDBackend.postLayout(*m_pModule, *m_pBuilder); 663 return true; 664 } 665 666 /// finalizeSymbolValue - finalize the resolved symbol value. 667 /// Before relocate(), after layout(), ObjectLinker should correct value of all 668 /// symbol. 669 bool ObjectLinker::finalizeSymbolValue() 670 { 671 Module::sym_iterator symbol, symEnd = m_pModule->sym_end(); 672 for (symbol = m_pModule->sym_begin(); symbol != symEnd; ++symbol) { 673 674 if ((*symbol)->resolveInfo()->isAbsolute() || 675 (*symbol)->resolveInfo()->type() == ResolveInfo::File) { 676 // absolute symbols should just use its value directly (i.e., the result 677 // of symbol resolution) 678 continue; 679 } 680 681 if ((*symbol)->resolveInfo()->type() == ResolveInfo::ThreadLocal) { 682 m_LDBackend.finalizeTLSSymbol(**symbol); 683 continue; 684 } 685 686 if ((*symbol)->hasFragRef()) { 687 // set the virtual address of the symbol. If the output file is 688 // relocatable object file, the section's virtual address becomes zero. 689 // And the symbol's value become section relative offset. 690 uint64_t value = (*symbol)->fragRef()->getOutputOffset(); 691 assert(NULL != (*symbol)->fragRef()->frag()); 692 uint64_t addr = 693 (*symbol)->fragRef()->frag()->getParent()->getSection().addr(); 694 (*symbol)->setValue(value + addr); 695 continue; 696 } 697 } 698 699 RpnEvaluator evaluator(*m_pModule, m_LDBackend); 700 bool finalized = m_LDBackend.finalizeSymbols(); 701 bool scriptSymsFinalized = true; 702 LinkerScript& script = m_pModule->getScript(); 703 LinkerScript::Assignments::iterator assign, assignEnd; 704 assignEnd = script.assignments().end(); 705 for (assign = script.assignments().begin(); assign != assignEnd; ++assign) { 706 LDSymbol* symbol = (*assign).first; 707 Assignment& assignment = (*assign).second; 708 709 if (symbol == NULL) 710 continue; 711 712 scriptSymsFinalized &= assignment.assign(evaluator); 713 if (!scriptSymsFinalized) 714 break; 715 716 symbol->setValue(assignment.symbol().value()); 717 } // for each script symbol assignment 718 719 bool assertionsPassed = true; 720 LinkerScript::Assertions::iterator assert, assertEnd; 721 assertEnd = script.assertions().end(); 722 for (assert = script.assertions().begin(); assert != assertEnd; ++assert) { 723 uint64_t res = 0x0; 724 evaluator.eval((*assert).getRpnExpr(), res); 725 if (res == 0x0) 726 fatal(diag::err_assert_failed) << (*assert).message(); 727 } // for each assertion in ldscript 728 729 return finalized && scriptSymsFinalized && assertionsPassed; 730 } 731 732 /// relocate - applying relocation entries and create relocation 733 /// section in the output files 734 /// Create relocation section, asking TargetLDBackend to 735 /// read the relocation information into RelocationEntry 736 /// and push_back into the relocation section 737 bool ObjectLinker::relocation() 738 { 739 // when producing relocatables, no need to apply relocation 740 if (LinkerConfig::Object == m_Config.codeGenType()) 741 return true; 742 743 // apply all relocations of all inputs 744 Module::obj_iterator input, inEnd = m_pModule->obj_end(); 745 for (input = m_pModule->obj_begin(); input != inEnd; ++input) { 746 m_LDBackend.getRelocator()->initializeApply(**input); 747 LDContext::sect_iterator rs, rsEnd = (*input)->context()->relocSectEnd(); 748 for (rs = (*input)->context()->relocSectBegin(); rs != rsEnd; ++rs) { 749 // bypass the reloc section if 750 // 1. its section kind is changed to Ignore. (The target section is a 751 // discarded group section.) 752 // 2. it has no reloc data. (All symbols in the input relocs are in the 753 // discarded group sections) 754 if (LDFileFormat::Ignore == (*rs)->kind() || !(*rs)->hasRelocData()) 755 continue; 756 RelocData::iterator reloc, rEnd = (*rs)->getRelocData()->end(); 757 for (reloc = (*rs)->getRelocData()->begin(); reloc != rEnd; ++reloc) { 758 Relocation* relocation = llvm::cast<Relocation>(reloc); 759 760 // bypass the reloc if the symbol is in the discarded input section 761 ResolveInfo* info = relocation->symInfo(); 762 if (!info->outSymbol()->hasFragRef() && 763 ResolveInfo::Section == info->type() && 764 ResolveInfo::Undefined == info->desc()) 765 continue; 766 767 relocation->apply(*m_LDBackend.getRelocator()); 768 } // for all relocations 769 } // for all relocation section 770 m_LDBackend.getRelocator()->finalizeApply(**input); 771 } // for all inputs 772 773 // apply relocations created by relaxation 774 BranchIslandFactory* br_factory = m_LDBackend.getBRIslandFactory(); 775 BranchIslandFactory::iterator facIter, facEnd = br_factory->end(); 776 for (facIter = br_factory->begin(); facIter != facEnd; ++facIter) { 777 BranchIsland& island = *facIter; 778 BranchIsland::reloc_iterator iter, iterEnd = island.reloc_end(); 779 for (iter = island.reloc_begin(); iter != iterEnd; ++iter) 780 (*iter)->apply(*m_LDBackend.getRelocator()); 781 } 782 return true; 783 } 784 785 /// emitOutput - emit the output file. 786 bool ObjectLinker::emitOutput(FileOutputBuffer& pOutput) 787 { 788 return std::error_code() == getWriter()->writeObject(*m_pModule, pOutput); 789 } 790 791 792 /// postProcessing - do modification after all processes 793 bool ObjectLinker::postProcessing(FileOutputBuffer& pOutput) 794 { 795 if (LinkerConfig::Object != m_Config.codeGenType()) 796 normalSyncRelocationResult(pOutput); 797 else 798 partialSyncRelocationResult(pOutput); 799 800 // emit .eh_frame_hdr 801 // eh_frame_hdr should be emitted after syncRelocation, because eh_frame_hdr 802 // needs FDE PC value, which will be corrected at syncRelocation 803 m_LDBackend.postProcessing(pOutput); 804 return true; 805 } 806 807 void ObjectLinker::normalSyncRelocationResult(FileOutputBuffer& pOutput) 808 { 809 uint8_t* data = pOutput.getBufferStart(); 810 811 // sync all relocations of all inputs 812 Module::obj_iterator input, inEnd = m_pModule->obj_end(); 813 for (input = m_pModule->obj_begin(); input != inEnd; ++input) { 814 LDContext::sect_iterator rs, rsEnd = (*input)->context()->relocSectEnd(); 815 for (rs = (*input)->context()->relocSectBegin(); rs != rsEnd; ++rs) { 816 // bypass the reloc section if 817 // 1. its section kind is changed to Ignore. (The target section is a 818 // discarded group section.) 819 // 2. it has no reloc data. (All symbols in the input relocs are in the 820 // discarded group sections) 821 if (LDFileFormat::Ignore == (*rs)->kind() || !(*rs)->hasRelocData()) 822 continue; 823 RelocData::iterator reloc, rEnd = (*rs)->getRelocData()->end(); 824 for (reloc = (*rs)->getRelocData()->begin(); reloc != rEnd; ++reloc) { 825 Relocation* relocation = llvm::cast<Relocation>(reloc); 826 827 // bypass the reloc if the symbol is in the discarded input section 828 ResolveInfo* info = relocation->symInfo(); 829 if (!info->outSymbol()->hasFragRef() && 830 ResolveInfo::Section == info->type() && 831 ResolveInfo::Undefined == info->desc()) 832 continue; 833 834 // bypass the relocation with NONE type. This is to avoid overwrite the 835 // target result by NONE type relocation if there is a place which has 836 // two relocations to apply to, and one of it is NONE type. The result 837 // we want is the value of the other relocation result. For example, 838 // in .exidx, there are usually an R_ARM_NONE and R_ARM_PREL31 apply to 839 // the same place 840 if (0x0 == relocation->type()) 841 continue; 842 writeRelocationResult(*relocation, data); 843 } // for all relocations 844 } // for all relocation section 845 } // for all inputs 846 847 // sync relocations created by relaxation 848 BranchIslandFactory* br_factory = m_LDBackend.getBRIslandFactory(); 849 BranchIslandFactory::iterator facIter, facEnd = br_factory->end(); 850 for (facIter = br_factory->begin(); facIter != facEnd; ++facIter) { 851 BranchIsland& island = *facIter; 852 BranchIsland::reloc_iterator iter, iterEnd = island.reloc_end(); 853 for (iter = island.reloc_begin(); iter != iterEnd; ++iter) { 854 Relocation* reloc = *iter; 855 writeRelocationResult(*reloc, data); 856 } 857 } 858 } 859 860 void ObjectLinker::partialSyncRelocationResult(FileOutputBuffer& pOutput) 861 { 862 uint8_t* data = pOutput.getBufferStart(); 863 864 // traverse outputs' LDSection to get RelocData 865 Module::iterator sectIter, sectEnd = m_pModule->end(); 866 for (sectIter = m_pModule->begin(); sectIter != sectEnd; ++sectIter) { 867 if (LDFileFormat::Relocation != (*sectIter)->kind()) 868 continue; 869 870 RelocData* reloc_data = (*sectIter)->getRelocData(); 871 RelocData::iterator relocIter, relocEnd = reloc_data->end(); 872 for (relocIter = reloc_data->begin(); relocIter != relocEnd; ++relocIter) { 873 Relocation* reloc = llvm::cast<Relocation>(relocIter); 874 875 // bypass the relocation with NONE type. This is to avoid overwrite the 876 // target result by NONE type relocation if there is a place which has 877 // two relocations to apply to, and one of it is NONE type. The result 878 // we want is the value of the other relocation result. For example, 879 // in .exidx, there are usually an R_ARM_NONE and R_ARM_PREL31 apply to 880 // the same place 881 if (0x0 == reloc->type()) 882 continue; 883 writeRelocationResult(*reloc, data); 884 } 885 } 886 } 887 888 void ObjectLinker::writeRelocationResult(Relocation& pReloc, uint8_t* pOutput) 889 { 890 // get output file offset 891 size_t out_offset = 892 pReloc.targetRef().frag()->getParent()->getSection().offset() + 893 pReloc.targetRef().getOutputOffset(); 894 895 uint8_t* target_addr = pOutput + out_offset; 896 // byte swapping if target and host has different endian, and then write back 897 if(llvm::sys::IsLittleEndianHost != m_Config.targets().isLittleEndian()) { 898 uint64_t tmp_data = 0; 899 900 switch(pReloc.size(*m_LDBackend.getRelocator())) { 901 case 8u: 902 std::memcpy(target_addr, &pReloc.target(), 1); 903 break; 904 905 case 16u: 906 tmp_data = mcld::bswap16(pReloc.target()); 907 std::memcpy(target_addr, &tmp_data, 2); 908 break; 909 910 case 32u: 911 tmp_data = mcld::bswap32(pReloc.target()); 912 std::memcpy(target_addr, &tmp_data, 4); 913 break; 914 915 case 64u: 916 tmp_data = mcld::bswap64(pReloc.target()); 917 std::memcpy(target_addr, &tmp_data, 8); 918 break; 919 920 default: 921 break; 922 } 923 } 924 else 925 std::memcpy(target_addr, &pReloc.target(), 926 pReloc.size(*m_LDBackend.getRelocator())/8); 927 } 928 929