1 //===- GNULDBackend.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/Target/GNULDBackend.h> 10 11 #include <string> 12 #include <cstring> 13 #include <cassert> 14 #include <vector> 15 #include <algorithm> 16 #include <map> 17 18 #include <mcld/Module.h> 19 #include <mcld/LinkerConfig.h> 20 #include <mcld/IRBuilder.h> 21 #include <mcld/InputTree.h> 22 #include <mcld/Config/Config.h> 23 #include <mcld/ADT/SizeTraits.h> 24 #include <mcld/LD/LDSymbol.h> 25 #include <mcld/LD/LDContext.h> 26 #include <mcld/Fragment/FillFragment.h> 27 #include <mcld/LD/EhFrame.h> 28 #include <mcld/LD/EhFrameHdr.h> 29 #include <mcld/LD/RelocData.h> 30 #include <mcld/LD/RelocationFactory.h> 31 #include <mcld/MC/Attribute.h> 32 #include <mcld/Support/MemoryArea.h> 33 #include <mcld/Support/MemoryRegion.h> 34 #include <mcld/Support/MsgHandling.h> 35 #include <mcld/Support/MemoryAreaFactory.h> 36 #include <mcld/LD/BranchIslandFactory.h> 37 #include <mcld/LD/StubFactory.h> 38 #include <mcld/Object/ObjectBuilder.h> 39 40 using namespace mcld; 41 42 //===--------------------------------------------------------------------===// 43 // non-member functions 44 //===----------------------------------------------------------------------===// 45 46 /// isCIdentifier - return if the pName is a valid C identifier 47 static bool isCIdentifier(const std::string& pName) 48 { 49 std::string ident = "0123456789" 50 "ABCDEFGHIJKLMNOPWRSTUVWXYZ" 51 "abcdefghijklmnopqrstuvwxyz" 52 "_"; 53 return (pName.find_first_not_of(ident) > pName.length()); 54 } 55 56 //===----------------------------------------------------------------------===// 57 // GNULDBackend 58 //===----------------------------------------------------------------------===// 59 GNULDBackend::GNULDBackend(const LinkerConfig& pConfig, GNUInfo* pInfo) 60 : TargetLDBackend(pConfig), 61 m_pObjectReader(NULL), 62 m_pDynObjFileFormat(NULL), 63 m_pExecFileFormat(NULL), 64 m_pObjectFileFormat(NULL), 65 m_pInfo(pInfo), 66 m_ELFSegmentTable(9), // magic number 67 m_pBRIslandFactory(NULL), 68 m_pStubFactory(NULL), 69 m_pEhFrameHdr(NULL), 70 m_bHasTextRel(false), 71 m_bHasStaticTLS(false), 72 f_pPreInitArrayStart(NULL), 73 f_pPreInitArrayEnd(NULL), 74 f_pInitArrayStart(NULL), 75 f_pInitArrayEnd(NULL), 76 f_pFiniArrayStart(NULL), 77 f_pFiniArrayEnd(NULL), 78 f_pStack(NULL), 79 f_pDynamic(NULL), 80 f_pTDATA(NULL), 81 f_pTBSS(NULL), 82 f_pExecutableStart(NULL), 83 f_pEText(NULL), 84 f_p_EText(NULL), 85 f_p__EText(NULL), 86 f_pEData(NULL), 87 f_p_EData(NULL), 88 f_pBSSStart(NULL), 89 f_pEnd(NULL), 90 f_p_End(NULL) { 91 m_pSymIndexMap = new HashTableType(1024); 92 } 93 94 GNULDBackend::~GNULDBackend() 95 { 96 delete m_pInfo; 97 delete m_pDynObjFileFormat; 98 delete m_pExecFileFormat; 99 delete m_pObjectFileFormat; 100 delete m_pSymIndexMap; 101 delete m_pEhFrameHdr; 102 delete m_pBRIslandFactory; 103 delete m_pStubFactory; 104 } 105 106 size_t GNULDBackend::sectionStartOffset() const 107 { 108 if (LinkerConfig::Binary == config().codeGenType()) 109 return 0x0; 110 111 switch (config().targets().bitclass()) { 112 case 32u: 113 return sizeof(llvm::ELF::Elf32_Ehdr) + 114 numOfSegments() * sizeof(llvm::ELF::Elf32_Phdr); 115 case 64u: 116 return sizeof(llvm::ELF::Elf64_Ehdr) + 117 numOfSegments() * sizeof(llvm::ELF::Elf64_Phdr); 118 default: 119 fatal(diag::unsupported_bitclass) << config().targets().triple().str() 120 << config().targets().bitclass(); 121 return 0; 122 } 123 } 124 125 uint64_t GNULDBackend::segmentStartAddr() const 126 { 127 ScriptOptions::AddressMap::const_iterator mapping = 128 config().scripts().addressMap().find(".text"); 129 if (mapping != config().scripts().addressMap().end()) 130 return mapping.getEntry()->value(); 131 else if (config().isCodeIndep()) 132 return 0x0; 133 else 134 return m_pInfo->defaultTextSegmentAddr(); 135 } 136 137 GNUArchiveReader* 138 GNULDBackend::createArchiveReader(Module& pModule) 139 { 140 assert(NULL != m_pObjectReader); 141 return new GNUArchiveReader(pModule, *m_pObjectReader); 142 } 143 144 ELFObjectReader* GNULDBackend::createObjectReader(IRBuilder& pBuilder) 145 { 146 m_pObjectReader = new ELFObjectReader(*this, pBuilder, config()); 147 return m_pObjectReader; 148 } 149 150 ELFDynObjReader* GNULDBackend::createDynObjReader(IRBuilder& pBuilder) 151 { 152 return new ELFDynObjReader(*this, pBuilder, config()); 153 } 154 155 ELFBinaryReader* GNULDBackend::createBinaryReader(IRBuilder& pBuilder) 156 { 157 return new ELFBinaryReader(*this, pBuilder, config()); 158 } 159 160 ELFObjectWriter* GNULDBackend::createWriter() 161 { 162 return new ELFObjectWriter(*this, config()); 163 } 164 165 bool GNULDBackend::initStdSections(ObjectBuilder& pBuilder) 166 { 167 switch (config().codeGenType()) { 168 case LinkerConfig::DynObj: { 169 if (NULL == m_pDynObjFileFormat) 170 m_pDynObjFileFormat = new ELFDynObjFileFormat(); 171 m_pDynObjFileFormat->initStdSections(pBuilder, 172 config().targets().bitclass()); 173 return true; 174 } 175 case LinkerConfig::Exec: 176 case LinkerConfig::Binary: { 177 if (NULL == m_pExecFileFormat) 178 m_pExecFileFormat = new ELFExecFileFormat(); 179 m_pExecFileFormat->initStdSections(pBuilder, 180 config().targets().bitclass()); 181 return true; 182 } 183 case LinkerConfig::Object: { 184 if (NULL == m_pObjectFileFormat) 185 m_pObjectFileFormat = new ELFObjectFileFormat(); 186 m_pObjectFileFormat->initStdSections(pBuilder, 187 config().targets().bitclass()); 188 return true; 189 } 190 default: 191 fatal(diag::unrecognized_output_file) << config().codeGenType(); 192 return false; 193 } 194 } 195 196 /// initStandardSymbols - define and initialize standard symbols. 197 /// This function is called after section merging but before read relocations. 198 bool GNULDBackend::initStandardSymbols(IRBuilder& pBuilder, 199 Module& pModule) 200 { 201 if (LinkerConfig::Object == config().codeGenType()) 202 return true; 203 204 // GNU extension: define __start and __stop symbols for the sections whose 205 // name can be presented as C symbol 206 // ref: GNU gold, Layout::define_section_symbols 207 Module::iterator iter, iterEnd = pModule.end(); 208 for (iter = pModule.begin(); iter != iterEnd; ++iter) { 209 LDSection* section = *iter; 210 211 switch (section->kind()) { 212 case LDFileFormat::Relocation: 213 continue; 214 case LDFileFormat::EhFrame: 215 if (!section->hasEhFrame()) 216 continue; 217 break; 218 default: 219 if (!section->hasSectionData()) 220 continue; 221 break; 222 } // end of switch 223 224 if (isCIdentifier(section->name())) { 225 llvm::StringRef start_name = llvm::StringRef("__start_" + section->name()); 226 FragmentRef* start_fragref = FragmentRef::Create( 227 section->getSectionData()->front(), 0x0); 228 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 229 start_name, 230 ResolveInfo::NoType, 231 ResolveInfo::Define, 232 ResolveInfo::Global, 233 0x0, // size 234 0x0, // value 235 start_fragref, // FragRef 236 ResolveInfo::Default); 237 238 llvm::StringRef stop_name = llvm::StringRef("__stop_" + section->name()); 239 FragmentRef* stop_fragref = FragmentRef::Create( 240 section->getSectionData()->front(), section->size()); 241 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 242 stop_name, 243 ResolveInfo::NoType, 244 ResolveInfo::Define, 245 ResolveInfo::Global, 246 0x0, // size 247 0x0, // value 248 stop_fragref, // FragRef 249 ResolveInfo::Default); 250 } 251 } 252 253 ELFFileFormat* file_format = getOutputFormat(); 254 255 // ----- section symbols ----- // 256 // .preinit_array 257 FragmentRef* preinit_array = NULL; 258 if (file_format->hasPreInitArray()) { 259 preinit_array = FragmentRef::Create( 260 file_format->getPreInitArray().getSectionData()->front(), 261 0x0); 262 } 263 else { 264 preinit_array = FragmentRef::Null(); 265 } 266 f_pPreInitArrayStart = 267 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 268 "__preinit_array_start", 269 ResolveInfo::NoType, 270 ResolveInfo::Define, 271 ResolveInfo::Global, 272 0x0, // size 273 0x0, // value 274 preinit_array, // FragRef 275 ResolveInfo::Hidden); 276 f_pPreInitArrayEnd = 277 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 278 "__preinit_array_end", 279 ResolveInfo::NoType, 280 ResolveInfo::Define, 281 ResolveInfo::Global, 282 0x0, // size 283 0x0, // value 284 FragmentRef::Null(), // FragRef 285 ResolveInfo::Hidden); 286 287 // .init_array 288 FragmentRef* init_array = NULL; 289 if (file_format->hasInitArray()) { 290 init_array = FragmentRef::Create( 291 file_format->getInitArray().getSectionData()->front(), 292 0x0); 293 } 294 else { 295 init_array = FragmentRef::Null(); 296 } 297 298 f_pInitArrayStart = 299 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 300 "__init_array_start", 301 ResolveInfo::NoType, 302 ResolveInfo::Define, 303 ResolveInfo::Global, 304 0x0, // size 305 0x0, // value 306 init_array, // FragRef 307 ResolveInfo::Hidden); 308 f_pInitArrayEnd = 309 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 310 "__init_array_end", 311 ResolveInfo::NoType, 312 ResolveInfo::Define, 313 ResolveInfo::Global, 314 0x0, // size 315 0x0, // value 316 init_array, // FragRef 317 ResolveInfo::Hidden); 318 319 // .fini_array 320 FragmentRef* fini_array = NULL; 321 if (file_format->hasFiniArray()) { 322 fini_array = FragmentRef::Create( 323 file_format->getFiniArray().getSectionData()->front(), 324 0x0); 325 } 326 else { 327 fini_array = FragmentRef::Null(); 328 } 329 330 f_pFiniArrayStart = 331 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 332 "__fini_array_start", 333 ResolveInfo::NoType, 334 ResolveInfo::Define, 335 ResolveInfo::Global, 336 0x0, // size 337 0x0, // value 338 fini_array, // FragRef 339 ResolveInfo::Hidden); 340 f_pFiniArrayEnd = 341 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 342 "__fini_array_end", 343 ResolveInfo::NoType, 344 ResolveInfo::Define, 345 ResolveInfo::Global, 346 0x0, // size 347 0x0, // value 348 fini_array, // FragRef 349 ResolveInfo::Hidden); 350 351 // .stack 352 FragmentRef* stack = NULL; 353 if (file_format->hasStack()) { 354 stack = FragmentRef::Create( 355 file_format->getStack().getSectionData()->front(), 356 0x0); 357 } 358 else { 359 stack = FragmentRef::Null(); 360 } 361 362 f_pStack = 363 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 364 "__stack", 365 ResolveInfo::NoType, 366 ResolveInfo::Define, 367 ResolveInfo::Global, 368 0x0, // size 369 0x0, // value 370 stack, // FragRef 371 ResolveInfo::Hidden); 372 373 // _DYNAMIC 374 // TODO: add SectionData for .dynamic section, and then we can get the correct 375 // symbol section index for _DYNAMIC. Now it will be ABS. 376 f_pDynamic = 377 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 378 "_DYNAMIC", 379 ResolveInfo::Object, 380 ResolveInfo::Define, 381 ResolveInfo::Local, 382 0x0, // size 383 0x0, // value 384 FragmentRef::Null(), // FragRef 385 ResolveInfo::Hidden); 386 387 // ----- segment symbols ----- // 388 f_pExecutableStart = 389 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 390 "__executable_start", 391 ResolveInfo::NoType, 392 ResolveInfo::Define, 393 ResolveInfo::Absolute, 394 0x0, // size 395 0x0, // value 396 FragmentRef::Null(), // FragRef 397 ResolveInfo::Default); 398 f_pEText = 399 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 400 "etext", 401 ResolveInfo::NoType, 402 ResolveInfo::Define, 403 ResolveInfo::Absolute, 404 0x0, // size 405 0x0, // value 406 FragmentRef::Null(), // FragRef 407 ResolveInfo::Default); 408 f_p_EText = 409 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 410 "_etext", 411 ResolveInfo::NoType, 412 ResolveInfo::Define, 413 ResolveInfo::Absolute, 414 0x0, // size 415 0x0, // value 416 FragmentRef::Null(), // FragRef 417 ResolveInfo::Default); 418 f_p__EText = 419 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 420 "__etext", 421 ResolveInfo::NoType, 422 ResolveInfo::Define, 423 ResolveInfo::Absolute, 424 0x0, // size 425 0x0, // value 426 FragmentRef::Null(), // FragRef 427 ResolveInfo::Default); 428 f_pEData = 429 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 430 "edata", 431 ResolveInfo::NoType, 432 ResolveInfo::Define, 433 ResolveInfo::Absolute, 434 0x0, // size 435 0x0, // value 436 FragmentRef::Null(), // FragRef 437 ResolveInfo::Default); 438 439 f_pEnd = 440 pBuilder.AddSymbol<IRBuilder::AsReferred, IRBuilder::Resolve>( 441 "end", 442 ResolveInfo::NoType, 443 ResolveInfo::Define, 444 ResolveInfo::Absolute, 445 0x0, // size 446 0x0, // value 447 FragmentRef::Null(), // FragRef 448 ResolveInfo::Default); 449 450 // _edata is defined forcefully. 451 // @ref Google gold linker: defstd.cc: 186 452 f_p_EData = 453 pBuilder.AddSymbol<IRBuilder::Force, IRBuilder::Resolve>( 454 "_edata", 455 ResolveInfo::NoType, 456 ResolveInfo::Define, 457 ResolveInfo::Absolute, 458 0x0, // size 459 0x0, // value 460 FragmentRef::Null(), // FragRef 461 ResolveInfo::Default); 462 463 // __bss_start is defined forcefully. 464 // @ref Google gold linker: defstd.cc: 214 465 f_pBSSStart = 466 pBuilder.AddSymbol<IRBuilder::Force, IRBuilder::Resolve>( 467 "__bss_start", 468 ResolveInfo::NoType, 469 ResolveInfo::Define, 470 ResolveInfo::Absolute, 471 0x0, // size 472 0x0, // value 473 FragmentRef::Null(), // FragRef 474 ResolveInfo::Default); 475 476 // _end is defined forcefully. 477 // @ref Google gold linker: defstd.cc: 228 478 f_p_End = 479 pBuilder.AddSymbol<IRBuilder::Force, IRBuilder::Resolve>( 480 "_end", 481 ResolveInfo::NoType, 482 ResolveInfo::Define, 483 ResolveInfo::Absolute, 484 0x0, // size 485 0x0, // value 486 FragmentRef::Null(), // FragRef 487 ResolveInfo::Default); 488 489 return true; 490 } 491 492 bool GNULDBackend::finalizeStandardSymbols() 493 { 494 if (LinkerConfig::Object == config().codeGenType()) 495 return true; 496 497 ELFFileFormat* file_format = getOutputFormat(); 498 499 // ----- section symbols ----- // 500 if (NULL != f_pPreInitArrayStart) { 501 if (!f_pPreInitArrayStart->hasFragRef()) { 502 f_pPreInitArrayStart->resolveInfo()->setBinding(ResolveInfo::Absolute); 503 f_pPreInitArrayStart->setValue(0x0); 504 } 505 } 506 507 if (NULL != f_pPreInitArrayEnd) { 508 if (f_pPreInitArrayEnd->hasFragRef()) { 509 f_pPreInitArrayEnd->setValue(f_pPreInitArrayEnd->value() + 510 file_format->getPreInitArray().size()); 511 } 512 else { 513 f_pPreInitArrayEnd->resolveInfo()->setBinding(ResolveInfo::Absolute); 514 f_pPreInitArrayEnd->setValue(0x0); 515 } 516 } 517 518 if (NULL != f_pInitArrayStart) { 519 if (!f_pInitArrayStart->hasFragRef()) { 520 f_pInitArrayStart->resolveInfo()->setBinding(ResolveInfo::Absolute); 521 f_pInitArrayStart->setValue(0x0); 522 } 523 } 524 525 if (NULL != f_pInitArrayEnd) { 526 if (f_pInitArrayEnd->hasFragRef()) { 527 f_pInitArrayEnd->setValue(f_pInitArrayEnd->value() + 528 file_format->getInitArray().size()); 529 } 530 else { 531 f_pInitArrayEnd->resolveInfo()->setBinding(ResolveInfo::Absolute); 532 f_pInitArrayEnd->setValue(0x0); 533 } 534 } 535 536 if (NULL != f_pFiniArrayStart) { 537 if (!f_pFiniArrayStart->hasFragRef()) { 538 f_pFiniArrayStart->resolveInfo()->setBinding(ResolveInfo::Absolute); 539 f_pFiniArrayStart->setValue(0x0); 540 } 541 } 542 543 if (NULL != f_pFiniArrayEnd) { 544 if (f_pFiniArrayEnd->hasFragRef()) { 545 f_pFiniArrayEnd->setValue(f_pFiniArrayEnd->value() + 546 file_format->getFiniArray().size()); 547 } 548 else { 549 f_pFiniArrayEnd->resolveInfo()->setBinding(ResolveInfo::Absolute); 550 f_pFiniArrayEnd->setValue(0x0); 551 } 552 } 553 554 if (NULL != f_pStack) { 555 if (!f_pStack->hasFragRef()) { 556 f_pStack->resolveInfo()->setBinding(ResolveInfo::Absolute); 557 f_pStack->setValue(0x0); 558 } 559 } 560 561 if (NULL != f_pDynamic) { 562 f_pDynamic->resolveInfo()->setBinding(ResolveInfo::Local); 563 f_pDynamic->setValue(file_format->getDynamic().addr()); 564 f_pDynamic->setSize(file_format->getDynamic().size()); 565 } 566 567 // ----- segment symbols ----- // 568 if (NULL != f_pExecutableStart) { 569 ELFSegment* exec_start = m_ELFSegmentTable.find(llvm::ELF::PT_LOAD, 0x0, 0x0); 570 if (NULL != exec_start) { 571 if (ResolveInfo::ThreadLocal != f_pExecutableStart->type()) { 572 f_pExecutableStart->setValue(f_pExecutableStart->value() + 573 exec_start->vaddr()); 574 } 575 } 576 else 577 f_pExecutableStart->setValue(0x0); 578 } 579 580 if (NULL != f_pEText || NULL != f_p_EText || NULL !=f_p__EText) { 581 ELFSegment* etext = m_ELFSegmentTable.find(llvm::ELF::PT_LOAD, 582 llvm::ELF::PF_X, 583 llvm::ELF::PF_W); 584 if (NULL != etext) { 585 if (NULL != f_pEText && ResolveInfo::ThreadLocal != f_pEText->type()) { 586 f_pEText->setValue(f_pEText->value() + 587 etext->vaddr() + 588 etext->memsz()); 589 } 590 if (NULL != f_p_EText && ResolveInfo::ThreadLocal != f_p_EText->type()) { 591 f_p_EText->setValue(f_p_EText->value() + 592 etext->vaddr() + 593 etext->memsz()); 594 } 595 if (NULL != f_p__EText && ResolveInfo::ThreadLocal != f_p__EText->type()) { 596 f_p__EText->setValue(f_p__EText->value() + 597 etext->vaddr() + 598 etext->memsz()); 599 } 600 } 601 else { 602 if (NULL != f_pEText) 603 f_pEText->setValue(0x0); 604 if (NULL != f_p_EText) 605 f_p_EText->setValue(0x0); 606 if (NULL != f_p__EText) 607 f_p__EText->setValue(0x0); 608 } 609 } 610 611 if (NULL != f_pEData || NULL != f_p_EData || NULL != f_pBSSStart || 612 NULL != f_pEnd || NULL != f_p_End) { 613 ELFSegment* edata = m_ELFSegmentTable.find(llvm::ELF::PT_LOAD, 614 llvm::ELF::PF_W, 615 0x0); 616 if (NULL != edata) { 617 if (NULL != f_pEData && ResolveInfo::ThreadLocal != f_pEData->type()) { 618 f_pEData->setValue(f_pEData->value() + 619 edata->vaddr() + 620 edata->filesz()); 621 } 622 if (NULL != f_p_EData && ResolveInfo::ThreadLocal != f_p_EData->type()) { 623 f_p_EData->setValue(f_p_EData->value() + 624 edata->vaddr() + 625 edata->filesz()); 626 } 627 if (NULL != f_pBSSStart && ResolveInfo::ThreadLocal != f_pBSSStart->type()) { 628 f_pBSSStart->setValue(f_pBSSStart->value() + 629 edata->vaddr() + 630 edata->filesz()); 631 } 632 633 if (NULL != f_pEnd && ResolveInfo::ThreadLocal != f_pEnd->type()) { 634 f_pEnd->setValue(f_pEnd->value() + 635 edata->vaddr() + 636 edata->memsz()); 637 } 638 if (NULL != f_p_End && ResolveInfo::ThreadLocal != f_p_End->type()) { 639 f_p_End->setValue(f_p_End->value() + 640 edata->vaddr() + 641 edata->memsz()); 642 } 643 } 644 else { 645 if (NULL != f_pEData) 646 f_pEData->setValue(0x0); 647 if (NULL != f_p_EData) 648 f_p_EData->setValue(0x0); 649 if (NULL != f_pBSSStart) 650 f_pBSSStart->setValue(0x0); 651 652 if (NULL != f_pEnd) 653 f_pEnd->setValue(0x0); 654 if (NULL != f_p_End) 655 f_p_End->setValue(0x0); 656 } 657 } 658 659 return true; 660 } 661 662 bool GNULDBackend::finalizeTLSSymbol(LDSymbol& pSymbol) 663 { 664 // ignore if symbol has no fragRef 665 if (!pSymbol.hasFragRef()) 666 return true; 667 668 // the value of a TLS symbol is the offset to the TLS segment 669 ELFSegment* tls_seg = m_ELFSegmentTable.find(llvm::ELF::PT_TLS, 670 llvm::ELF::PF_R, 0x0); 671 uint64_t value = pSymbol.fragRef()->getOutputOffset(); 672 uint64_t addr = pSymbol.fragRef()->frag()->getParent()->getSection().addr(); 673 pSymbol.setValue(value + addr - tls_seg->vaddr()); 674 return true; 675 } 676 677 ELFFileFormat* GNULDBackend::getOutputFormat() 678 { 679 switch (config().codeGenType()) { 680 case LinkerConfig::DynObj: 681 assert(NULL != m_pDynObjFileFormat); 682 return m_pDynObjFileFormat; 683 case LinkerConfig::Exec: 684 case LinkerConfig::Binary: 685 assert(NULL != m_pExecFileFormat); 686 return m_pExecFileFormat; 687 case LinkerConfig::Object: 688 assert(NULL != m_pObjectFileFormat); 689 return m_pObjectFileFormat; 690 default: 691 fatal(diag::unrecognized_output_file) << config().codeGenType(); 692 return NULL; 693 } 694 } 695 696 const ELFFileFormat* GNULDBackend::getOutputFormat() const 697 { 698 switch (config().codeGenType()) { 699 case LinkerConfig::DynObj: 700 assert(NULL != m_pDynObjFileFormat); 701 return m_pDynObjFileFormat; 702 case LinkerConfig::Exec: 703 case LinkerConfig::Binary: 704 assert(NULL != m_pExecFileFormat); 705 return m_pExecFileFormat; 706 case LinkerConfig::Object: 707 assert(NULL != m_pObjectFileFormat); 708 return m_pObjectFileFormat; 709 default: 710 fatal(diag::unrecognized_output_file) << config().codeGenType(); 711 return NULL; 712 } 713 } 714 715 void GNULDBackend::partialScanRelocation(Relocation& pReloc, 716 Module& pModule, 717 const LDSection& pSection) 718 { 719 // if we meet a section symbol 720 if (pReloc.symInfo()->type() == ResolveInfo::Section) { 721 LDSymbol* input_sym = pReloc.symInfo()->outSymbol(); 722 723 // 1. update the relocation target offset 724 assert(input_sym->hasFragRef()); 725 uint64_t offset = input_sym->fragRef()->getOutputOffset(); 726 pReloc.target() += offset; 727 728 // 2. get output section symbol 729 // get the output LDSection which the symbol defined in 730 const LDSection& out_sect = 731 input_sym->fragRef()->frag()->getParent()->getSection(); 732 ResolveInfo* sym_info = pModule.getSectionSymbolSet().get(out_sect)->resolveInfo(); 733 // set relocation target symbol to the output section symbol's resolveInfo 734 pReloc.setSymInfo(sym_info); 735 } 736 } 737 738 /// sizeNamePools - compute the size of regular name pools 739 /// In ELF executable files, regular name pools are .symtab, .strtab, 740 /// .dynsym, .dynstr, .hash and .shstrtab. 741 void GNULDBackend::sizeNamePools(Module& pModule, bool pIsStaticLink) 742 { 743 // number of entries in symbol tables starts from 1 to hold the special entry 744 // at index 0 (STN_UNDEF). See ELF Spec Book I, p1-21. 745 size_t symtab = 1; 746 size_t dynsym = pIsStaticLink ? 0 : 1; 747 748 // size of string tables starts from 1 to hold the null character in their 749 // first byte 750 size_t strtab = 1; 751 size_t dynstr = pIsStaticLink ? 0 : 1; 752 size_t shstrtab = 1; 753 size_t hash = 0; 754 size_t gnuhash = 0; 755 756 // number of local symbol in the .symtab and .dynsym 757 size_t symtab_local_cnt = 0; 758 size_t dynsym_local_cnt = 0; 759 760 Module::SymbolTable& symbols = pModule.getSymbolTable(); 761 Module::const_sym_iterator symbol, symEnd; 762 /// Compute the size of .symtab, .strtab, and symtab_local_cnt 763 /// @{ 764 symEnd = symbols.end(); 765 for (symbol = symbols.begin(); symbol != symEnd; ++symbol) { 766 ++symtab; 767 if (ResolveInfo::Section != (*symbol)->type()) 768 strtab += (*symbol)->nameSize() + 1; 769 } 770 symtab_local_cnt = 1 + symbols.numOfFiles() + symbols.numOfLocals() + 771 symbols.numOfLocalDyns(); 772 773 ELFFileFormat* file_format = getOutputFormat(); 774 775 switch(config().codeGenType()) { 776 case LinkerConfig::DynObj: { 777 // soname 778 dynstr += pModule.name().size() + 1; 779 } 780 /** fall through **/ 781 case LinkerConfig::Exec: 782 case LinkerConfig::Binary: { 783 if (!pIsStaticLink) { 784 /// Compute the size of .dynsym, .dynstr, and dynsym_local_cnt 785 symEnd = symbols.dynamicEnd(); 786 for (symbol = symbols.localDynBegin(); symbol != symEnd; ++symbol) { 787 ++dynsym; 788 if (ResolveInfo::Section != (*symbol)->type()) 789 dynstr += (*symbol)->nameSize() + 1; 790 } 791 dynsym_local_cnt = 1 + symbols.numOfLocalDyns(); 792 793 // compute .gnu.hash 794 if (GeneralOptions::GNU == config().options().getHashStyle() || 795 GeneralOptions::Both == config().options().getHashStyle()) { 796 // count the number of dynsym to hash 797 size_t hashed_sym_cnt = 0; 798 symEnd = symbols.dynamicEnd(); 799 for (symbol = symbols.dynamicBegin(); symbol != symEnd; ++symbol) { 800 if (DynsymCompare().needGNUHash(**symbol)) 801 ++hashed_sym_cnt; 802 } 803 // Special case for empty .dynsym 804 if (hashed_sym_cnt == 0) 805 gnuhash = 5 * 4 + config().targets().bitclass() / 8; 806 else { 807 size_t nbucket = getHashBucketCount(hashed_sym_cnt, true); 808 gnuhash = (4 + nbucket + hashed_sym_cnt) * 4; 809 gnuhash += (1U << getGNUHashMaskbitslog2(hashed_sym_cnt)) / 8; 810 } 811 } 812 813 // compute .hash 814 if (GeneralOptions::SystemV == config().options().getHashStyle() || 815 GeneralOptions::Both == config().options().getHashStyle()) { 816 // Both Elf32_Word and Elf64_Word are 4 bytes 817 hash = (2 + getHashBucketCount(dynsym, false) + dynsym) * 818 sizeof(llvm::ELF::Elf32_Word); 819 } 820 821 // add DT_NEEDED 822 Module::const_lib_iterator lib, libEnd = pModule.lib_end(); 823 for (lib = pModule.lib_begin(); lib != libEnd; ++lib) { 824 if (!(*lib)->attribute()->isAsNeeded() || (*lib)->isNeeded()) { 825 dynstr += (*lib)->name().size() + 1; 826 dynamic().reserveNeedEntry(); 827 } 828 } 829 830 // add DT_RPATH 831 if (!config().options().getRpathList().empty()) { 832 dynamic().reserveNeedEntry(); 833 GeneralOptions::const_rpath_iterator rpath, 834 rpathEnd = config().options().rpath_end(); 835 for (rpath = config().options().rpath_begin(); 836 rpath != rpathEnd; ++rpath) 837 dynstr += (*rpath).size() + 1; 838 } 839 840 // set size 841 if (config().targets().is32Bits()) { 842 file_format->getDynSymTab().setSize(dynsym * 843 sizeof(llvm::ELF::Elf32_Sym)); 844 } else { 845 file_format->getDynSymTab().setSize(dynsym * 846 sizeof(llvm::ELF::Elf64_Sym)); 847 } 848 file_format->getDynStrTab().setSize(dynstr); 849 file_format->getHashTab().setSize(hash); 850 file_format->getGNUHashTab().setSize(gnuhash); 851 852 // set .dynsym sh_info to one greater than the symbol table 853 // index of the last local symbol 854 file_format->getDynSymTab().setInfo(dynsym_local_cnt); 855 856 // Because some entries in .dynamic section need information of .dynsym, 857 // .dynstr, .symtab, .strtab and .hash, we can not reserve non-DT_NEEDED 858 // entries until we get the size of the sections mentioned above 859 dynamic().reserveEntries(*file_format); 860 file_format->getDynamic().setSize(dynamic().numOfBytes()); 861 } 862 } 863 /* fall through */ 864 case LinkerConfig::Object: { 865 if (config().targets().is32Bits()) 866 file_format->getSymTab().setSize(symtab*sizeof(llvm::ELF::Elf32_Sym)); 867 else 868 file_format->getSymTab().setSize(symtab*sizeof(llvm::ELF::Elf64_Sym)); 869 file_format->getStrTab().setSize(strtab); 870 871 // set .symtab sh_info to one greater than the symbol table 872 // index of the last local symbol 873 file_format->getSymTab().setInfo(symtab_local_cnt); 874 875 // compute the size of .shstrtab section. 876 Module::const_iterator sect, sectEnd = pModule.end(); 877 for (sect = pModule.begin(); sect != sectEnd; ++sect) { 878 switch ((*sect)->kind()) { 879 case LDFileFormat::Null: 880 break; 881 // take StackNote directly 882 case LDFileFormat::StackNote: 883 shstrtab += ((*sect)->name().size() + 1); 884 break; 885 case LDFileFormat::EhFrame: 886 if (((*sect)->size() != 0) || 887 ((*sect)->hasEhFrame() && 888 config().codeGenType() == LinkerConfig::Object)) 889 shstrtab += ((*sect)->name().size() + 1); 890 break; 891 case LDFileFormat::Relocation: 892 if (((*sect)->size() != 0) || 893 ((*sect)->hasRelocData() && 894 config().codeGenType() == LinkerConfig::Object)) 895 shstrtab += ((*sect)->name().size() + 1); 896 break; 897 default: 898 if (((*sect)->size() != 0) || 899 ((*sect)->hasSectionData() && 900 config().codeGenType() == LinkerConfig::Object)) 901 shstrtab += ((*sect)->name().size() + 1); 902 break; 903 } // end of switch 904 } // end of for 905 shstrtab += (strlen(".shstrtab") + 1); 906 file_format->getShStrTab().setSize(shstrtab); 907 break; 908 } 909 default: 910 fatal(diag::fatal_illegal_codegen_type) << pModule.name(); 911 break; 912 } // end of switch 913 } 914 915 /// emitSymbol32 - emit an ELF32 symbol 916 void GNULDBackend::emitSymbol32(llvm::ELF::Elf32_Sym& pSym, 917 LDSymbol& pSymbol, 918 char* pStrtab, 919 size_t pStrtabsize, 920 size_t pSymtabIdx) 921 { 922 // FIXME: check the endian between host and target 923 // write out symbol 924 if (ResolveInfo::Section != pSymbol.type()) { 925 pSym.st_name = pStrtabsize; 926 strcpy((pStrtab + pStrtabsize), pSymbol.name()); 927 } 928 else { 929 pSym.st_name = 0; 930 } 931 pSym.st_value = pSymbol.value(); 932 pSym.st_size = getSymbolSize(pSymbol); 933 pSym.st_info = getSymbolInfo(pSymbol); 934 pSym.st_other = pSymbol.visibility(); 935 pSym.st_shndx = getSymbolShndx(pSymbol); 936 } 937 938 /// emitSymbol64 - emit an ELF64 symbol 939 void GNULDBackend::emitSymbol64(llvm::ELF::Elf64_Sym& pSym, 940 LDSymbol& pSymbol, 941 char* pStrtab, 942 size_t pStrtabsize, 943 size_t pSymtabIdx) 944 { 945 // FIXME: check the endian between host and target 946 // write out symbol 947 if (ResolveInfo::Section != pSymbol.type()) { 948 pSym.st_name = pStrtabsize; 949 strcpy((pStrtab + pStrtabsize), pSymbol.name()); 950 } 951 else { 952 pSym.st_name = 0; 953 } 954 pSym.st_name = pStrtabsize; 955 pSym.st_value = pSymbol.value(); 956 pSym.st_size = getSymbolSize(pSymbol); 957 pSym.st_info = getSymbolInfo(pSymbol); 958 pSym.st_other = pSymbol.visibility(); 959 pSym.st_shndx = getSymbolShndx(pSymbol); 960 } 961 962 /// emitRegNamePools - emit regular name pools - .symtab, .strtab 963 /// 964 /// the size of these tables should be computed before layout 965 /// layout should computes the start offset of these tables 966 void GNULDBackend::emitRegNamePools(const Module& pModule, 967 MemoryArea& pOutput) 968 { 969 ELFFileFormat* file_format = getOutputFormat(); 970 971 LDSection& symtab_sect = file_format->getSymTab(); 972 LDSection& strtab_sect = file_format->getStrTab(); 973 974 MemoryRegion* symtab_region = pOutput.request(symtab_sect.offset(), 975 symtab_sect.size()); 976 MemoryRegion* strtab_region = pOutput.request(strtab_sect.offset(), 977 strtab_sect.size()); 978 979 // set up symtab_region 980 llvm::ELF::Elf32_Sym* symtab32 = NULL; 981 llvm::ELF::Elf64_Sym* symtab64 = NULL; 982 if (config().targets().is32Bits()) 983 symtab32 = (llvm::ELF::Elf32_Sym*)symtab_region->start(); 984 else if (config().targets().is64Bits()) 985 symtab64 = (llvm::ELF::Elf64_Sym*)symtab_region->start(); 986 else { 987 fatal(diag::unsupported_bitclass) << config().targets().triple().str() 988 << config().targets().bitclass(); 989 } 990 991 // set up strtab_region 992 char* strtab = (char*)strtab_region->start(); 993 994 // emit the first ELF symbol 995 if (config().targets().is32Bits()) 996 emitSymbol32(symtab32[0], *LDSymbol::Null(), strtab, 0, 0); 997 else 998 emitSymbol64(symtab64[0], *LDSymbol::Null(), strtab, 0, 0); 999 1000 bool sym_exist = false; 1001 HashTableType::entry_type* entry = NULL; 1002 if (LinkerConfig::Object == config().codeGenType()) { 1003 entry = m_pSymIndexMap->insert(LDSymbol::Null(), sym_exist); 1004 entry->setValue(0); 1005 } 1006 1007 size_t symIdx = 1; 1008 size_t strtabsize = 1; 1009 1010 const Module::SymbolTable& symbols = pModule.getSymbolTable(); 1011 Module::const_sym_iterator symbol, symEnd; 1012 1013 symEnd = symbols.end(); 1014 for (symbol = symbols.begin(); symbol != symEnd; ++symbol) { 1015 if (LinkerConfig::Object == config().codeGenType()) { 1016 entry = m_pSymIndexMap->insert(*symbol, sym_exist); 1017 entry->setValue(symIdx); 1018 } 1019 if (config().targets().is32Bits()) 1020 emitSymbol32(symtab32[symIdx], **symbol, strtab, strtabsize, symIdx); 1021 else 1022 emitSymbol64(symtab64[symIdx], **symbol, strtab, strtabsize, symIdx); 1023 ++symIdx; 1024 if (ResolveInfo::Section != (*symbol)->type()) 1025 strtabsize += (*symbol)->nameSize() + 1; 1026 } 1027 } 1028 1029 /// emitDynNamePools - emit dynamic name pools - .dyntab, .dynstr, .hash 1030 /// 1031 /// the size of these tables should be computed before layout 1032 /// layout should computes the start offset of these tables 1033 void GNULDBackend::emitDynNamePools(Module& pModule, MemoryArea& pOutput) 1034 { 1035 ELFFileFormat* file_format = getOutputFormat(); 1036 if (!file_format->hasDynSymTab() || 1037 !file_format->hasDynStrTab() || 1038 !file_format->hasDynamic()) 1039 return; 1040 1041 bool sym_exist = false; 1042 HashTableType::entry_type* entry = 0; 1043 1044 LDSection& symtab_sect = file_format->getDynSymTab(); 1045 LDSection& strtab_sect = file_format->getDynStrTab(); 1046 LDSection& dyn_sect = file_format->getDynamic(); 1047 1048 MemoryRegion* symtab_region = pOutput.request(symtab_sect.offset(), 1049 symtab_sect.size()); 1050 MemoryRegion* strtab_region = pOutput.request(strtab_sect.offset(), 1051 strtab_sect.size()); 1052 MemoryRegion* dyn_region = pOutput.request(dyn_sect.offset(), 1053 dyn_sect.size()); 1054 // set up symtab_region 1055 llvm::ELF::Elf32_Sym* symtab32 = NULL; 1056 llvm::ELF::Elf64_Sym* symtab64 = NULL; 1057 if (config().targets().is32Bits()) 1058 symtab32 = (llvm::ELF::Elf32_Sym*)symtab_region->start(); 1059 else if (config().targets().is64Bits()) 1060 symtab64 = (llvm::ELF::Elf64_Sym*)symtab_region->start(); 1061 else { 1062 fatal(diag::unsupported_bitclass) << config().targets().triple().str() 1063 << config().targets().bitclass(); 1064 } 1065 1066 // set up strtab_region 1067 char* strtab = (char*)strtab_region->start(); 1068 1069 // emit the first ELF symbol 1070 if (config().targets().is32Bits()) 1071 emitSymbol32(symtab32[0], *LDSymbol::Null(), strtab, 0, 0); 1072 else 1073 emitSymbol64(symtab64[0], *LDSymbol::Null(), strtab, 0, 0); 1074 1075 size_t symIdx = 1; 1076 size_t strtabsize = 1; 1077 1078 Module::SymbolTable& symbols = pModule.getSymbolTable(); 1079 // emit .gnu.hash 1080 if (GeneralOptions::GNU == config().options().getHashStyle() || 1081 GeneralOptions::Both == config().options().getHashStyle()) { 1082 // Currently we may add output symbols after sizeNamePools(), and a 1083 // non-stable sort is used in SymbolCategory::arrange(), so we just 1084 // sort .dynsym right before emitting .gnu.hash 1085 std::stable_sort(symbols.dynamicBegin(), symbols.dynamicEnd(), 1086 DynsymCompare()); 1087 emitGNUHashTab(symbols, pOutput); 1088 } 1089 // emit .hash 1090 if (GeneralOptions::SystemV == config().options().getHashStyle() || 1091 GeneralOptions::Both == config().options().getHashStyle()) 1092 emitELFHashTab(symbols, pOutput); 1093 1094 // emit .dynsym, and .dynstr (emit LocalDyn and Dynamic category) 1095 Module::const_sym_iterator symbol, symEnd = symbols.dynamicEnd(); 1096 for (symbol = symbols.localDynBegin(); symbol != symEnd; ++symbol) { 1097 if (config().targets().is32Bits()) 1098 emitSymbol32(symtab32[symIdx], **symbol, strtab, strtabsize, symIdx); 1099 else 1100 emitSymbol64(symtab64[symIdx], **symbol, strtab, strtabsize, symIdx); 1101 // maintain output's symbol and index map 1102 entry = m_pSymIndexMap->insert(*symbol, sym_exist); 1103 entry->setValue(symIdx); 1104 // sum up counters 1105 ++symIdx; 1106 if (ResolveInfo::Section != (*symbol)->type()) 1107 strtabsize += (*symbol)->nameSize() + 1; 1108 } 1109 1110 // emit DT_NEED 1111 // add DT_NEED strings into .dynstr 1112 ELFDynamic::iterator dt_need = dynamic().needBegin(); 1113 Module::const_lib_iterator lib, libEnd = pModule.lib_end(); 1114 for (lib = pModule.lib_begin(); lib != libEnd; ++lib) { 1115 if (!(*lib)->attribute()->isAsNeeded() || (*lib)->isNeeded()) { 1116 strcpy((strtab + strtabsize), (*lib)->name().c_str()); 1117 (*dt_need)->setValue(llvm::ELF::DT_NEEDED, strtabsize); 1118 strtabsize += (*lib)->name().size() + 1; 1119 ++dt_need; 1120 } 1121 } 1122 1123 if (!config().options().getRpathList().empty()) { 1124 if (!config().options().hasNewDTags()) 1125 (*dt_need)->setValue(llvm::ELF::DT_RPATH, strtabsize); 1126 else 1127 (*dt_need)->setValue(llvm::ELF::DT_RUNPATH, strtabsize); 1128 ++dt_need; 1129 1130 GeneralOptions::const_rpath_iterator rpath, 1131 rpathEnd = config().options().rpath_end(); 1132 for (rpath = config().options().rpath_begin(); rpath != rpathEnd; ++rpath) { 1133 memcpy((strtab + strtabsize), (*rpath).data(), (*rpath).size()); 1134 strtabsize += (*rpath).size(); 1135 strtab[strtabsize++] = (rpath + 1 == rpathEnd ? '\0' : ':'); 1136 } 1137 } 1138 1139 // initialize value of ELF .dynamic section 1140 if (LinkerConfig::DynObj == config().codeGenType()) { 1141 // set pointer to SONAME entry in dynamic string table. 1142 dynamic().applySoname(strtabsize); 1143 } 1144 dynamic().applyEntries(*file_format); 1145 dynamic().emit(dyn_sect, *dyn_region); 1146 1147 // emit soname 1148 if (LinkerConfig::DynObj == config().codeGenType()) { 1149 strcpy((strtab + strtabsize), pModule.name().c_str()); 1150 strtabsize += pModule.name().size() + 1; 1151 } 1152 } 1153 1154 /// emitELFHashTab - emit .hash 1155 void GNULDBackend::emitELFHashTab(const Module::SymbolTable& pSymtab, 1156 MemoryArea& pOutput) 1157 { 1158 ELFFileFormat* file_format = getOutputFormat(); 1159 if (!file_format->hasHashTab()) 1160 return; 1161 LDSection& hash_sect = file_format->getHashTab(); 1162 MemoryRegion* hash_region = pOutput.request(hash_sect.offset(), 1163 hash_sect.size()); 1164 // both 32 and 64 bits hash table use 32-bit entry 1165 // set up hash_region 1166 uint32_t* word_array = (uint32_t*)hash_region->start(); 1167 uint32_t& nbucket = word_array[0]; 1168 uint32_t& nchain = word_array[1]; 1169 1170 size_t dynsymSize = 1 + pSymtab.numOfLocalDyns() + pSymtab.numOfDynamics(); 1171 nbucket = getHashBucketCount(dynsymSize, false); 1172 nchain = dynsymSize; 1173 1174 uint32_t* bucket = (word_array + 2); 1175 uint32_t* chain = (bucket + nbucket); 1176 1177 // initialize bucket 1178 bzero((void*)bucket, nbucket); 1179 1180 StringHash<ELF> hash_func; 1181 1182 size_t idx = 1; 1183 Module::const_sym_iterator symbol, symEnd = pSymtab.dynamicEnd(); 1184 for (symbol = pSymtab.localDynBegin(); symbol != symEnd; ++symbol) { 1185 llvm::StringRef name((*symbol)->name()); 1186 size_t bucket_pos = hash_func(name) % nbucket; 1187 chain[idx] = bucket[bucket_pos]; 1188 bucket[bucket_pos] = idx; 1189 ++idx; 1190 } 1191 } 1192 1193 /// emitGNUHashTab - emit .gnu.hash 1194 void GNULDBackend::emitGNUHashTab(Module::SymbolTable& pSymtab, 1195 MemoryArea& pOutput) 1196 { 1197 ELFFileFormat* file_format = getOutputFormat(); 1198 if (!file_format->hasGNUHashTab()) 1199 return; 1200 1201 MemoryRegion* gnuhash_region = 1202 pOutput.request(file_format->getGNUHashTab().offset(), 1203 file_format->getGNUHashTab().size()); 1204 1205 uint32_t* word_array = (uint32_t*)gnuhash_region->start(); 1206 // fixed-length fields 1207 uint32_t& nbucket = word_array[0]; 1208 uint32_t& symidx = word_array[1]; 1209 uint32_t& maskwords = word_array[2]; 1210 uint32_t& shift2 = word_array[3]; 1211 // variable-length fields 1212 uint8_t* bitmask = (uint8_t*)(word_array + 4); 1213 uint32_t* bucket = NULL; 1214 uint32_t* chain = NULL; 1215 1216 // count the number of dynsym to hash 1217 size_t unhashed_sym_cnt = pSymtab.numOfLocalDyns(); 1218 size_t hashed_sym_cnt = pSymtab.numOfDynamics(); 1219 Module::const_sym_iterator symbol, symEnd = pSymtab.dynamicEnd(); 1220 for (symbol = pSymtab.dynamicBegin(); symbol != symEnd; ++symbol) { 1221 if (DynsymCompare().needGNUHash(**symbol)) 1222 break; 1223 ++unhashed_sym_cnt; 1224 --hashed_sym_cnt; 1225 } 1226 1227 // special case for the empty hash table 1228 if (hashed_sym_cnt == 0) { 1229 nbucket = 1; // one empty bucket 1230 symidx = 1 + unhashed_sym_cnt; // symidx above unhashed symbols 1231 maskwords = 1; // bitmask length 1232 shift2 = 0; // bloom filter 1233 1234 if (config().targets().is32Bits()) { 1235 uint32_t* maskval = (uint32_t*)bitmask; 1236 *maskval = 0; // no valid hashes 1237 } else { 1238 // must be 64 1239 uint64_t* maskval = (uint64_t*)bitmask; 1240 *maskval = 0; // no valid hashes 1241 } 1242 bucket = (uint32_t*)(bitmask + config().targets().bitclass() / 8); 1243 *bucket = 0; // no hash in the only bucket 1244 return; 1245 } 1246 1247 uint32_t maskbitslog2 = getGNUHashMaskbitslog2(hashed_sym_cnt); 1248 uint32_t maskbits = 1u << maskbitslog2; 1249 uint32_t shift1 = config().targets().is32Bits() ? 5 : 6; 1250 uint32_t mask = (1u << shift1) - 1; 1251 1252 nbucket = getHashBucketCount(hashed_sym_cnt, true); 1253 symidx = 1 + unhashed_sym_cnt; 1254 maskwords = 1 << (maskbitslog2 - shift1); 1255 shift2 = maskbitslog2; 1256 1257 // setup bucket and chain 1258 bucket = (uint32_t*)(bitmask + maskbits / 8); 1259 chain = (bucket + nbucket); 1260 1261 // build the gnu style hash table 1262 typedef std::multimap<uint32_t, 1263 std::pair<LDSymbol*, uint32_t> > SymMapType; 1264 SymMapType symmap; 1265 symEnd = pSymtab.dynamicEnd(); 1266 for (symbol = pSymtab.localDynBegin() + symidx - 1; symbol != symEnd; 1267 ++symbol) { 1268 StringHash<DJB> hasher; 1269 uint32_t djbhash = hasher((*symbol)->name()); 1270 uint32_t hash = djbhash % nbucket; 1271 symmap.insert(std::make_pair(hash, std::make_pair(*symbol, djbhash))); 1272 } 1273 1274 // compute bucket, chain, and bitmask 1275 std::vector<uint64_t> bitmasks(maskwords); 1276 size_t hashedidx = symidx; 1277 for (size_t idx = 0; idx < nbucket; ++idx) { 1278 size_t count = 0; 1279 std::pair<SymMapType::iterator, SymMapType::iterator> ret; 1280 ret = symmap.equal_range(idx); 1281 for (SymMapType::iterator it = ret.first; it != ret.second; ) { 1282 // rearrange the hashed symbol ordering 1283 *(pSymtab.localDynBegin() + hashedidx - 1) = it->second.first; 1284 uint32_t djbhash = it->second.second; 1285 uint32_t val = ((djbhash >> shift1) & ((maskbits >> shift1) - 1)); 1286 bitmasks[val] |= 1u << (djbhash & mask); 1287 bitmasks[val] |= 1u << ((djbhash >> shift2) & mask); 1288 val = djbhash & ~1u; 1289 // advance the iterator and check if we're dealing w/ the last elment 1290 if (++it == ret.second) { 1291 // last element terminates the chain 1292 val |= 1; 1293 } 1294 chain[hashedidx - symidx] = val; 1295 1296 ++hashedidx; 1297 ++count; 1298 } 1299 1300 if (count == 0) 1301 bucket[idx] = 0; 1302 else 1303 bucket[idx] = hashedidx - count; 1304 } 1305 1306 // write the bitmasks 1307 if (config().targets().is32Bits()) { 1308 uint32_t* maskval = (uint32_t*)bitmask; 1309 for (size_t i = 0; i < maskwords; ++i) 1310 std::memcpy(maskval + i, &bitmasks[i], 4); 1311 } else { 1312 // must be 64 1313 uint64_t* maskval = (uint64_t*)bitmask; 1314 for (size_t i = 0; i < maskwords; ++i) 1315 std::memcpy(maskval + i, &bitmasks[i], 8); 1316 } 1317 } 1318 1319 /// sizeInterp - compute the size of the .interp section 1320 void GNULDBackend::sizeInterp() 1321 { 1322 const char* dyld_name; 1323 if (config().options().hasDyld()) 1324 dyld_name = config().options().dyld().c_str(); 1325 else 1326 dyld_name = m_pInfo->dyld(); 1327 1328 LDSection& interp = getOutputFormat()->getInterp(); 1329 interp.setSize(std::strlen(dyld_name) + 1); 1330 } 1331 1332 /// emitInterp - emit the .interp 1333 void GNULDBackend::emitInterp(MemoryArea& pOutput) 1334 { 1335 if (getOutputFormat()->hasInterp()) { 1336 const LDSection& interp = getOutputFormat()->getInterp(); 1337 MemoryRegion *region = pOutput.request(interp.offset(), interp.size()); 1338 const char* dyld_name; 1339 if (config().options().hasDyld()) 1340 dyld_name = config().options().dyld().c_str(); 1341 else 1342 dyld_name = m_pInfo->dyld(); 1343 1344 std::memcpy(region->start(), dyld_name, interp.size()); 1345 } 1346 } 1347 1348 /// getSectionOrder 1349 unsigned int GNULDBackend::getSectionOrder(const LDSection& pSectHdr) const 1350 { 1351 const ELFFileFormat* file_format = getOutputFormat(); 1352 1353 // NULL section should be the "1st" section 1354 if (LDFileFormat::Null == pSectHdr.kind()) 1355 return 0; 1356 1357 if (&pSectHdr == &file_format->getStrTab()) 1358 return SHO_STRTAB; 1359 1360 // if the section is not ALLOC, lay it out until the last possible moment 1361 if (0 == (pSectHdr.flag() & llvm::ELF::SHF_ALLOC)) 1362 return SHO_UNDEFINED; 1363 1364 bool is_write = (pSectHdr.flag() & llvm::ELF::SHF_WRITE) != 0; 1365 bool is_exec = (pSectHdr.flag() & llvm::ELF::SHF_EXECINSTR) != 0; 1366 // TODO: need to take care other possible output sections 1367 switch (pSectHdr.kind()) { 1368 case LDFileFormat::Regular: 1369 if (is_exec) { 1370 if (&pSectHdr == &file_format->getInit()) 1371 return SHO_INIT; 1372 if (&pSectHdr == &file_format->getFini()) 1373 return SHO_FINI; 1374 return SHO_TEXT; 1375 } else if (!is_write) { 1376 return SHO_RO; 1377 } else { 1378 if (config().options().hasRelro()) { 1379 if (&pSectHdr == &file_format->getPreInitArray() || 1380 &pSectHdr == &file_format->getInitArray() || 1381 &pSectHdr == &file_format->getFiniArray() || 1382 &pSectHdr == &file_format->getCtors() || 1383 &pSectHdr == &file_format->getDtors() || 1384 &pSectHdr == &file_format->getJCR() || 1385 &pSectHdr == &file_format->getDataRelRo()) 1386 return SHO_RELRO; 1387 if (&pSectHdr == &file_format->getDataRelRoLocal()) 1388 return SHO_RELRO_LOCAL; 1389 } 1390 if ((pSectHdr.flag() & llvm::ELF::SHF_TLS) != 0x0) { 1391 return SHO_TLS_DATA; 1392 } 1393 return SHO_DATA; 1394 } 1395 1396 case LDFileFormat::BSS: 1397 if ((pSectHdr.flag() & llvm::ELF::SHF_TLS) != 0x0) 1398 return SHO_TLS_BSS; 1399 return SHO_BSS; 1400 1401 case LDFileFormat::NamePool: { 1402 if (&pSectHdr == &file_format->getDynamic()) 1403 return SHO_RELRO; 1404 return SHO_NAMEPOOL; 1405 } 1406 case LDFileFormat::Relocation: 1407 if (&pSectHdr == &file_format->getRelPlt() || 1408 &pSectHdr == &file_format->getRelaPlt()) 1409 return SHO_REL_PLT; 1410 return SHO_RELOCATION; 1411 1412 // get the order from target for target specific sections 1413 case LDFileFormat::Target: 1414 return getTargetSectionOrder(pSectHdr); 1415 1416 // handle .interp and .note.* sections 1417 case LDFileFormat::Note: 1418 if (file_format->hasInterp() && (&pSectHdr == &file_format->getInterp())) 1419 return SHO_INTERP; 1420 else if (is_write) 1421 return SHO_RW_NOTE; 1422 else 1423 return SHO_RO_NOTE; 1424 1425 case LDFileFormat::EhFrame: 1426 case LDFileFormat::EhFrameHdr: 1427 case LDFileFormat::GCCExceptTable: 1428 return SHO_EXCEPTION; 1429 1430 case LDFileFormat::MetaData: 1431 case LDFileFormat::Debug: 1432 default: 1433 return SHO_UNDEFINED; 1434 } 1435 } 1436 1437 /// getSymbolSize 1438 uint64_t GNULDBackend::getSymbolSize(const LDSymbol& pSymbol) const 1439 { 1440 // @ref Google gold linker: symtab.cc: 2780 1441 // undefined and dynamic symbols should have zero size. 1442 if (pSymbol.isDyn() || pSymbol.desc() == ResolveInfo::Undefined) 1443 return 0x0; 1444 return pSymbol.resolveInfo()->size(); 1445 } 1446 1447 /// getSymbolInfo 1448 uint64_t GNULDBackend::getSymbolInfo(const LDSymbol& pSymbol) const 1449 { 1450 // set binding 1451 uint8_t bind = 0x0; 1452 if (pSymbol.resolveInfo()->isLocal()) 1453 bind = llvm::ELF::STB_LOCAL; 1454 else if (pSymbol.resolveInfo()->isGlobal()) 1455 bind = llvm::ELF::STB_GLOBAL; 1456 else if (pSymbol.resolveInfo()->isWeak()) 1457 bind = llvm::ELF::STB_WEAK; 1458 else if (pSymbol.resolveInfo()->isAbsolute()) { 1459 // (Luba) Is a absolute but not global (weak or local) symbol meaningful? 1460 bind = llvm::ELF::STB_GLOBAL; 1461 } 1462 1463 if (config().codeGenType() != LinkerConfig::Object && 1464 (pSymbol.visibility() == llvm::ELF::STV_INTERNAL || 1465 pSymbol.visibility() == llvm::ELF::STV_HIDDEN)) 1466 bind = llvm::ELF::STB_LOCAL; 1467 1468 uint32_t type = pSymbol.resolveInfo()->type(); 1469 // if the IndirectFunc symbol (i.e., STT_GNU_IFUNC) is from dynobj, change 1470 // its type to Function 1471 if (type == ResolveInfo::IndirectFunc && pSymbol.isDyn()) 1472 type = ResolveInfo::Function; 1473 return (type | (bind << 4)); 1474 } 1475 1476 /// getSymbolValue - this function is called after layout() 1477 uint64_t GNULDBackend::getSymbolValue(const LDSymbol& pSymbol) const 1478 { 1479 if (pSymbol.isDyn()) 1480 return 0x0; 1481 1482 return pSymbol.value(); 1483 } 1484 1485 /// getSymbolShndx - this function is called after layout() 1486 uint64_t 1487 GNULDBackend::getSymbolShndx(const LDSymbol& pSymbol) const 1488 { 1489 if (pSymbol.resolveInfo()->isAbsolute()) 1490 return llvm::ELF::SHN_ABS; 1491 if (pSymbol.resolveInfo()->isCommon()) 1492 return llvm::ELF::SHN_COMMON; 1493 if (pSymbol.resolveInfo()->isUndef() || pSymbol.isDyn()) 1494 return llvm::ELF::SHN_UNDEF; 1495 1496 if (pSymbol.resolveInfo()->isLocal() && 1497 LinkerConfig::Object != config().codeGenType()) { 1498 switch (pSymbol.type()) { 1499 case ResolveInfo::NoType: 1500 case ResolveInfo::File: 1501 return llvm::ELF::SHN_ABS; 1502 } 1503 } 1504 1505 if (pSymbol.resolveInfo()->isDefine() && !pSymbol.hasFragRef()) 1506 return llvm::ELF::SHN_ABS; 1507 1508 assert(pSymbol.hasFragRef() && "symbols must have fragment reference to get its index"); 1509 return pSymbol.fragRef()->frag()->getParent()->getSection().index(); 1510 } 1511 1512 /// getSymbolIdx - called by emitRelocation to get the ouput symbol table index 1513 size_t GNULDBackend::getSymbolIdx(const LDSymbol* pSymbol) const 1514 { 1515 HashTableType::iterator entry = m_pSymIndexMap->find(const_cast<LDSymbol *>(pSymbol)); 1516 assert(entry != m_pSymIndexMap->end() && "symbol not found in the symbol table"); 1517 return entry.getEntry()->value(); 1518 } 1519 1520 /// isTemporary - Whether pSymbol is a local label. 1521 bool GNULDBackend::isTemporary(const LDSymbol& pSymbol) const 1522 { 1523 if (ResolveInfo::Local != pSymbol.binding()) 1524 return false; 1525 1526 if (pSymbol.nameSize() < 2) 1527 return false; 1528 1529 const char* name = pSymbol.name(); 1530 if ('.' == name[0] && 'L' == name[1]) 1531 return true; 1532 1533 // UnixWare 2.1 cc generate DWARF debugging symbols with `..' prefix. 1534 // @ref Google gold linker, target.cc:39 @@ Target::do_is_local_label_name() 1535 if (name[0] == '.' && name[1] == '.') 1536 return true; 1537 1538 // Work arround for gcc's bug 1539 // gcc sometimes generate symbols with '_.L_' prefix. 1540 // @ref Google gold linker, target.cc:39 @@ Target::do_is_local_label_name() 1541 if (pSymbol.nameSize() < 4) 1542 return false; 1543 1544 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_') 1545 return true; 1546 1547 return false; 1548 } 1549 1550 /// allocateCommonSymbols - allocate common symbols in the corresponding 1551 /// sections. This is executed at pre-layout stage. 1552 /// @refer Google gold linker: common.cc: 214 1553 bool 1554 GNULDBackend::allocateCommonSymbols(Module& pModule) 1555 { 1556 SymbolCategory& symbol_list = pModule.getSymbolTable(); 1557 1558 if (symbol_list.emptyCommons() && symbol_list.emptyFiles() && 1559 symbol_list.emptyLocals() && symbol_list.emptyLocalDyns()) 1560 return true; 1561 1562 SymbolCategory::iterator com_sym, com_end; 1563 1564 // FIXME: If the order of common symbols is defined, then sort common symbols 1565 // std::sort(com_sym, com_end, some kind of order); 1566 1567 // get corresponding BSS LDSection 1568 ELFFileFormat* file_format = getOutputFormat(); 1569 LDSection& bss_sect = file_format->getBSS(); 1570 LDSection& tbss_sect = file_format->getTBSS(); 1571 1572 // get or create corresponding BSS SectionData 1573 SectionData* bss_sect_data = NULL; 1574 if (bss_sect.hasSectionData()) 1575 bss_sect_data = bss_sect.getSectionData(); 1576 else 1577 bss_sect_data = IRBuilder::CreateSectionData(bss_sect); 1578 1579 SectionData* tbss_sect_data = NULL; 1580 if (tbss_sect.hasSectionData()) 1581 tbss_sect_data = tbss_sect.getSectionData(); 1582 else 1583 tbss_sect_data = IRBuilder::CreateSectionData(tbss_sect); 1584 1585 // remember original BSS size 1586 uint64_t bss_offset = bss_sect.size(); 1587 uint64_t tbss_offset = tbss_sect.size(); 1588 1589 // allocate all local common symbols 1590 com_end = symbol_list.localEnd(); 1591 1592 for (com_sym = symbol_list.localBegin(); com_sym != com_end; ++com_sym) { 1593 if (ResolveInfo::Common == (*com_sym)->desc()) { 1594 // We have to reset the description of the symbol here. When doing 1595 // incremental linking, the output relocatable object may have common 1596 // symbols. Therefore, we can not treat common symbols as normal symbols 1597 // when emitting the regular name pools. We must change the symbols' 1598 // description here. 1599 (*com_sym)->resolveInfo()->setDesc(ResolveInfo::Define); 1600 Fragment* frag = new FillFragment(0x0, 1, (*com_sym)->size()); 1601 (*com_sym)->setFragmentRef(FragmentRef::Create(*frag, 0)); 1602 1603 if (ResolveInfo::ThreadLocal == (*com_sym)->type()) { 1604 // allocate TLS common symbol in tbss section 1605 tbss_offset += ObjectBuilder::AppendFragment(*frag, 1606 *tbss_sect_data, 1607 (*com_sym)->value()); 1608 } 1609 else { 1610 bss_offset += ObjectBuilder::AppendFragment(*frag, 1611 *bss_sect_data, 1612 (*com_sym)->value()); 1613 } 1614 } 1615 } 1616 1617 // allocate all global common symbols 1618 com_end = symbol_list.commonEnd(); 1619 for (com_sym = symbol_list.commonBegin(); com_sym != com_end; ++com_sym) { 1620 // We have to reset the description of the symbol here. When doing 1621 // incremental linking, the output relocatable object may have common 1622 // symbols. Therefore, we can not treat common symbols as normal symbols 1623 // when emitting the regular name pools. We must change the symbols' 1624 // description here. 1625 (*com_sym)->resolveInfo()->setDesc(ResolveInfo::Define); 1626 Fragment* frag = new FillFragment(0x0, 1, (*com_sym)->size()); 1627 (*com_sym)->setFragmentRef(FragmentRef::Create(*frag, 0)); 1628 1629 if (ResolveInfo::ThreadLocal == (*com_sym)->type()) { 1630 // allocate TLS common symbol in tbss section 1631 tbss_offset += ObjectBuilder::AppendFragment(*frag, 1632 *tbss_sect_data, 1633 (*com_sym)->value()); 1634 } 1635 else { 1636 bss_offset += ObjectBuilder::AppendFragment(*frag, 1637 *bss_sect_data, 1638 (*com_sym)->value()); 1639 } 1640 } 1641 1642 bss_sect.setSize(bss_offset); 1643 tbss_sect.setSize(tbss_offset); 1644 symbol_list.changeCommonsToGlobal(); 1645 return true; 1646 } 1647 1648 /// updateSectionFlags - update pTo's flags when merging pFrom 1649 /// update the output section flags based on input section flags. 1650 /// @ref The Google gold linker: 1651 /// output.cc: 2809: Output_section::update_flags_for_input_section 1652 bool GNULDBackend::updateSectionFlags(LDSection& pTo, const LDSection& pFrom) 1653 { 1654 // union the flags from input 1655 uint32_t flags = pTo.flag(); 1656 flags |= (pFrom.flag() & 1657 (llvm::ELF::SHF_WRITE | 1658 llvm::ELF::SHF_ALLOC | 1659 llvm::ELF::SHF_EXECINSTR)); 1660 1661 // if there is an input section is not SHF_MERGE, clean this flag 1662 if (0 == (pFrom.flag() & llvm::ELF::SHF_MERGE)) 1663 flags &= ~llvm::ELF::SHF_MERGE; 1664 1665 // if there is an input section is not SHF_STRINGS, clean this flag 1666 if (0 == (pFrom.flag() & llvm::ELF::SHF_STRINGS)) 1667 flags &= ~llvm::ELF::SHF_STRINGS; 1668 1669 pTo.setFlag(flags); 1670 return true; 1671 } 1672 1673 /// createProgramHdrs - base on output sections to create the program headers 1674 void GNULDBackend::createProgramHdrs(Module& pModule) 1675 { 1676 ELFFileFormat *file_format = getOutputFormat(); 1677 1678 // make PT_PHDR 1679 m_ELFSegmentTable.produce(llvm::ELF::PT_PHDR); 1680 1681 // make PT_INTERP 1682 if (file_format->hasInterp()) { 1683 ELFSegment* interp_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_INTERP); 1684 interp_seg->addSection(&file_format->getInterp()); 1685 } 1686 1687 uint32_t cur_flag, prev_flag = getSegmentFlag(0); 1688 ELFSegment* load_seg = NULL; 1689 // make possible PT_LOAD segments 1690 Module::iterator sect, sect_end = pModule.end(); 1691 for (sect = pModule.begin(); sect != sect_end; ++sect) { 1692 1693 if (0 == ((*sect)->flag() & llvm::ELF::SHF_ALLOC) && 1694 LDFileFormat::Null != (*sect)->kind()) 1695 continue; 1696 1697 cur_flag = getSegmentFlag((*sect)->flag()); 1698 bool createPT_LOAD = false; 1699 if (LDFileFormat::Null == (*sect)->kind()) { 1700 // 1. create text segment 1701 createPT_LOAD = true; 1702 } 1703 else if (!config().options().omagic() && 1704 (prev_flag & llvm::ELF::PF_W) ^ (cur_flag & llvm::ELF::PF_W)) { 1705 // 2. create data segment if w/o omagic set 1706 createPT_LOAD = true; 1707 } 1708 else if ((*sect)->kind() == LDFileFormat::BSS && 1709 load_seg->isDataSegment() && 1710 config().scripts().addressMap().find(".bss") != 1711 (config().scripts().addressMap().end())) { 1712 // 3. create bss segment if w/ -Tbss and there is a data segment 1713 createPT_LOAD = true; 1714 } 1715 else { 1716 if ((*sect != &(file_format->getText())) && 1717 (*sect != &(file_format->getData())) && 1718 (*sect != &(file_format->getBSS())) && 1719 (config().scripts().addressMap().find((*sect)->name()) != 1720 config().scripts().addressMap().end())) 1721 // 4. create PT_LOAD for sections in address map except for text, data, 1722 // and bss 1723 createPT_LOAD = true; 1724 } 1725 1726 if (createPT_LOAD) { 1727 // create new PT_LOAD segment 1728 load_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_LOAD, cur_flag); 1729 if (!config().options().nmagic() && !config().options().omagic()) 1730 load_seg->setAlign(abiPageSize()); 1731 } 1732 1733 assert(NULL != load_seg); 1734 load_seg->addSection((*sect)); 1735 if (cur_flag != prev_flag) 1736 load_seg->updateFlag(cur_flag); 1737 1738 prev_flag = cur_flag; 1739 } 1740 1741 // make PT_DYNAMIC 1742 if (file_format->hasDynamic()) { 1743 ELFSegment* dyn_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_DYNAMIC, 1744 llvm::ELF::PF_R | 1745 llvm::ELF::PF_W); 1746 dyn_seg->addSection(&file_format->getDynamic()); 1747 } 1748 1749 if (config().options().hasRelro()) { 1750 // make PT_GNU_RELRO 1751 ELFSegment* relro_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_GNU_RELRO); 1752 for (ELFSegmentFactory::iterator seg = elfSegmentTable().begin(), 1753 segEnd = elfSegmentTable().end(); seg != segEnd; ++seg) { 1754 if (llvm::ELF::PT_LOAD != (*seg).type()) 1755 continue; 1756 1757 for (ELFSegment::sect_iterator sect = (*seg).begin(), 1758 sectEnd = (*seg).end(); sect != sectEnd; ++sect) { 1759 unsigned int order = getSectionOrder(**sect); 1760 if (SHO_RELRO_LOCAL == order || 1761 SHO_RELRO == order || 1762 SHO_RELRO_LAST == order) { 1763 relro_seg->addSection(*sect); 1764 } 1765 } 1766 } 1767 } 1768 1769 // make PT_GNU_EH_FRAME 1770 if (file_format->hasEhFrameHdr()) { 1771 ELFSegment* eh_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_GNU_EH_FRAME); 1772 eh_seg->addSection(&file_format->getEhFrameHdr()); 1773 } 1774 1775 // make PT_TLS 1776 if (file_format->hasTData() || file_format->hasTBSS()) { 1777 ELFSegment* tls_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_TLS); 1778 if (file_format->hasTData()) 1779 tls_seg->addSection(&file_format->getTData()); 1780 if (file_format->hasTBSS()) 1781 tls_seg->addSection(&file_format->getTBSS()); 1782 } 1783 1784 // make PT_GNU_STACK 1785 if (file_format->hasStackNote()) { 1786 m_ELFSegmentTable.produce(llvm::ELF::PT_GNU_STACK, 1787 llvm::ELF::PF_R | 1788 llvm::ELF::PF_W | 1789 getSegmentFlag(file_format->getStackNote().flag())); 1790 } 1791 1792 // make PT_NOTE 1793 ELFSegment *note_seg = NULL; 1794 prev_flag = getSegmentFlag(0); 1795 for (sect = pModule.begin(); sect != sect_end; ++sect) { 1796 if ((*sect)->kind() != LDFileFormat::Note || 1797 ((*sect)->flag() & llvm::ELF::SHF_ALLOC) == 0) 1798 continue; 1799 1800 cur_flag = getSegmentFlag((*sect)->flag()); 1801 // we have different section orders for read-only and writable notes, so 1802 // create 2 segments if needed. 1803 if (note_seg == NULL || 1804 (cur_flag & llvm::ELF::PF_W) != (prev_flag & llvm::ELF::PF_W)) 1805 note_seg = m_ELFSegmentTable.produce(llvm::ELF::PT_NOTE, cur_flag); 1806 1807 note_seg->addSection(*sect); 1808 prev_flag = cur_flag; 1809 } 1810 1811 // create target dependent segments 1812 doCreateProgramHdrs(pModule); 1813 } 1814 1815 /// setupProgramHdrs - set up the attributes of segments 1816 void GNULDBackend::setupProgramHdrs() 1817 { 1818 // update segment info 1819 ELFSegmentFactory::iterator seg, seg_end = m_ELFSegmentTable.end(); 1820 for (seg = m_ELFSegmentTable.begin(); seg != seg_end; ++seg) { 1821 ELFSegment& segment = *seg; 1822 1823 // update PT_PHDR 1824 if (llvm::ELF::PT_PHDR == segment.type()) { 1825 uint64_t offset, phdr_size; 1826 if (config().targets().is32Bits()) { 1827 offset = sizeof(llvm::ELF::Elf32_Ehdr); 1828 phdr_size = sizeof(llvm::ELF::Elf32_Phdr); 1829 } 1830 else { 1831 offset = sizeof(llvm::ELF::Elf64_Ehdr); 1832 phdr_size = sizeof(llvm::ELF::Elf64_Phdr); 1833 } 1834 segment.setOffset(offset); 1835 segment.setVaddr(segmentStartAddr() + offset); 1836 segment.setPaddr(segment.vaddr()); 1837 segment.setFilesz(numOfSegments() * phdr_size); 1838 segment.setMemsz(numOfSegments() * phdr_size); 1839 segment.setAlign(config().targets().bitclass() / 8); 1840 continue; 1841 } 1842 1843 // bypass if there is no section in this segment (e.g., PT_GNU_STACK) 1844 if (segment.numOfSections() == 0) 1845 continue; 1846 1847 segment.setOffset(segment.front()->offset()); 1848 if (llvm::ELF::PT_LOAD == segment.type() && 1849 LDFileFormat::Null == segment.front()->kind()) 1850 segment.setVaddr(segmentStartAddr()); 1851 else 1852 segment.setVaddr(segment.front()->addr()); 1853 segment.setPaddr(segment.vaddr()); 1854 1855 const LDSection* last_sect = segment.back(); 1856 assert(NULL != last_sect); 1857 uint64_t file_size = last_sect->offset() - segment.offset(); 1858 if (LDFileFormat::BSS != last_sect->kind()) 1859 file_size += last_sect->size(); 1860 segment.setFilesz(file_size); 1861 1862 segment.setMemsz(last_sect->addr() - segment.vaddr() + last_sect->size()); 1863 } 1864 } 1865 1866 /// setupGNUStackInfo - setup the section flag of .note.GNU-stack in output 1867 /// @ref gold linker: layout.cc:2608 1868 void GNULDBackend::setupGNUStackInfo(Module& pModule) 1869 { 1870 uint32_t flag = 0x0; 1871 if (config().options().hasStackSet()) { 1872 // 1. check the command line option (-z execstack or -z noexecstack) 1873 if (config().options().hasExecStack()) 1874 flag = llvm::ELF::SHF_EXECINSTR; 1875 } 1876 else { 1877 // 2. check the stack info from the input objects 1878 // FIXME: since we alway emit .note.GNU-stack in output now, we may be able 1879 // to check this from the output .note.GNU-stack directly after section 1880 // merging is done 1881 size_t object_count = 0, stack_note_count = 0; 1882 Module::const_obj_iterator obj, objEnd = pModule.obj_end(); 1883 for (obj = pModule.obj_begin(); obj != objEnd; ++obj) { 1884 ++object_count; 1885 const LDSection* sect = (*obj)->context()->getSection(".note.GNU-stack"); 1886 if (NULL != sect) { 1887 ++stack_note_count; 1888 // 2.1 found a stack note that is set as executable 1889 if (0 != (llvm::ELF::SHF_EXECINSTR & sect->flag())) { 1890 flag = llvm::ELF::SHF_EXECINSTR; 1891 break; 1892 } 1893 } 1894 } 1895 1896 // 2.2 there are no stack note sections in all input objects 1897 if (0 == stack_note_count) 1898 return; 1899 1900 // 2.3 a special case. Use the target default to decide if the stack should 1901 // be executable 1902 if (llvm::ELF::SHF_EXECINSTR != flag && object_count != stack_note_count) 1903 if (m_pInfo->isDefaultExecStack()) 1904 flag = llvm::ELF::SHF_EXECINSTR; 1905 } 1906 1907 if (getOutputFormat()->hasStackNote()) { 1908 getOutputFormat()->getStackNote().setFlag(flag); 1909 } 1910 } 1911 1912 /// setupRelro - setup the offset constraint of PT_RELRO 1913 void GNULDBackend::setupRelro(Module& pModule) 1914 { 1915 assert(config().options().hasRelro()); 1916 // if -z relro is given, we need to adjust sections' offset again, and let 1917 // PT_GNU_RELRO end on a common page boundary 1918 1919 Module::iterator sect = pModule.begin(); 1920 for (Module::iterator sect_end = pModule.end(); sect != sect_end; ++sect) { 1921 // find the first non-relro section 1922 if (getSectionOrder(**sect) > SHO_RELRO_LAST) 1923 break; 1924 } 1925 1926 // align the first non-relro section to page boundary 1927 uint64_t offset = (*sect)->offset(); 1928 alignAddress(offset, commonPageSize()); 1929 (*sect)->setOffset(offset); 1930 1931 // It seems that compiler think .got and .got.plt are continuous (w/o any 1932 // padding between). If .got is the last section in PT_RELRO and it's not 1933 // continuous to its next section (i.e. .got.plt), we need to add padding 1934 // in front of .got instead. 1935 // FIXME: Maybe we can handle this in a more general way. 1936 LDSection& got = getOutputFormat()->getGOT(); 1937 if ((getSectionOrder(got) == SHO_RELRO_LAST) && 1938 (got.offset() + got.size() != offset)) { 1939 got.setOffset(offset - got.size()); 1940 } 1941 1942 // set up remaining section's offset 1943 setOutputSectionOffset(pModule, ++sect, pModule.end()); 1944 } 1945 1946 /// setOutputSectionOffset - helper function to set a group of output sections' 1947 /// offset, and set pSectBegin to pStartOffset if pStartOffset is not -1U. 1948 void GNULDBackend::setOutputSectionOffset(Module& pModule, 1949 Module::iterator pSectBegin, 1950 Module::iterator pSectEnd, 1951 uint64_t pStartOffset) 1952 { 1953 if (pSectBegin == pModule.end()) 1954 return; 1955 1956 assert(pSectEnd == pModule.end() || 1957 (pSectEnd != pModule.end() && 1958 (*pSectBegin)->index() <= (*pSectEnd)->index())); 1959 1960 if (pStartOffset != -1U) { 1961 (*pSectBegin)->setOffset(pStartOffset); 1962 ++pSectBegin; 1963 } 1964 1965 // set up the "cur" and "prev" iterator 1966 Module::iterator cur = pSectBegin; 1967 Module::iterator prev = pSectBegin; 1968 if (cur != pModule.begin()) 1969 --prev; 1970 else 1971 ++cur; 1972 1973 for (; cur != pSectEnd; ++cur, ++prev) { 1974 uint64_t offset = 0x0; 1975 switch ((*prev)->kind()) { 1976 case LDFileFormat::Null: 1977 offset = sectionStartOffset(); 1978 break; 1979 case LDFileFormat::BSS: 1980 offset = (*prev)->offset(); 1981 break; 1982 default: 1983 offset = (*prev)->offset() + (*prev)->size(); 1984 break; 1985 } 1986 1987 alignAddress(offset, (*cur)->align()); 1988 (*cur)->setOffset(offset); 1989 } 1990 } 1991 1992 /// setOutputSectionOffset - helper function to set output sections' address 1993 void GNULDBackend::setOutputSectionAddress(Module& pModule, 1994 Module::iterator pSectBegin, 1995 Module::iterator pSectEnd) 1996 { 1997 if (pSectBegin == pModule.end()) 1998 return; 1999 2000 assert(pSectEnd == pModule.end() || 2001 (pSectEnd != pModule.end() && 2002 (*pSectBegin)->index() <= (*pSectEnd)->index())); 2003 2004 for (ELFSegmentFactory::iterator seg = elfSegmentTable().begin(), 2005 segEnd = elfSegmentTable().end(), prev = elfSegmentTable().end(); 2006 seg != segEnd; prev = seg, ++seg) { 2007 if (llvm::ELF::PT_LOAD != (*seg).type()) 2008 continue; 2009 2010 uint64_t start_addr = 0x0; 2011 ScriptOptions::AddressMap::const_iterator mapping; 2012 if ((*seg).front()->kind() == LDFileFormat::Null) 2013 mapping = config().scripts().addressMap().find(".text"); 2014 else if ((*seg).isDataSegment()) 2015 mapping = config().scripts().addressMap().find(".data"); 2016 else if ((*seg).isBssSegment()) 2017 mapping = config().scripts().addressMap().find(".bss"); 2018 else 2019 mapping = config().scripts().addressMap().find((*seg).front()->name()); 2020 2021 if (mapping != config().scripts().addressMap().end()) { 2022 // use address mapping in script options 2023 start_addr = mapping.getEntry()->value(); 2024 } 2025 else { 2026 if ((*seg).front()->kind() == LDFileFormat::Null) { 2027 // 1st PT_LOAD 2028 start_addr = segmentStartAddr(); 2029 } 2030 else if ((*prev).front()->kind() == LDFileFormat::Null) { 2031 // prev segment is 1st PT_LOAD 2032 start_addr = segmentStartAddr() + (*seg).front()->offset(); 2033 } 2034 else { 2035 // Others 2036 start_addr = (*prev).front()->addr() + (*seg).front()->offset(); 2037 } 2038 // Try to align p_vaddr at page boundary if not in script options. 2039 // To do so will add more padding in file, but can save one page 2040 // at runtime. 2041 alignAddress(start_addr, (*seg).align()); 2042 } 2043 2044 // in p75,http://www.sco.com/developers/devspecs/gabi41.pdf 2045 // p_align: As "Program Loading" describes in this chapter of the 2046 // processor supplement, loadable process segments must have congruent 2047 // values for p_vaddr and p_offset, modulo the page size. 2048 if ((start_addr & ((*seg).align() - 1)) != 2049 ((*seg).front()->offset() & ((*seg).align() - 1))) { 2050 uint64_t padding = (*seg).align() + 2051 (start_addr & ((*seg).align() - 1)) - 2052 ((*seg).front()->offset() & ((*seg).align() - 1)); 2053 setOutputSectionOffset(pModule, 2054 pModule.begin() + (*seg).front()->index(), 2055 pModule.end(), 2056 (*seg).front()->offset() + padding); 2057 if (config().options().hasRelro()) 2058 setupRelro(pModule); 2059 } 2060 2061 for (ELFSegment::sect_iterator sect = (*seg).begin(), 2062 sectEnd = (*seg).end(); sect != sectEnd; ++sect) { 2063 if ((*sect)->index() < (*pSectBegin)->index()) 2064 continue; 2065 2066 if (LDFileFormat::Null == (*sect)->kind()) 2067 continue; 2068 2069 if (sect == pSectEnd) 2070 return; 2071 2072 if (sect != (*seg).begin()) 2073 (*sect)->setAddr(start_addr + (*sect)->offset() - 2074 (*seg).front()->offset()); 2075 else 2076 (*sect)->setAddr(start_addr); 2077 } 2078 } 2079 } 2080 2081 /// layout - layout method 2082 void GNULDBackend::layout(Module& pModule) 2083 { 2084 std::vector<SHOEntry> output_list; 2085 // 1. determine what sections will go into final output, and push the needed 2086 // sections into output_list for later processing 2087 for (Module::iterator it = pModule.begin(), ie = pModule.end(); it != ie; 2088 ++it) { 2089 switch ((*it)->kind()) { 2090 // take NULL and StackNote directly 2091 case LDFileFormat::Null: 2092 case LDFileFormat::StackNote: 2093 output_list.push_back(std::make_pair(*it, getSectionOrder(**it))); 2094 break; 2095 // ignore if section size is 0 2096 case LDFileFormat::EhFrame: 2097 if (((*it)->size() != 0) || 2098 ((*it)->hasEhFrame() && 2099 config().codeGenType() == LinkerConfig::Object)) 2100 output_list.push_back(std::make_pair(*it, getSectionOrder(**it))); 2101 break; 2102 case LDFileFormat::Relocation: 2103 if (((*it)->size() != 0) || 2104 ((*it)->hasRelocData() && 2105 config().codeGenType() == LinkerConfig::Object)) 2106 output_list.push_back(std::make_pair(*it, getSectionOrder(**it))); 2107 break; 2108 case LDFileFormat::Regular: 2109 case LDFileFormat::Target: 2110 case LDFileFormat::MetaData: 2111 case LDFileFormat::BSS: 2112 case LDFileFormat::Debug: 2113 case LDFileFormat::GCCExceptTable: 2114 case LDFileFormat::Note: 2115 case LDFileFormat::NamePool: 2116 case LDFileFormat::EhFrameHdr: 2117 if (((*it)->size() != 0) || 2118 ((*it)->hasSectionData() && 2119 config().codeGenType() == LinkerConfig::Object)) 2120 output_list.push_back(std::make_pair(*it, getSectionOrder(**it))); 2121 break; 2122 case LDFileFormat::Group: 2123 if (LinkerConfig::Object == config().codeGenType()) { 2124 //TODO: support incremental linking 2125 ; 2126 } 2127 break; 2128 case LDFileFormat::Version: 2129 if (0 != (*it)->size()) { 2130 output_list.push_back(std::make_pair(*it, getSectionOrder(**it))); 2131 warning(diag::warn_unsupported_symbolic_versioning) << (*it)->name(); 2132 } 2133 break; 2134 default: 2135 if (0 != (*it)->size()) { 2136 error(diag::err_unsupported_section) << (*it)->name() << (*it)->kind(); 2137 } 2138 break; 2139 } 2140 } // end of for 2141 2142 // 2. sort output section orders 2143 std::stable_sort(output_list.begin(), output_list.end(), SHOCompare()); 2144 2145 // 3. update output sections in Module 2146 pModule.getSectionTable().clear(); 2147 for(size_t index = 0; index < output_list.size(); ++index) { 2148 (output_list[index].first)->setIndex(index); 2149 pModule.getSectionTable().push_back(output_list[index].first); 2150 } 2151 2152 // 4. create program headers 2153 if (LinkerConfig::Object != config().codeGenType()) { 2154 createProgramHdrs(pModule); 2155 } 2156 2157 // 5. set output section offset 2158 setOutputSectionOffset(pModule, pModule.begin(), pModule.end(), 0x0); 2159 } 2160 2161 /// preLayout - Backend can do any needed modification before layout 2162 void GNULDBackend::preLayout(Module& pModule, IRBuilder& pBuilder) 2163 { 2164 // prelayout target first 2165 doPreLayout(pBuilder); 2166 2167 if (LinkerConfig::Object != config().codeGenType() && 2168 config().options().hasEhFrameHdr() && getOutputFormat()->hasEhFrame()) { 2169 // init EhFrameHdr and size the output section 2170 ELFFileFormat* format = getOutputFormat(); 2171 m_pEhFrameHdr = new EhFrameHdr(format->getEhFrameHdr(), 2172 format->getEhFrame()); 2173 m_pEhFrameHdr->sizeOutput(); 2174 } 2175 2176 // change .tbss and .tdata section symbol from Local to LocalDyn category 2177 if (NULL != f_pTDATA) 2178 pModule.getSymbolTable().changeLocalToDynamic(*f_pTDATA); 2179 2180 if (NULL != f_pTBSS) 2181 pModule.getSymbolTable().changeLocalToDynamic(*f_pTBSS); 2182 2183 // To merge input's relocation sections into output's relocation sections. 2184 // 2185 // If we are generating relocatables (-r), move input relocation sections 2186 // to corresponding output relocation sections. 2187 if (LinkerConfig::Object == config().codeGenType()) { 2188 Module::obj_iterator input, inEnd = pModule.obj_end(); 2189 for (input = pModule.obj_begin(); input != inEnd; ++input) { 2190 LDContext::sect_iterator rs, rsEnd = (*input)->context()->relocSectEnd(); 2191 for (rs = (*input)->context()->relocSectBegin(); rs != rsEnd; ++rs) { 2192 2193 // get the output relocation LDSection with identical name. 2194 LDSection* output_sect = pModule.getSection((*rs)->name()); 2195 if (NULL == output_sect) { 2196 output_sect = LDSection::Create((*rs)->name(), 2197 (*rs)->kind(), 2198 (*rs)->type(), 2199 (*rs)->flag()); 2200 2201 output_sect->setAlign((*rs)->align()); 2202 pModule.getSectionTable().push_back(output_sect); 2203 } 2204 2205 // set output relocation section link 2206 const LDSection* input_link = (*rs)->getLink(); 2207 assert(NULL != input_link && "Illegal input relocation section."); 2208 2209 // get the linked output section 2210 LDSection* output_link = pModule.getSection(input_link->name()); 2211 assert(NULL != output_link); 2212 2213 output_sect->setLink(output_link); 2214 2215 // get output relcoationData, create one if not exist 2216 if (!output_sect->hasRelocData()) 2217 IRBuilder::CreateRelocData(*output_sect); 2218 2219 RelocData* out_reloc_data = output_sect->getRelocData(); 2220 2221 // move relocations from input's to output's RelcoationData 2222 RelocData::RelocationListType& out_list = 2223 out_reloc_data->getRelocationList(); 2224 RelocData::RelocationListType& in_list = 2225 (*rs)->getRelocData()->getRelocationList(); 2226 out_list.splice(out_list.end(), in_list); 2227 2228 // size output 2229 if (llvm::ELF::SHT_REL == output_sect->type()) 2230 output_sect->setSize(out_reloc_data->size() * getRelEntrySize()); 2231 else if (llvm::ELF::SHT_RELA == output_sect->type()) 2232 output_sect->setSize(out_reloc_data->size() * getRelaEntrySize()); 2233 else { 2234 fatal(diag::unknown_reloc_section_type) << output_sect->type() 2235 << output_sect->name(); 2236 } 2237 } // end of for each relocation section 2238 } // end of for each input 2239 } // end of if 2240 2241 // set up the section flag of .note.GNU-stack section 2242 setupGNUStackInfo(pModule); 2243 } 2244 2245 /// postLayout - Backend can do any needed modification after layout 2246 void GNULDBackend::postLayout(Module& pModule, IRBuilder& pBuilder) 2247 { 2248 // 1. set up section address and segment attributes 2249 if (LinkerConfig::Object != config().codeGenType()) { 2250 if (config().options().hasRelro()) { 2251 // 1.1 set up the offset constraint of PT_RELRO 2252 setupRelro(pModule); 2253 } 2254 2255 // 1.2 set up the output sections' address 2256 setOutputSectionAddress(pModule, pModule.begin(), pModule.end()); 2257 2258 // 1.3 do relaxation 2259 relax(pModule, pBuilder); 2260 2261 // 1.4 set up the attributes of program headers 2262 setupProgramHdrs(); 2263 } 2264 2265 // 2. target specific post layout 2266 doPostLayout(pModule, pBuilder); 2267 } 2268 2269 void GNULDBackend::postProcessing(MemoryArea& pOutput) 2270 { 2271 if (LinkerConfig::Object != config().codeGenType() && 2272 config().options().hasEhFrameHdr() && getOutputFormat()->hasEhFrame()) { 2273 // emit eh_frame_hdr 2274 if (config().targets().is32Bits()) 2275 m_pEhFrameHdr->emitOutput<32>(pOutput); 2276 else 2277 m_pEhFrameHdr->emitOutput<64>(pOutput); 2278 } 2279 } 2280 2281 /// getHashBucketCount - calculate hash bucket count. 2282 /// @ref Google gold linker, dynobj.cc:791 2283 unsigned GNULDBackend::getHashBucketCount(unsigned pNumOfSymbols, 2284 bool pIsGNUStyle) 2285 { 2286 // @ref Google gold, dynobj.cc:loc 791 2287 static const unsigned int buckets[] = 2288 { 2289 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209, 2290 16411, 32771, 65537, 131101, 262147 2291 }; 2292 const unsigned buckets_count = sizeof buckets / sizeof buckets[0]; 2293 2294 unsigned int result = 1; 2295 for (unsigned i = 0; i < buckets_count; ++i) { 2296 if (pNumOfSymbols < buckets[i]) 2297 break; 2298 result = buckets[i]; 2299 } 2300 2301 if (pIsGNUStyle && result < 2) 2302 result = 2; 2303 2304 return result; 2305 } 2306 2307 /// getGNUHashMaskbitslog2 - calculate the number of mask bits in log2 2308 /// @ref binutils gold, dynobj.cc:1165 2309 unsigned GNULDBackend::getGNUHashMaskbitslog2(unsigned pNumOfSymbols) const 2310 { 2311 uint32_t maskbitslog2 = 1; 2312 for (uint32_t x = pNumOfSymbols >> 1; x != 0; x >>=1) 2313 ++maskbitslog2; 2314 2315 if (maskbitslog2 < 3) 2316 maskbitslog2 = 5; 2317 else if (((1U << (maskbitslog2 - 2)) & pNumOfSymbols) != 0) 2318 maskbitslog2 += 3; 2319 else 2320 maskbitslog2 += 2; 2321 2322 if (config().targets().bitclass() == 64 && maskbitslog2 == 5) 2323 maskbitslog2 = 6; 2324 2325 return maskbitslog2; 2326 } 2327 2328 /// isDynamicSymbol 2329 /// @ref Google gold linker: symtab.cc:311 2330 bool GNULDBackend::isDynamicSymbol(const LDSymbol& pSymbol) 2331 { 2332 // If a local symbol is in the LDContext's symbol table, it's a real local 2333 // symbol. We should not add it 2334 if (pSymbol.binding() == ResolveInfo::Local) 2335 return false; 2336 2337 // If we are building shared object, and the visibility is external, we 2338 // need to add it. 2339 if (LinkerConfig::DynObj == config().codeGenType() || 2340 LinkerConfig::Exec == config().codeGenType() || 2341 LinkerConfig::Binary == config().codeGenType()) { 2342 if (pSymbol.resolveInfo()->visibility() == ResolveInfo::Default || 2343 pSymbol.resolveInfo()->visibility() == ResolveInfo::Protected) 2344 return true; 2345 } 2346 return false; 2347 } 2348 2349 /// isDynamicSymbol 2350 /// @ref Google gold linker: symtab.cc:311 2351 bool GNULDBackend::isDynamicSymbol(const ResolveInfo& pResolveInfo) 2352 { 2353 // If a local symbol is in the LDContext's symbol table, it's a real local 2354 // symbol. We should not add it 2355 if (pResolveInfo.binding() == ResolveInfo::Local) 2356 return false; 2357 2358 // If we are building shared object, and the visibility is external, we 2359 // need to add it. 2360 if (LinkerConfig::DynObj == config().codeGenType() || 2361 LinkerConfig::Exec == config().codeGenType() || 2362 LinkerConfig::Binary == config().codeGenType()) { 2363 if (pResolveInfo.visibility() == ResolveInfo::Default || 2364 pResolveInfo.visibility() == ResolveInfo::Protected) 2365 return true; 2366 } 2367 return false; 2368 } 2369 2370 /// commonPageSize - the common page size of the target machine. 2371 /// @ref gold linker: target.h:135 2372 uint64_t GNULDBackend::commonPageSize() const 2373 { 2374 if (config().options().commPageSize() > 0) 2375 return std::min(config().options().commPageSize(), abiPageSize()); 2376 else 2377 return std::min(m_pInfo->commonPageSize(), abiPageSize()); 2378 } 2379 2380 /// abiPageSize - the abi page size of the target machine. 2381 /// @ref gold linker: target.h:125 2382 uint64_t GNULDBackend::abiPageSize() const 2383 { 2384 if (config().options().maxPageSize() > 0) 2385 return config().options().maxPageSize(); 2386 else 2387 return m_pInfo->abiPageSize(); 2388 } 2389 2390 /// isSymbolPreemtible - whether the symbol can be preemted by other 2391 /// link unit 2392 /// @ref Google gold linker, symtab.h:551 2393 bool GNULDBackend::isSymbolPreemptible(const ResolveInfo& pSym) const 2394 { 2395 if (pSym.other() != ResolveInfo::Default) 2396 return false; 2397 2398 // This is because the codeGenType of pie is DynObj. And gold linker check 2399 // the "shared" option instead. 2400 if (config().options().isPIE()) 2401 return false; 2402 2403 if (LinkerConfig::DynObj != config().codeGenType()) 2404 return false; 2405 2406 if (config().options().Bsymbolic()) 2407 return false; 2408 2409 // A local defined symbol should be non-preemptible. 2410 // This issue is found when linking libstdc++ on freebsd. A R_386_GOT32 2411 // relocation refers to a local defined symbol, and we should generate a 2412 // relative dynamic relocation when applying the relocation. 2413 if (pSym.isDefine() && pSym.binding() == ResolveInfo::Local) 2414 return false; 2415 2416 return true; 2417 } 2418 2419 /// symbolNeedsDynRel - return whether the symbol needs a dynamic relocation 2420 /// @ref Google gold linker, symtab.h:645 2421 bool GNULDBackend::symbolNeedsDynRel(const ResolveInfo& pSym, 2422 bool pSymHasPLT, 2423 bool isAbsReloc) const 2424 { 2425 // an undefined reference in the executables should be statically 2426 // resolved to 0 and no need a dynamic relocation 2427 if (pSym.isUndef() && 2428 !pSym.isDyn() && 2429 (LinkerConfig::Exec == config().codeGenType() || 2430 LinkerConfig::Binary == config().codeGenType())) 2431 return false; 2432 2433 // An absolute symbol can be resolved directly if it is either local 2434 // or we are linking statically. Otherwise it can still be overridden 2435 // at runtime. 2436 if (pSym.isAbsolute() && 2437 (pSym.binding() == ResolveInfo::Local || config().isCodeStatic())) 2438 return false; 2439 if (config().isCodeIndep() && isAbsReloc) 2440 return true; 2441 if (pSymHasPLT && ResolveInfo::Function == pSym.type()) 2442 return false; 2443 if (!config().isCodeIndep() && pSymHasPLT) 2444 return false; 2445 if (pSym.isDyn() || pSym.isUndef() || 2446 isSymbolPreemptible(pSym)) 2447 return true; 2448 2449 return false; 2450 } 2451 2452 /// symbolNeedsPLT - return whether the symbol needs a PLT entry 2453 /// @ref Google gold linker, symtab.h:596 2454 bool GNULDBackend::symbolNeedsPLT(const ResolveInfo& pSym) const 2455 { 2456 if (pSym.isUndef() && 2457 !pSym.isDyn() && 2458 LinkerConfig::DynObj != config().codeGenType()) 2459 return false; 2460 2461 // An IndirectFunc symbol (i.e., STT_GNU_IFUNC) always needs a plt entry 2462 if (pSym.type() == ResolveInfo::IndirectFunc) 2463 return true; 2464 2465 if (pSym.type() != ResolveInfo::Function) 2466 return false; 2467 2468 if (config().isCodeStatic()) 2469 return false; 2470 2471 if (config().options().isPIE()) 2472 return false; 2473 2474 return (pSym.isDyn() || 2475 pSym.isUndef() || 2476 isSymbolPreemptible(pSym)); 2477 } 2478 2479 /// symbolHasFinalValue - return true if the symbol's value can be decided at 2480 /// link time 2481 /// @ref Google gold linker, Symbol::final_value_is_known 2482 bool GNULDBackend::symbolFinalValueIsKnown(const ResolveInfo& pSym) const 2483 { 2484 // if the output is pic code or if not executables, symbols' value may change 2485 // at runtime 2486 // FIXME: CodeIndep() || LinkerConfig::Relocatable == CodeGenType 2487 if (config().isCodeIndep() || 2488 (LinkerConfig::Exec != config().codeGenType() && 2489 LinkerConfig::Binary != config().codeGenType())) 2490 return false; 2491 2492 // if the symbol is from dynamic object, then its value is unknown 2493 if (pSym.isDyn()) 2494 return false; 2495 2496 // if the symbol is not in dynamic object and is not undefined, then its value 2497 // is known 2498 if (!pSym.isUndef()) 2499 return true; 2500 2501 // if the symbol is undefined and not in dynamic objects, for example, a weak 2502 // undefined symbol, then whether the symbol's final value can be known 2503 // depends on whrther we're doing static link 2504 return config().isCodeStatic(); 2505 } 2506 2507 /// symbolNeedsCopyReloc - return whether the symbol needs a copy relocation 2508 bool GNULDBackend::symbolNeedsCopyReloc(const Relocation& pReloc, 2509 const ResolveInfo& pSym) const 2510 { 2511 // only the reference from dynamic executable to non-function symbol in 2512 // the dynamic objects may need copy relocation 2513 if (config().isCodeIndep() || 2514 !pSym.isDyn() || 2515 pSym.type() == ResolveInfo::Function || 2516 pSym.size() == 0) 2517 return false; 2518 2519 // check if the option -z nocopyreloc is given 2520 if (config().options().hasNoCopyReloc()) 2521 return false; 2522 2523 // TODO: Is this check necessary? 2524 // if relocation target place is readonly, a copy relocation is needed 2525 uint32_t flag = pReloc.targetRef().frag()->getParent()->getSection().flag(); 2526 if (0 == (flag & llvm::ELF::SHF_WRITE)) 2527 return true; 2528 2529 return false; 2530 } 2531 2532 LDSymbol& GNULDBackend::getTDATASymbol() 2533 { 2534 assert(NULL != f_pTDATA); 2535 return *f_pTDATA; 2536 } 2537 2538 const LDSymbol& GNULDBackend::getTDATASymbol() const 2539 { 2540 assert(NULL != f_pTDATA); 2541 return *f_pTDATA; 2542 } 2543 2544 LDSymbol& GNULDBackend::getTBSSSymbol() 2545 { 2546 assert(NULL != f_pTBSS); 2547 return *f_pTBSS; 2548 } 2549 2550 const LDSymbol& GNULDBackend::getTBSSSymbol() const 2551 { 2552 assert(NULL != f_pTBSS); 2553 return *f_pTBSS; 2554 } 2555 2556 void GNULDBackend::checkAndSetHasTextRel(const LDSection& pSection) 2557 { 2558 if (m_bHasTextRel) 2559 return; 2560 2561 // if the target section of the dynamic relocation is ALLOCATE but is not 2562 // writable, than we should set DF_TEXTREL 2563 const uint32_t flag = pSection.flag(); 2564 if (0 == (flag & llvm::ELF::SHF_WRITE) && (flag & llvm::ELF::SHF_ALLOC)) 2565 m_bHasTextRel = true; 2566 2567 return; 2568 } 2569 2570 /// initBRIslandFactory - initialize the branch island factory for relaxation 2571 bool GNULDBackend::initBRIslandFactory() 2572 { 2573 if (NULL == m_pBRIslandFactory) { 2574 m_pBRIslandFactory = new BranchIslandFactory(maxBranchOffset()); 2575 } 2576 return true; 2577 } 2578 2579 /// initStubFactory - initialize the stub factory for relaxation 2580 bool GNULDBackend::initStubFactory() 2581 { 2582 if (NULL == m_pStubFactory) { 2583 m_pStubFactory = new StubFactory(); 2584 } 2585 return true; 2586 } 2587 2588 bool GNULDBackend::relax(Module& pModule, IRBuilder& pBuilder) 2589 { 2590 if (!mayRelax()) 2591 return true; 2592 2593 bool finished = true; 2594 do { 2595 if (doRelax(pModule, pBuilder, finished)) { 2596 // If the sections (e.g., .text) are relaxed, the layout is also changed 2597 // We need to do the following: 2598 2599 // 1. set up the offset 2600 setOutputSectionOffset(pModule, pModule.begin(), pModule.end()); 2601 2602 // 2. set up the offset constraint of PT_RELRO 2603 if (config().options().hasRelro()) 2604 setupRelro(pModule); 2605 2606 // 3. set up the output sections' address 2607 setOutputSectionAddress(pModule, pModule.begin(), pModule.end()); 2608 } 2609 } while (!finished); 2610 2611 return true; 2612 } 2613 2614 bool GNULDBackend::DynsymCompare::needGNUHash(const LDSymbol& X) const 2615 { 2616 // FIXME: in bfd and gold linker, an undefined symbol might be hashed 2617 // when the ouput is not PIC, if the symbol is referred by a non pc-relative 2618 // reloc, and its value is set to the addr of the plt entry. 2619 return !X.resolveInfo()->isUndef() && !X.isDyn(); 2620 } 2621 2622 bool GNULDBackend::DynsymCompare::operator()(const LDSymbol* X, 2623 const LDSymbol* Y) const 2624 { 2625 return !needGNUHash(*X) && needGNUHash(*Y); 2626 } 2627 2628