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/Module.h> 13 #include <mcld/InputTree.h> 14 #include <mcld/IRBuilder.h> 15 #include <mcld/LD/LDSection.h> 16 #include <mcld/LD/LDContext.h> 17 #include <mcld/LD/Archive.h> 18 #include <mcld/LD/ArchiveReader.h> 19 #include <mcld/LD/ObjectReader.h> 20 #include <mcld/LD/DynObjReader.h> 21 #include <mcld/LD/GroupReader.h> 22 #include <mcld/LD/BinaryReader.h> 23 #include <mcld/LD/ObjectWriter.h> 24 #include <mcld/LD/ResolveInfo.h> 25 #include <mcld/LD/RelocData.h> 26 #include <mcld/LD/Relocator.h> 27 #include <mcld/Support/RealPath.h> 28 #include <mcld/Support/MemoryArea.h> 29 #include <mcld/Support/MsgHandling.h> 30 #include <mcld/Support/DefSymParser.h> 31 #include <mcld/Target/TargetLDBackend.h> 32 #include <mcld/Fragment/FragmentLinker.h> 33 #include <mcld/Object/ObjectBuilder.h> 34 35 #include <llvm/Support/Casting.h> 36 37 38 using namespace llvm; 39 using namespace mcld; 40 ObjectLinker::ObjectLinker(const LinkerConfig& pConfig, 41 TargetLDBackend& pLDBackend) 42 : m_Config(pConfig), 43 m_pLinker(NULL), 44 m_pModule(NULL), 45 m_pBuilder(NULL), 46 m_LDBackend(pLDBackend), 47 m_pObjectReader(NULL), 48 m_pDynObjReader(NULL), 49 m_pArchiveReader(NULL), 50 m_pGroupReader(NULL), 51 m_pBinaryReader(NULL), 52 m_pWriter(NULL) { 53 } 54 55 ObjectLinker::~ObjectLinker() 56 { 57 delete m_pLinker; 58 delete m_pObjectReader; 59 delete m_pDynObjReader; 60 delete m_pArchiveReader; 61 delete m_pGroupReader; 62 delete m_pBinaryReader; 63 delete m_pWriter; 64 } 65 66 void ObjectLinker::setup(Module& pModule, IRBuilder& pBuilder) 67 { 68 m_pModule = &pModule; 69 m_pBuilder = &pBuilder; 70 71 // set up soname 72 if (!m_Config.options().soname().empty()) { 73 m_pModule->setName(m_Config.options().soname()); 74 } 75 } 76 77 /// initFragmentLinker - initialize FragmentLinker 78 /// Connect all components with FragmentLinker 79 bool ObjectLinker::initFragmentLinker() 80 { 81 if (NULL == m_pLinker) { 82 m_pLinker = new FragmentLinker(m_Config, 83 *m_pModule, 84 m_LDBackend); 85 } 86 87 // initialize the readers and writers 88 // Because constructor can not be failed, we initalize all readers and 89 // writers outside the FragmentLinker constructors. 90 m_pObjectReader = m_LDBackend.createObjectReader(*m_pBuilder); 91 m_pArchiveReader = m_LDBackend.createArchiveReader(*m_pModule); 92 m_pDynObjReader = m_LDBackend.createDynObjReader(*m_pBuilder); 93 m_pBinaryReader = m_LDBackend.createBinaryReader(*m_pBuilder); 94 m_pGroupReader = new GroupReader(*m_pModule, *m_pObjectReader, 95 *m_pDynObjReader, *m_pArchiveReader, *m_pBinaryReader); 96 m_pWriter = m_LDBackend.createWriter(); 97 98 // initialize Relocator 99 m_LDBackend.initRelocator(); 100 return true; 101 } 102 103 /// initStdSections - initialize standard sections 104 bool ObjectLinker::initStdSections() 105 { 106 ObjectBuilder builder(m_Config, *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::normalize() 119 { 120 // ----- set up inputs ----- // 121 Module::input_iterator input, inEnd = m_pModule->input_end(); 122 for (input = m_pModule->input_begin(); input!=inEnd; ++input) { 123 // is a group node 124 if (isGroup(input)) { 125 getGroupReader()->readGroup(input, m_pBuilder->getInputBuilder(), m_Config); 126 continue; 127 } 128 129 // already got type - for example, bitcode or external OIR (object 130 // intermediate representation) 131 if ((*input)->type() == Input::Script || 132 (*input)->type() == Input::Archive || 133 (*input)->type() == Input::External) 134 continue; 135 136 if (Input::Object == (*input)->type()) { 137 m_pModule->getObjectList().push_back(*input); 138 continue; 139 } 140 141 if (Input::DynObj == (*input)->type()) { 142 m_pModule->getLibraryList().push_back(*input); 143 continue; 144 } 145 146 // read input as a binary file 147 if (m_Config.options().isBinaryInput()) { 148 (*input)->setType(Input::Object); 149 getBinaryReader()->readBinary(**input); 150 m_pModule->getObjectList().push_back(*input); 151 } 152 // is a relocatable object file 153 else if (getObjectReader()->isMyFormat(**input)) { 154 (*input)->setType(Input::Object); 155 getObjectReader()->readHeader(**input); 156 getObjectReader()->readSections(**input); 157 getObjectReader()->readSymbols(**input); 158 m_pModule->getObjectList().push_back(*input); 159 } 160 // is a shared object file 161 else if (getDynObjReader()->isMyFormat(**input)) { 162 (*input)->setType(Input::DynObj); 163 getDynObjReader()->readHeader(**input); 164 getDynObjReader()->readSymbols(**input); 165 m_pModule->getLibraryList().push_back(*input); 166 } 167 // is an archive 168 else if (getArchiveReader()->isMyFormat(**input)) { 169 (*input)->setType(Input::Archive); 170 Archive archive(**input, m_pBuilder->getInputBuilder()); 171 getArchiveReader()->readArchive(archive); 172 if(archive.numOfObjectMember() > 0) { 173 m_pModule->getInputTree().merge<InputTree::Inclusive>(input, 174 archive.inputs()); 175 } 176 } 177 else { 178 fatal(diag::err_unrecognized_input_file) << (*input)->path() 179 << m_Config.targets().triple().str(); 180 } 181 } // end of for 182 } 183 184 bool ObjectLinker::linkable() const 185 { 186 // check we have input and output files 187 if (m_pModule->getInputTree().empty()) { 188 error(diag::err_no_inputs); 189 return false; 190 } 191 192 // can not mix -static with shared objects 193 Module::const_lib_iterator lib, libEnd = m_pModule->lib_end(); 194 for (lib = m_pModule->lib_begin(); lib != libEnd; ++lib) { 195 if((*lib)->attribute()->isStatic()) { 196 error(diag::err_mixed_shared_static_objects) 197 << (*lib)->name() << (*lib)->path(); 198 return false; 199 } 200 } 201 202 // --nmagic and --omagic options lead to static executable program. 203 // These options turn off page alignment of sections. Because the 204 // sections are not aligned to pages, these sections can not contain any 205 // exported functions. Also, because the two options disable linking 206 // against shared libraries, the output absolutely does not call outside 207 // functions. 208 if (m_Config.options().nmagic() && !m_Config.isCodeStatic()) { 209 error(diag::err_nmagic_not_static); 210 return false; 211 } 212 if (m_Config.options().omagic() && !m_Config.isCodeStatic()) { 213 error(diag::err_omagic_not_static); 214 return false; 215 } 216 217 return true; 218 } 219 220 /// readRelocations - read all relocation entries 221 /// 222 /// All symbols should be read and resolved before this function. 223 bool ObjectLinker::readRelocations() 224 { 225 // Bitcode is read by the other path. This function reads relocation sections 226 // in object files. 227 mcld::InputTree::bfs_iterator input, inEnd = m_pModule->getInputTree().bfs_end(); 228 for (input=m_pModule->getInputTree().bfs_begin(); input!=inEnd; ++input) { 229 if ((*input)->type() == Input::Object && (*input)->hasMemArea()) { 230 if (!getObjectReader()->readRelocations(**input)) 231 return false; 232 } 233 // ignore the other kinds of files. 234 } 235 return true; 236 } 237 238 /// mergeSections - put allinput sections into output sections 239 bool ObjectLinker::mergeSections() 240 { 241 ObjectBuilder builder(m_Config, *m_pModule); 242 Module::obj_iterator obj, objEnd = m_pModule->obj_end(); 243 for (obj = m_pModule->obj_begin(); obj != objEnd; ++obj) { 244 LDContext::sect_iterator sect, sectEnd = (*obj)->context()->sectEnd(); 245 for (sect = (*obj)->context()->sectBegin(); sect != sectEnd; ++sect) { 246 switch ((*sect)->kind()) { 247 // Some *INPUT sections should not be merged. 248 case LDFileFormat::Ignore: 249 case LDFileFormat::Null: 250 case LDFileFormat::Relocation: 251 case LDFileFormat::NamePool: 252 case LDFileFormat::Group: 253 case LDFileFormat::StackNote: 254 // skip 255 continue; 256 case LDFileFormat::Target: 257 if (!m_LDBackend.mergeSection(*m_pModule, **sect)) { 258 error(diag::err_cannot_merge_section) << (*sect)->name() 259 << (*obj)->name(); 260 return false; 261 } 262 break; 263 case LDFileFormat::EhFrame: { 264 if (!(*sect)->hasEhFrame()) 265 continue; // skip 266 267 LDSection* out_sect = NULL; 268 if (NULL == (out_sect = builder.MergeSection(**sect))) { 269 error(diag::err_cannot_merge_section) << (*sect)->name() 270 << (*obj)->name(); 271 return false; 272 } 273 274 if (!m_LDBackend.updateSectionFlags(*out_sect, **sect)) { 275 error(diag::err_cannot_merge_section) << (*sect)->name() 276 << (*obj)->name(); 277 return false; 278 } 279 break; 280 } 281 default: { 282 if (!(*sect)->hasSectionData()) 283 continue; // skip 284 285 LDSection* out_sect = NULL; 286 if (NULL == (out_sect = builder.MergeSection(**sect))) { 287 error(diag::err_cannot_merge_section) << (*sect)->name() 288 << (*obj)->name(); 289 return false; 290 } 291 292 if (!m_LDBackend.updateSectionFlags(*out_sect, **sect)) { 293 error(diag::err_cannot_merge_section) << (*sect)->name() 294 << (*obj)->name(); 295 return false; 296 } 297 break; 298 } 299 } // end of switch 300 } // for each section 301 } // for each obj 302 return true; 303 } 304 305 /// addStandardSymbols - shared object and executable files need some 306 /// standard symbols 307 /// @return if there are some input symbols with the same name to the 308 /// standard symbols, return false 309 bool ObjectLinker::addStandardSymbols() 310 { 311 // create and add section symbols for each output section 312 Module::iterator iter, iterEnd = m_pModule->end(); 313 for (iter = m_pModule->begin(); iter != iterEnd; ++iter) { 314 m_pModule->getSectionSymbolSet().add(**iter, m_pModule->getNamePool()); 315 } 316 317 return m_LDBackend.initStandardSymbols(*m_pBuilder, *m_pModule); 318 } 319 320 /// addTargetSymbols - some targets, such as MIPS and ARM, need some 321 /// target-dependent symbols 322 /// @return if there are some input symbols with the same name to the 323 /// target symbols, return false 324 bool ObjectLinker::addTargetSymbols() 325 { 326 m_LDBackend.initTargetSymbols(*m_pBuilder, *m_pModule); 327 return true; 328 } 329 330 /// addScriptSymbols - define symbols from the command line option or linker 331 /// scripts. 332 bool ObjectLinker::addScriptSymbols() 333 { 334 const LinkerScript& script = m_pModule->getScript(); 335 LinkerScript::DefSymMap::const_entry_iterator it; 336 LinkerScript::DefSymMap::const_entry_iterator ie = script.defSymMap().end(); 337 // go through the entire defSymMap 338 for (it = script.defSymMap().begin(); it != ie; ++it) { 339 const llvm::StringRef sym = it.getEntry()->key(); 340 ResolveInfo* old_info = m_pModule->getNamePool().findInfo(sym); 341 // if the symbol does not exist, we can set type to NOTYPE 342 // else we retain its type, same goes for size - 0 or retain old value 343 // and visibility - Default or retain 344 if (old_info != NULL) { 345 if(!m_pBuilder->AddSymbol<IRBuilder::Force, IRBuilder::Unresolve>( 346 sym, 347 static_cast<ResolveInfo::Type>(old_info->type()), 348 ResolveInfo::Define, 349 ResolveInfo::Absolute, 350 old_info->size(), 351 0x0, 352 FragmentRef::Null(), 353 old_info->visibility())) 354 return false; 355 } 356 else { 357 if (!m_pBuilder->AddSymbol<IRBuilder::Force, IRBuilder::Unresolve>( 358 sym, 359 ResolveInfo::NoType, 360 ResolveInfo::Define, 361 ResolveInfo::Absolute, 362 0x0, 363 0x0, 364 FragmentRef::Null(), 365 ResolveInfo::Default)) 366 return false; 367 } 368 } 369 return true; 370 } 371 372 bool ObjectLinker::scanRelocations() 373 { 374 // apply all relocations of all inputs 375 Module::obj_iterator input, inEnd = m_pModule->obj_end(); 376 for (input = m_pModule->obj_begin(); input != inEnd; ++input) { 377 m_LDBackend.getRelocator()->initializeScan(**input); 378 LDContext::sect_iterator rs, rsEnd = (*input)->context()->relocSectEnd(); 379 for (rs = (*input)->context()->relocSectBegin(); rs != rsEnd; ++rs) { 380 // bypass the reloc section if 381 // 1. its section kind is changed to Ignore. (The target section is a 382 // discarded group section.) 383 // 2. it has no reloc data. (All symbols in the input relocs are in the 384 // discarded group sections) 385 if (LDFileFormat::Ignore == (*rs)->kind() || !(*rs)->hasRelocData()) 386 continue; 387 RelocData::iterator reloc, rEnd = (*rs)->getRelocData()->end(); 388 for (reloc = (*rs)->getRelocData()->begin(); reloc != rEnd; ++reloc) { 389 Relocation* relocation = llvm::cast<Relocation>(reloc); 390 // scan relocation 391 if (LinkerConfig::Object != m_Config.codeGenType()) 392 m_LDBackend.getRelocator()->scanRelocation( 393 *relocation, *m_pBuilder, *m_pModule, **rs); 394 else 395 m_LDBackend.getRelocator()->partialScanRelocation( 396 *relocation, *m_pModule, **rs); 397 } // for all relocations 398 } // for all relocation section 399 m_LDBackend.getRelocator()->finalizeScan(**input); 400 } // for all inputs 401 return true; 402 } 403 404 /// initStubs - initialize stub-related stuff. 405 bool ObjectLinker::initStubs() 406 { 407 // initialize BranchIslandFactory 408 m_LDBackend.initBRIslandFactory(); 409 410 // initialize StubFactory 411 m_LDBackend.initStubFactory(); 412 413 // initialize target stubs 414 m_LDBackend.initTargetStubs(); 415 return true; 416 } 417 418 /// allocateCommonSymobols - allocate fragments for common symbols to the 419 /// corresponding sections 420 bool ObjectLinker::allocateCommonSymbols() 421 { 422 if (LinkerConfig::Object != m_Config.codeGenType() || 423 m_Config.options().isDefineCommon()) 424 return m_LDBackend.allocateCommonSymbols(*m_pModule); 425 return true; 426 } 427 428 /// prelayout - help backend to do some modification before layout 429 bool ObjectLinker::prelayout() 430 { 431 // finalize the section symbols, set their fragment reference and push them 432 // into output symbol table 433 Module::iterator sect, sEnd = m_pModule->end(); 434 for (sect = m_pModule->begin(); sect != sEnd; ++sect) { 435 m_pModule->getSectionSymbolSet().finalize(**sect, 436 m_pModule->getSymbolTable(), 437 m_Config.codeGenType() == LinkerConfig::Object); 438 } 439 440 m_LDBackend.preLayout(*m_pModule, *m_pBuilder); 441 442 /// check program interpreter - computer the name size of the runtime dyld 443 if (!m_Config.isCodeStatic() && 444 (LinkerConfig::Exec == m_Config.codeGenType() || 445 m_Config.options().isPIE() || 446 m_Config.options().hasDyld())) 447 m_LDBackend.sizeInterp(); 448 449 /// measure NamePools - compute the size of name pool sections 450 /// In ELF, will compute the size of.symtab, .strtab, .dynsym, .dynstr, 451 /// .hash and .shstrtab sections. 452 /// 453 /// dump all symbols and strings from FragmentLinker and build the format-dependent 454 /// hash table. 455 /// @note sizeNamePools replies on LinkerConfig::CodePosition. Must determine 456 /// code position model before calling GNULDBackend::sizeNamePools() 457 m_LDBackend.sizeNamePools(*m_pModule); 458 459 return true; 460 } 461 462 /// layout - linearly layout all output sections and reserve some space 463 /// for GOT/PLT 464 /// Because we do not support instruction relaxing in this early version, 465 /// if there is a branch can not jump to its target, we return false 466 /// directly 467 bool ObjectLinker::layout() 468 { 469 m_LDBackend.layout(*m_pModule); 470 return true; 471 } 472 473 /// prelayout - help backend to do some modification after layout 474 bool ObjectLinker::postlayout() 475 { 476 m_LDBackend.postLayout(*m_pModule, *m_pBuilder); 477 return true; 478 } 479 480 /// finalizeSymbolValue - finalize the resolved symbol value. 481 /// Before relocate(), after layout(), FragmentLinker should correct value of all 482 /// symbol. 483 bool ObjectLinker::finalizeSymbolValue() 484 { 485 bool finalized = m_pLinker->finalizeSymbols() && m_LDBackend.finalizeSymbols(); 486 bool scriptSymsAdded = true; 487 uint64_t symVal; 488 const LinkerScript& script = m_pModule->getScript(); 489 LinkerScript::DefSymMap::const_entry_iterator it; 490 LinkerScript::DefSymMap::const_entry_iterator ie = script.defSymMap().end(); 491 492 DefSymParser parser(*m_pModule); 493 for (it = script.defSymMap().begin(); it != ie; ++it) { 494 llvm::StringRef symName = it.getEntry()->key(); 495 llvm::StringRef expr = it.getEntry()->value(); 496 497 LDSymbol* symbol = m_pModule->getNamePool().findSymbol(symName); 498 assert(NULL != symbol && "--defsym symbol should be in the name pool"); 499 scriptSymsAdded &= parser.parse(expr, symVal); 500 if (!scriptSymsAdded) 501 break; 502 symbol->setValue(symVal); 503 } 504 return finalized && scriptSymsAdded ; 505 } 506 507 /// relocate - applying relocation entries and create relocation 508 /// section in the output files 509 /// Create relocation section, asking TargetLDBackend to 510 /// read the relocation information into RelocationEntry 511 /// and push_back into the relocation section 512 bool ObjectLinker::relocation() 513 { 514 return m_pLinker->applyRelocations(); 515 } 516 517 /// emitOutput - emit the output file. 518 bool ObjectLinker::emitOutput(MemoryArea& pOutput) 519 { 520 return llvm::errc::success == getWriter()->writeObject(*m_pModule, pOutput); 521 } 522 523 524 /// postProcessing - do modification after all processes 525 bool ObjectLinker::postProcessing(MemoryArea& pOutput) 526 { 527 m_pLinker->syncRelocationResult(pOutput); 528 529 // emit .eh_frame_hdr 530 // eh_frame_hdr should be emitted after syncRelocation, because eh_frame_hdr 531 // needs FDE PC value, which will be corrected at syncRelocation 532 m_LDBackend.postProcessing(pOutput); 533 return true; 534 } 535 536