| OLD | NEW |
| 1 //===-- LTOModule.cpp - LLVM Link Time Optimizer --------------------------===// | 1 //===-- LTOModule.cpp - LLVM Link Time Optimizer --------------------------===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This file implements the Link Time Optimization library. This library is | 10 // This file implements the Link Time Optimization library. This library is |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "llvm/MC/MCInstrInfo.h" | 25 #include "llvm/MC/MCInstrInfo.h" |
| 26 #include "llvm/MC/MCParser/MCAsmParser.h" | 26 #include "llvm/MC/MCParser/MCAsmParser.h" |
| 27 #include "llvm/MC/MCSection.h" | 27 #include "llvm/MC/MCSection.h" |
| 28 #include "llvm/MC/MCSubtargetInfo.h" | 28 #include "llvm/MC/MCSubtargetInfo.h" |
| 29 #include "llvm/MC/MCSymbol.h" | 29 #include "llvm/MC/MCSymbol.h" |
| 30 #include "llvm/MC/MCTargetAsmParser.h" | 30 #include "llvm/MC/MCTargetAsmParser.h" |
| 31 #include "llvm/MC/SubtargetFeature.h" | 31 #include "llvm/MC/SubtargetFeature.h" |
| 32 #include "llvm/Object/IRObjectFile.h" | 32 #include "llvm/Object/IRObjectFile.h" |
| 33 #include "llvm/Object/ObjectFile.h" | 33 #include "llvm/Object/ObjectFile.h" |
| 34 #include "llvm/Support/CommandLine.h" | 34 #include "llvm/Support/CommandLine.h" |
| 35 #include "llvm/Support/ErrorHandling.h" // @LOCALMOD |
| 35 #include "llvm/Support/FileSystem.h" | 36 #include "llvm/Support/FileSystem.h" |
| 36 #include "llvm/Support/Host.h" | 37 #include "llvm/Support/Host.h" |
| 37 #include "llvm/Support/MemoryBuffer.h" | 38 #include "llvm/Support/MemoryBuffer.h" |
| 38 #include "llvm/Support/Path.h" | 39 #include "llvm/Support/Path.h" |
| 39 #include "llvm/Support/SourceMgr.h" | 40 #include "llvm/Support/SourceMgr.h" |
| 40 #include "llvm/Support/TargetRegistry.h" | 41 #include "llvm/Support/TargetRegistry.h" |
| 41 #include "llvm/Support/TargetSelect.h" | 42 #include "llvm/Support/TargetSelect.h" |
| 42 #include "llvm/Target/TargetLowering.h" | 43 #include "llvm/Target/TargetLowering.h" |
| 43 #include "llvm/Target/TargetLoweringObjectFile.h" | 44 #include "llvm/Target/TargetLoweringObjectFile.h" |
| 44 #include "llvm/Target/TargetRegisterInfo.h" | 45 #include "llvm/Target/TargetRegisterInfo.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 return nullptr; | 163 return nullptr; |
| 163 } | 164 } |
| 164 ErrorOr<Module *> MOrErr = parseBitcodeFile(*MBOrErr, *Context); | 165 ErrorOr<Module *> MOrErr = parseBitcodeFile(*MBOrErr, *Context); |
| 165 if (std::error_code EC = MOrErr.getError()) { | 166 if (std::error_code EC = MOrErr.getError()) { |
| 166 errMsg = EC.message(); | 167 errMsg = EC.message(); |
| 167 return nullptr; | 168 return nullptr; |
| 168 } | 169 } |
| 169 std::unique_ptr<Module> M(MOrErr.get()); | 170 std::unique_ptr<Module> M(MOrErr.get()); |
| 170 | 171 |
| 171 std::string TripleStr = M->getTargetTriple(); | 172 std::string TripleStr = M->getTargetTriple(); |
| 173 // @LOCALMOD-BEGIN |
| 174 // Pretend that we are ARM for name mangling and assembly conventions. |
| 175 // https://code.google.com/p/nativeclient/issues/detail?id=2554 |
| 176 if (TripleStr == "le32-unknown-nacl") { |
| 177 TripleStr = "armv7a-none-nacl-gnueabi"; |
| 178 } |
| 179 // @LOCALMOD-END |
| 172 if (TripleStr.empty()) | 180 if (TripleStr.empty()) |
| 173 TripleStr = sys::getDefaultTargetTriple(); | 181 TripleStr = sys::getDefaultTargetTriple(); |
| 174 llvm::Triple Triple(TripleStr); | 182 llvm::Triple Triple(TripleStr); |
| 175 | 183 |
| 176 // find machine architecture for this module | 184 // find machine architecture for this module |
| 177 const Target *march = TargetRegistry::lookupTarget(TripleStr, errMsg); | 185 const Target *march = TargetRegistry::lookupTarget(TripleStr, errMsg); |
| 178 if (!march) | 186 if (!march) |
| 179 return nullptr; | 187 return nullptr; |
| 180 | 188 |
| 181 // construct LTOModule, hand over ownership of module and target | 189 // construct LTOModule, hand over ownership of module and target |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 addAsmGlobalSymbolUndef(Name); | 571 addAsmGlobalSymbolUndef(Name); |
| 564 else if (Flags & object::BasicSymbolRef::SF_Global) | 572 else if (Flags & object::BasicSymbolRef::SF_Global) |
| 565 addAsmGlobalSymbol(Name, LTO_SYMBOL_SCOPE_DEFAULT); | 573 addAsmGlobalSymbol(Name, LTO_SYMBOL_SCOPE_DEFAULT); |
| 566 else | 574 else |
| 567 addAsmGlobalSymbol(Name, LTO_SYMBOL_SCOPE_INTERNAL); | 575 addAsmGlobalSymbol(Name, LTO_SYMBOL_SCOPE_INTERNAL); |
| 568 continue; | 576 continue; |
| 569 } | 577 } |
| 570 | 578 |
| 571 auto *F = dyn_cast<Function>(GV); | 579 auto *F = dyn_cast<Function>(GV); |
| 572 if (IsUndefined) { | 580 if (IsUndefined) { |
| 581 // @LOCALMOD-BEGIN |
| 582 // Bitcode modules may have declarations for functions or globals |
| 583 // which are unused. Ignore them here so that gold does not mistake |
| 584 // them for undefined symbols. |
| 585 if (GV->use_empty()) |
| 586 continue; |
| 587 // @LOCALMOD-END |
| 588 |
| 573 addPotentialUndefinedSymbol(Sym, F != nullptr); | 589 addPotentialUndefinedSymbol(Sym, F != nullptr); |
| 574 continue; | 590 continue; |
| 575 } | 591 } |
| 576 | 592 |
| 577 if (F) { | 593 if (F) { |
| 578 addDefinedFunctionSymbol(Sym); | 594 addDefinedFunctionSymbol(Sym); |
| 579 continue; | 595 continue; |
| 580 } | 596 } |
| 581 | 597 |
| 582 if (isa<GlobalVariable>(GV)) { | 598 if (isa<GlobalVariable>(GV)) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 if (!DepLibName.empty()) | 638 if (!DepLibName.empty()) |
| 623 _deplibs.push_back(DepLibName.data()); | 639 _deplibs.push_back(DepLibName.data()); |
| 624 else if (!Op.empty()) | 640 else if (!Op.empty()) |
| 625 _linkeropts.push_back(Op.data()); | 641 _linkeropts.push_back(Op.data()); |
| 626 } | 642 } |
| 627 } | 643 } |
| 628 } | 644 } |
| 629 | 645 |
| 630 // Add other interesting metadata here. | 646 // Add other interesting metadata here. |
| 631 } | 647 } |
| OLD | NEW |