diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-06-21 13:59:01 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-06-21 13:59:01 +0000 |
commit | 3a0822f094b578157263e04114075ad7df81db41 (patch) | |
tree | bc48361fe2cd1ca5f93ac01b38b183774468fc79 /tools | |
parent | 85d8b2bbe386bcfe669575d05b61482d7be07e5d (diff) | |
download | src-3a0822f094b578157263e04114075ad7df81db41.tar.gz src-3a0822f094b578157263e04114075ad7df81db41.zip |
Vendor import of llvm trunk r240225:vendor/llvm/llvm-trunk-r240225
Notes
Notes:
svn path=/vendor/llvm/dist/; revision=284677
svn path=/vendor/llvm/llvm-trunk-r240225/; revision=284678; tag=vendor/llvm/llvm-trunk-r240225
Diffstat (limited to 'tools')
-rw-r--r-- | tools/LLVMBuild.txt | 31 | ||||
-rw-r--r-- | tools/bugpoint/LLVMBuild.txt | 12 | ||||
-rw-r--r-- | tools/dsymutil/DwarfLinker.cpp | 2 | ||||
-rw-r--r-- | tools/gold/gold-plugin.cpp | 11 | ||||
-rw-r--r-- | tools/llc/llc.cpp | 13 | ||||
-rw-r--r-- | tools/lli/LLVMBuild.txt | 12 | ||||
-rw-r--r-- | tools/lli/OrcLazyJIT.cpp | 2 | ||||
-rw-r--r-- | tools/lli/OrcLazyJIT.h | 16 | ||||
-rw-r--r-- | tools/llvm-ar/CMakeLists.txt | 10 | ||||
-rw-r--r-- | tools/llvm-ar/Makefile | 5 | ||||
-rw-r--r-- | tools/llvm-ar/install_symlink.cmake | 6 | ||||
-rw-r--r-- | tools/llvm-ar/llvm-ar.cpp | 17 | ||||
-rw-r--r-- | tools/llvm-dis/llvm-dis.cpp | 5 | ||||
-rw-r--r-- | tools/llvm-jitlistener/LLVMBuild.txt | 11 | ||||
-rw-r--r-- | tools/llvm-mc/llvm-mc.cpp | 9 | ||||
-rw-r--r-- | tools/llvm-objdump/MachODump.cpp | 2 | ||||
-rw-r--r-- | tools/llvm-profdata/llvm-profdata.cpp | 2 | ||||
-rw-r--r-- | tools/llvm-readobj/ELFDumper.cpp | 34 | ||||
-rw-r--r-- | tools/llvm-readobj/MachODumper.cpp | 46 | ||||
-rw-r--r-- | tools/llvm-readobj/ObjDumper.h | 1 | ||||
-rw-r--r-- | tools/llvm-readobj/llvm-readobj.cpp | 6 | ||||
-rw-r--r-- | tools/llvm-size/llvm-size.cpp | 2 | ||||
-rw-r--r-- | tools/opt/LLVMBuild.txt | 13 | ||||
-rw-r--r-- | tools/verify-uselistorder/verify-uselistorder.cpp | 8 |
24 files changed, 217 insertions, 59 deletions
diff --git a/tools/LLVMBuild.txt b/tools/LLVMBuild.txt index 6a838b72ecff..acf61b0268c1 100644 --- a/tools/LLVMBuild.txt +++ b/tools/LLVMBuild.txt @@ -16,10 +16,33 @@ ;===------------------------------------------------------------------------===; [common] -subdirectories = bugpoint llc lli llvm-ar llvm-as llvm-bcanalyzer llvm-cov - llvm-diff llvm-dis llvm-dwarfdump llvm-extract llvm-jitlistener llvm-link - llvm-lto llvm-mc llvm-nm llvm-objdump llvm-pdbdump llvm-profdata llvm-rtdyld - llvm-size macho-dump opt llvm-mcmarkup verify-uselistorder dsymutil +subdirectories = + bugpoint + dsymutil + llc + lli + llvm-ar + llvm-as + llvm-bcanalyzer + llvm-cov + llvm-diff + llvm-dis + llvm-dwarfdump + llvm-extract + llvm-jitlistener + llvm-link + llvm-lto + llvm-mc + llvm-mcmarkup + llvm-nm + llvm-objdump + llvm-pdbdump + llvm-profdata + llvm-rtdyld + llvm-size + macho-dump + opt + verify-uselistorder [component_0] type = Group diff --git a/tools/bugpoint/LLVMBuild.txt b/tools/bugpoint/LLVMBuild.txt index dda8d624fc74..37a605870548 100644 --- a/tools/bugpoint/LLVMBuild.txt +++ b/tools/bugpoint/LLVMBuild.txt @@ -19,4 +19,14 @@ type = Tool name = bugpoint parent = Tools -required_libraries = AsmParser BitReader BitWriter CodeGen IRReader IPO Instrumentation Linker Scalar ObjCARC +required_libraries = + AsmParser + BitReader + BitWriter + CodeGen + IRReader + IPO + Instrumentation + Linker + ObjCARC + Scalar diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index 7dc15b990ec5..052c1daadbda 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -527,7 +527,7 @@ bool DwarfStreamer::init(Triple TheTriple, StringRef OutputFilename) { MOFI.reset(new MCObjectFileInfo); MC.reset(new MCContext(MAI.get(), MRI.get(), MOFI.get())); - MOFI->InitMCObjectFileInfo(TripleName, Reloc::Default, CodeModel::Default, + MOFI->InitMCObjectFileInfo(TheTriple, Reloc::Default, CodeModel::Default, *MC); MAB = TheTarget->createMCAsmBackend(*MRI, TripleName, ""); diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 724e93cb8c74..68c9d1a6f6e4 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -787,15 +787,20 @@ static void codegen(Module &M) { legacy::PassManager CodeGenPasses; SmallString<128> Filename; + if (!options::obj_path.empty()) + Filename = options::obj_path; + else if (options::TheOutputType == options::OT_SAVE_TEMPS) + Filename = output_name + ".o"; + int FD; - if (options::obj_path.empty()) { + bool TempOutFile = Filename.empty(); + if (TempOutFile) { std::error_code EC = sys::fs::createTemporaryFile("lto-llvm", "o", FD, Filename); if (EC) message(LDPL_FATAL, "Could not create temporary file: %s", EC.message().c_str()); } else { - Filename = options::obj_path; std::error_code EC = sys::fs::openFileForWrite(Filename.c_str(), FD, sys::fs::F_None); if (EC) @@ -816,7 +821,7 @@ static void codegen(Module &M) { "Unable to add .o file to the link. File left behind in: %s", Filename.c_str()); - if (options::obj_path.empty()) + if (TempOutFile) Cleanup.push_back(Filename.c_str()); } diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index fadcfa90235c..88e737160992 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -210,6 +210,7 @@ static int compileModule(char **argv, LLVMContext &Context) { // Load the module to be compiled... SMDiagnostic Err; std::unique_ptr<Module> M; + std::unique_ptr<MIRParser> MIR; Triple TheTriple; bool SkipModule = MCPU == "help" || @@ -217,9 +218,13 @@ static int compileModule(char **argv, LLVMContext &Context) { // If user just wants to list available options, skip module loading if (!SkipModule) { - if (StringRef(InputFilename).endswith_lower(".mir")) - M = parseMIRFile(InputFilename, Err, Context); - else + if (StringRef(InputFilename).endswith_lower(".mir")) { + MIR = createMIRParserFromFile(InputFilename, Err, Context); + if (MIR) { + M = MIR->parseLLVMModule(); + assert(M && "parseLLVMModule should exit on failure"); + } + } else M = parseIRFile(InputFilename, Err, Context); if (!M) { Err.print(argv[0], errs()); @@ -350,7 +355,7 @@ static int compileModule(char **argv, LLVMContext &Context) { // Ask the target to add backend passes as necessary. if (Target->addPassesToEmitFile(PM, *OS, FileType, NoVerify, StartAfterID, - StopAfterID)) { + StopAfterID, MIR.get())) { errs() << argv[0] << ": target does not support generation of this" << " file type!\n"; return 1; diff --git a/tools/lli/LLVMBuild.txt b/tools/lli/LLVMBuild.txt index 580ba9a4ded6..9d889bf4c2e6 100644 --- a/tools/lli/LLVMBuild.txt +++ b/tools/lli/LLVMBuild.txt @@ -22,4 +22,14 @@ subdirectories = ChildTarget type = Tool name = lli parent = Tools -required_libraries = AsmParser BitReader IRReader Instrumentation Interpreter MCJIT NativeCodeGen SelectionDAG TransformUtils Native +required_libraries = + AsmParser + BitReader + IRReader + Instrumentation + Interpreter + MCJIT + Native + NativeCodeGen + SelectionDAG + TransformUtils diff --git a/tools/lli/OrcLazyJIT.cpp b/tools/lli/OrcLazyJIT.cpp index afccfa6b0328..ae276e6cda8f 100644 --- a/tools/lli/OrcLazyJIT.cpp +++ b/tools/lli/OrcLazyJIT.cpp @@ -131,7 +131,7 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) { // manager for this target. Bail out. if (!CallbackMgrBuilder) { errs() << "No callback manager available for target '" - << TM->getTargetTriple() << "'.\n"; + << TM->getTargetTriple().str() << "'.\n"; return 1; } diff --git a/tools/lli/OrcLazyJIT.h b/tools/lli/OrcLazyJIT.h index c4a12b6dd9e0..92572256e36e 100644 --- a/tools/lli/OrcLazyJIT.h +++ b/tools/lli/OrcLazyJIT.h @@ -55,7 +55,7 @@ public: CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)), IRDumpLayer(CompileLayer, createDebugDumper()), CCMgr(BuildCallbackMgr(IRDumpLayer, CCMgrMemMgr, Context)), - CODLayer(IRDumpLayer, *CCMgr), + CODLayer(IRDumpLayer, *CCMgr, false), CXXRuntimeOverrides([this](const std::string &S) { return mangle(S); }) {} ~OrcLazyJIT() { @@ -88,22 +88,24 @@ public: // 1) Search the JIT symbols. // 2) Check for C++ runtime overrides. // 3) Search the host process (LLI)'s symbol table. - auto Resolver = + std::shared_ptr<RuntimeDyld::SymbolResolver> Resolver = orc::createLambdaResolver( [this](const std::string &Name) { - if (auto Sym = CODLayer.findSymbol(Name, true)) - return RuntimeDyld::SymbolInfo(Sym.getAddress(), Sym.getFlags()); - + return RuntimeDyld::SymbolInfo(Sym.getAddress(), + Sym.getFlags()); if (auto Sym = CXXRuntimeOverrides.searchOverrides(Name)) return Sym; - if (auto Addr = RTDyldMemoryManager::getSymbolAddressInProcess(Name)) + if (auto Addr = + RTDyldMemoryManager::getSymbolAddressInProcess(Name)) return RuntimeDyld::SymbolInfo(Addr, JITSymbolFlags::Exported); return RuntimeDyld::SymbolInfo(nullptr); }, - [](const std::string &Name) { return RuntimeDyld::SymbolInfo(nullptr); } + [](const std::string &Name) { + return RuntimeDyld::SymbolInfo(nullptr); + } ); // Add the module to the JIT. diff --git a/tools/llvm-ar/CMakeLists.txt b/tools/llvm-ar/CMakeLists.txt index 3782c87e4d38..05ffe36fa7fe 100644 --- a/tools/llvm-ar/CMakeLists.txt +++ b/tools/llvm-ar/CMakeLists.txt @@ -1,6 +1,7 @@ set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD} Core + LibDriver Object Support ) @@ -26,4 +27,13 @@ add_custom_command(OUTPUT ${llvm_ranlib} add_custom_target(llvm-ranlib ALL DEPENDS ${llvm_ranlib}) set_target_properties(llvm-ranlib PROPERTIES FOLDER Tools) +set(llvm_lib "${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lib${CMAKE_EXECUTABLE_SUFFIX}") + +add_custom_command(OUTPUT ${llvm_lib} + COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${llvm_ar_binary}" "${llvm_lib}" + DEPENDS llvm-ar) + +add_custom_target(llvm-lib ALL DEPENDS ${llvm_lib}) +set_target_properties(llvm-lib PROPERTIES FOLDER Tools) + install(SCRIPT install_symlink.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\") diff --git a/tools/llvm-ar/Makefile b/tools/llvm-ar/Makefile index e10d6ac6ab62..824bb9473000 100644 --- a/tools/llvm-ar/Makefile +++ b/tools/llvm-ar/Makefile @@ -10,9 +10,12 @@ LEVEL := ../.. TOOLNAME := llvm-ar TOOLALIAS = llvm-ranlib -LINK_COMPONENTS := all-targets bitreader support object +LINK_COMPONENTS := all-targets bitreader libdriver support object # This tool has no plugins, optimize startup time. TOOL_NO_EXPORTS := 1 include $(LEVEL)/Makefile.common + +all-local:: + $(Verb) $(AliasTool) $(notdir $(ToolBuildPath)) $(ToolDir)/llvm-lib$(EXEEXT) diff --git a/tools/llvm-ar/install_symlink.cmake b/tools/llvm-ar/install_symlink.cmake index e313897b8b3a..d48431b128de 100644 --- a/tools/llvm-ar/install_symlink.cmake +++ b/tools/llvm-ar/install_symlink.cmake @@ -23,3 +23,9 @@ message("Creating llvm-ranlib") execute_process( COMMAND "${CMAKE_COMMAND}" -E ${LINK_OR_COPY} "llvm-ar${EXECUTABLE_SUFFIX}" "llvm-ranlib${EXECUTABLE_SUFFIX}" WORKING_DIRECTORY "${bindir}") + +message("Creating llvm-lib") + +execute_process( + COMMAND "${CMAKE_COMMAND}" -E ${LINK_OR_COPY} "llvm-ar${EXECUTABLE_SUFFIX}" "llvm-lib${EXECUTABLE_SUFFIX}" + WORKING_DIRECTORY "${bindir}") diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 1f55e8a4968b..6782b9c126ab 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/StringSwitch.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" +#include "llvm/LibDriver/LibDriver.h" #include "llvm/Object/Archive.h" #include "llvm/Object/ArchiveWriter.h" #include "llvm/Object/ObjectFile.h" @@ -716,6 +717,15 @@ int main(int argc, char **argv) { PrettyStackTraceProgram X(argc, argv); llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + + StringRef Stem = sys::path::stem(ToolName); + if (Stem.find("ranlib") == StringRef::npos && + Stem.find("lib") != StringRef::npos) + return libDriverMain(argc, const_cast<const char **>(argv)); + // Have the command line options parsed and handle things // like --help and --version. cl::ParseCommandLineOptions(argc, argv, @@ -723,14 +733,9 @@ int main(int argc, char **argv) { " This program archives bitcode files into single libraries\n" ); - llvm::InitializeAllTargetInfos(); - llvm::InitializeAllTargetMCs(); - llvm::InitializeAllAsmParsers(); - - StringRef Stem = sys::path::stem(ToolName); if (Stem.find("ar") != StringRef::npos) return ar_main(); if (Stem.find("ranlib") != StringRef::npos) return ranlib_main(); - fail("Not ranlib or ar!"); + fail("Not ranlib, ar or lib!"); } diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index 26f14b9b1a28..4b7d94d5b261 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -148,7 +148,8 @@ int main(int argc, char **argv) { std::unique_ptr<Module> M; // Use the bitcode streaming interface - DataStreamer *Streamer = getDataFileStreamer(InputFilename, &ErrorMessage); + std::unique_ptr<DataStreamer> Streamer = + getDataFileStreamer(InputFilename, &ErrorMessage); if (Streamer) { std::string DisplayFilename; if (InputFilename == "-") @@ -156,7 +157,7 @@ int main(int argc, char **argv) { else DisplayFilename = InputFilename; ErrorOr<std::unique_ptr<Module>> MOrErr = - getStreamedBitcodeModule(DisplayFilename, Streamer, Context); + getStreamedBitcodeModule(DisplayFilename, std::move(Streamer), Context); M = std::move(*MOrErr); M->materializeAllPermanently(); } else { diff --git a/tools/llvm-jitlistener/LLVMBuild.txt b/tools/llvm-jitlistener/LLVMBuild.txt index e6ed20b24030..8861cc742f46 100644 --- a/tools/llvm-jitlistener/LLVMBuild.txt +++ b/tools/llvm-jitlistener/LLVMBuild.txt @@ -19,4 +19,13 @@ type = Tool name = llvm-jitlistener parent = Tools -required_libraries = AsmParser BitReader IRReader Interpreter MCJIT NativeCodeGen Object SelectionDAG Native +required_libraries = + AsmParser + BitReader + IRReader + Interpreter + MCJIT + NativeCodeGen + Object + SelectionDAG + Native diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index 9a9185c7523c..6ecdb2eaa6d5 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -383,7 +383,6 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n"); MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); TripleName = Triple::normalize(TripleName); - Triple TheTriple(TripleName); setDwarfDebugFlags(argc, argv); setDwarfDebugProducer(); @@ -392,6 +391,9 @@ int main(int argc, char **argv) { const Target *TheTarget = GetTarget(ProgName); if (!TheTarget) return 1; + // Now that GetTarget() has (potentially) replaced TripleName, it's safe to + // construct the Triple object. + Triple TheTriple(TripleName); ErrorOr<std::unique_ptr<MemoryBuffer>> BufferPtr = MemoryBuffer::getFileOrSTDIN(InputFilename); @@ -429,7 +431,7 @@ int main(int argc, char **argv) { // MCObjectFileInfo needs a MCContext reference in order to initialize itself. MCObjectFileInfo MOFI; MCContext Ctx(MAI.get(), MRI.get(), &MOFI, &SrcMgr); - MOFI.InitMCObjectFileInfo(TripleName, RelocModel, CMModel, Ctx); + MOFI.InitMCObjectFileInfo(TheTriple, RelocModel, CMModel, Ctx); if (SaveTempLabels) Ctx.setAllowTemporaryLabels(false); @@ -498,6 +500,9 @@ int main(int argc, char **argv) { } else { assert(FileType == OFT_ObjectFile && "Invalid file type!"); + // Don't waste memory on names of temp labels. + Ctx.setUseNamesOnTempLabels(false); + if (!Out->os().supportsSeeking()) { BOS = make_unique<buffer_ostream>(Out->os()); OS = BOS.get(); diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index bf7451eb86d7..1730bf3859f0 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -788,7 +788,7 @@ static void DumpLiteralPointerSection(MachOObjectFile *O, // Set the size of the literal pointer. uint32_t lp_size = O->is64Bit() ? 8 : 4; - // Collect the external relocation symbols for the the literal pointers. + // Collect the external relocation symbols for the literal pointers. std::vector<std::pair<uint64_t, SymbolRef>> Relocs; for (const RelocationRef &Reloc : Section.relocations()) { DataRefImpl Rel; diff --git a/tools/llvm-profdata/llvm-profdata.cpp b/tools/llvm-profdata/llvm-profdata.cpp index 1bfdb181d7a9..6fb48d8fad58 100644 --- a/tools/llvm-profdata/llvm-profdata.cpp +++ b/tools/llvm-profdata/llvm-profdata.cpp @@ -37,7 +37,9 @@ static void exitWithError(const Twine &Message, StringRef Whence = "") { ::exit(1); } +namespace { enum ProfileKinds { instr, sample }; +} static void mergeInstrProfile(const cl::list<std::string> &Inputs, StringRef OutputFilename) { diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 0931cb70f6d8..99969fd469f9 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -58,6 +58,7 @@ public: void printAttributes() override; void printMipsPLTGOT() override; void printMipsABIFlags() override; + void printMipsReginfo() override; private: typedef ELFFile<ELFT> ELFO; @@ -147,12 +148,12 @@ getSectionNameIndex(const ELFO &Obj, typename ELFO::Elf_Sym_Iter Symbol, SectionName = "Processor Specific"; else if (Symbol->isOSSpecific()) SectionName = "Operating System Specific"; - else if (Symbol->isReserved()) - SectionName = "Reserved"; else if (Symbol->isAbsolute()) SectionName = "Absolute"; else if (Symbol->isCommon()) SectionName = "Common"; + else if (Symbol->isReserved() && SectionIndex != SHN_XINDEX) + SectionName = "Reserved"; else { if (SectionIndex == SHN_XINDEX) SectionIndex = Obj.getSymbolTableIndex(&*Symbol); @@ -233,7 +234,7 @@ static const EnumEntry<unsigned> ElfMachineType[] = { LLVM_READOBJ_ENUM_ENT(ELF, EM_386 ), LLVM_READOBJ_ENUM_ENT(ELF, EM_68K ), LLVM_READOBJ_ENUM_ENT(ELF, EM_88K ), - LLVM_READOBJ_ENUM_ENT(ELF, EM_486 ), + LLVM_READOBJ_ENUM_ENT(ELF, EM_IAMCU ), LLVM_READOBJ_ENUM_ENT(ELF, EM_860 ), LLVM_READOBJ_ENUM_ENT(ELF, EM_MIPS ), LLVM_READOBJ_ENUM_ENT(ELF, EM_S370 ), @@ -1424,3 +1425,30 @@ template <class ELFT> void ELFDumper<ELFT>::printMipsABIFlags() { W.printFlags("Flags 1", Flags->flags1, makeArrayRef(ElfMipsFlags1)); W.printHex("Flags 2", Flags->flags2); } + +template <class ELFT> void ELFDumper<ELFT>::printMipsReginfo() { + const Elf_Shdr *Shdr = findSectionByName(*Obj, ".reginfo"); + if (!Shdr) { + W.startLine() << "There is no .reginfo section in the file.\n"; + return; + } + ErrorOr<ArrayRef<uint8_t>> Sec = Obj->getSectionContents(Shdr); + if (!Sec) { + W.startLine() << "The .reginfo section is empty.\n"; + return; + } + if (Sec->size() != sizeof(Elf_Mips_RegInfo<ELFT>)) { + W.startLine() << "The .reginfo section has a wrong size.\n"; + return; + } + + auto *Reginfo = reinterpret_cast<const Elf_Mips_RegInfo<ELFT> *>(Sec->data()); + + DictScope GS(W, "MIPS RegInfo"); + W.printHex("GP", Reginfo->ri_gp_value); + W.printHex("General Mask", Reginfo->ri_gprmask); + W.printHex("Co-Proc Mask0", Reginfo->ri_cprmask[0]); + W.printHex("Co-Proc Mask1", Reginfo->ri_cprmask[1]); + W.printHex("Co-Proc Mask2", Reginfo->ri_cprmask[2]); + W.printHex("Co-Proc Mask3", Reginfo->ri_cprmask[3]); +} diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp index 40691a222f04..aeb563a25ff3 100644 --- a/tools/llvm-readobj/MachODumper.cpp +++ b/tools/llvm-readobj/MachODumper.cpp @@ -469,35 +469,47 @@ void MachODumper::printRelocation(const MachOObjectFile *Obj, DataRefImpl DR = Reloc.getRawDataRefImpl(); MachO::any_relocation_info RE = Obj->getRelocation(DR); bool IsScattered = Obj->isRelocationScattered(RE); - SmallString<32> SymbolNameOrOffset("0x"); - if (IsScattered) { - // Scattered relocations don't really have an associated symbol - // for some reason, even if one exists in the symtab at the correct address. - SymbolNameOrOffset += utohexstr(Obj->getScatteredRelocationValue(RE)); - } else { + bool IsExtern = !IsScattered && Obj->getPlainRelocationExternal(RE); + + StringRef TargetName; + if (IsExtern) { symbol_iterator Symbol = Reloc.getSymbol(); if (Symbol != Obj->symbol_end()) { - StringRef SymbolName; - if (error(Symbol->getName(SymbolName))) + if (error(Symbol->getName(TargetName))) return; - SymbolNameOrOffset = SymbolName; - } else - SymbolNameOrOffset += utohexstr(Obj->getPlainRelocationSymbolNum(RE)); + } + } else if (!IsScattered) { + section_iterator SecI = Obj->getRelocationSection(DR); + if (SecI != Obj->section_end()) { + if (error(SecI->getName(TargetName))) + return; + } } + if (TargetName.empty()) + TargetName = "-"; if (opts::ExpandRelocs) { DictScope Group(W, "Relocation"); W.printHex("Offset", Offset); W.printNumber("PCRel", Obj->getAnyRelocationPCRel(RE)); W.printNumber("Length", Obj->getAnyRelocationLength(RE)); - if (IsScattered) - W.printString("Extern", StringRef("N/A")); - else - W.printNumber("Extern", Obj->getPlainRelocationExternal(RE)); W.printNumber("Type", RelocName, Obj->getAnyRelocationType(RE)); - W.printString("Symbol", SymbolNameOrOffset); - W.printNumber("Scattered", IsScattered); + if (IsScattered) { + W.printHex("Value", Obj->getScatteredRelocationValue(RE)); + } else { + const char *Kind = IsExtern ? "Symbol" : "Section"; + W.printNumber(Kind, TargetName, Obj->getPlainRelocationSymbolNum(RE)); + } } else { + SmallString<32> SymbolNameOrOffset("0x"); + if (IsScattered) { + // Scattered relocations don't really have an associated symbol for some + // reason, even if one exists in the symtab at the correct address. + SymbolNameOrOffset += utohexstr(Obj->getScatteredRelocationValue(RE)); + } else { + SymbolNameOrOffset = TargetName; + } + raw_ostream& OS = W.startLine(); OS << W.hex(Offset) << " " << Obj->getAnyRelocationPCRel(RE) diff --git a/tools/llvm-readobj/ObjDumper.h b/tools/llvm-readobj/ObjDumper.h index 5750d6ffd286..323f5e319cf3 100644 --- a/tools/llvm-readobj/ObjDumper.h +++ b/tools/llvm-readobj/ObjDumper.h @@ -43,6 +43,7 @@ public: // Only implemented for MIPS ELF at this time. virtual void printMipsPLTGOT() { } virtual void printMipsABIFlags() { } + virtual void printMipsReginfo() { } // Only implemented for PE/COFF. virtual void printCOFFImports() { } diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp index be7bbe94d9ea..f960796a4cb9 100644 --- a/tools/llvm-readobj/llvm-readobj.cpp +++ b/tools/llvm-readobj/llvm-readobj.cpp @@ -152,6 +152,10 @@ namespace opts { cl::opt<bool> MipsABIFlags("mips-abi-flags", cl::desc("Display the MIPS.abiflags section")); + // -mips-reginfo + cl::opt<bool> MipsReginfo("mips-reginfo", + cl::desc("Display the MIPS .reginfo section")); + // -coff-imports cl::opt<bool> COFFImports("coff-imports", cl::desc("Display the PE/COFF import table")); @@ -296,6 +300,8 @@ static void dumpObject(const ObjectFile *Obj) { Dumper->printMipsPLTGOT(); if (opts::MipsABIFlags) Dumper->printMipsABIFlags(); + if (opts::MipsReginfo) + Dumper->printMipsReginfo(); } if (opts::COFFImports) Dumper->printCOFFImports(); diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index c64c1d722d3d..9a6e2c1ae4be 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -97,7 +97,7 @@ static size_t getNumLengthAsString(uint64_t num) { return result.size(); } -/// @brief Return the the printing format for the Radix. +/// @brief Return the printing format for the Radix. static const char *getRadixFmt(void) { switch (Radix) { case octal: diff --git a/tools/opt/LLVMBuild.txt b/tools/opt/LLVMBuild.txt index b162ab6cfe9b..047719042de9 100644 --- a/tools/opt/LLVMBuild.txt +++ b/tools/opt/LLVMBuild.txt @@ -19,4 +19,15 @@ type = Tool name = opt parent = Tools -required_libraries = AsmParser BitReader BitWriter CodeGen IRReader IPO Instrumentation Scalar ObjCARC Passes all-targets +required_libraries = + AsmParser + BitReader + BitWriter + CodeGen + IRReader + IPO + Instrumentation + Scalar + ObjCARC + Passes + all-targets diff --git a/tools/verify-uselistorder/verify-uselistorder.cpp b/tools/verify-uselistorder/verify-uselistorder.cpp index 795d035d3df4..efa4bcbe1aaa 100644 --- a/tools/verify-uselistorder/verify-uselistorder.cpp +++ b/tools/verify-uselistorder/verify-uselistorder.cpp @@ -159,14 +159,14 @@ std::unique_ptr<Module> TempFile::readBitcode(LLVMContext &Context) const { } MemoryBuffer *Buffer = BufferOr.get().get(); - ErrorOr<Module *> ModuleOr = + ErrorOr<std::unique_ptr<Module>> ModuleOr = parseBitcodeFile(Buffer->getMemBufferRef(), Context); if (!ModuleOr) { errs() << "verify-uselistorder: error: " << ModuleOr.getError().message() << "\n"; return nullptr; } - return std::unique_ptr<Module>(ModuleOr.get()); + return std::move(ModuleOr.get()); } std::unique_ptr<Module> TempFile::readAssembly(LLVMContext &Context) const { @@ -205,6 +205,8 @@ ValueMapping::ValueMapping(const Module &M) { map(F.getPrefixData()); if (F.hasPrologueData()) map(F.getPrologueData()); + if (F.hasPersonalityFn()) + map(F.getPersonalityFn()); } // Function bodies. @@ -474,6 +476,8 @@ static void changeUseLists(Module &M, Changer changeValueUseList) { changeValueUseList(F.getPrefixData()); if (F.hasPrologueData()) changeValueUseList(F.getPrologueData()); + if (F.hasPersonalityFn()) + changeValueUseList(F.getPersonalityFn()); } // Function bodies. |