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