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