diff options
author | Michael Trent <mtrent@apple.com> | 2019-05-30 18:17:10 +0000 |
---|---|---|
committer | Michael Trent <mtrent@apple.com> | 2019-05-30 18:17:10 +0000 |
commit | 5d5f6299229610d69c596a08d1d9344a1c47531c (patch) | |
tree | 078029c7792bd0ff19d6c14bc28fe518304797bb /llvm/tools/llvm-objdump/MachODump.cpp | |
parent | 0f4446b2700a02612297bdb73a75a784a46d31bf (diff) | |
download | bcm5719-llvm-5d5f6299229610d69c596a08d1d9344a1c47531c.tar.gz bcm5719-llvm-5d5f6299229610d69c596a08d1d9344a1c47531c.zip |
Reverting change r362121 due to lld-x86_64-ubuntu-fast test failures
llvm-svn: 362123
Diffstat (limited to 'llvm/tools/llvm-objdump/MachODump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 63 |
1 files changed, 6 insertions, 57 deletions
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index b684daacb61..ea92ef9268a 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -7223,13 +7223,11 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, raw_ostream &DebugOut = nulls(); #endif - // Try to find debug info and set up the DIContext for it. std::unique_ptr<DIContext> diContext; - std::unique_ptr<Binary> DSYMBinary; + ObjectFile *DbgObj = MachOOF; std::unique_ptr<MemoryBuffer> DSYMBuf; + // Try to find debug info and set up the DIContext for it. if (UseDbg) { - ObjectFile *DbgObj = MachOOF; - // A separate DSym file path was specified, parse it as a macho file, // get the sections and supply it to the section name parsing machinery. if (!DSYMFile.empty()) { @@ -7240,61 +7238,12 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, return; } + std::unique_ptr<MachOObjectFile> DbgObjCheck = unwrapOrError( + ObjectFile::createMachOObjectFile(BufOrErr.get()->getMemBufferRef()), + DSYMFile.getValue()); + DbgObj = DbgObjCheck.release(); // We need to keep the file alive, because we're replacing DbgObj with it. DSYMBuf = std::move(BufOrErr.get()); - - Expected<std::unique_ptr<Binary>> BinaryOrErr = - createBinary(DSYMBuf.get()->getMemBufferRef()); - if (!BinaryOrErr) { - report_error(BinaryOrErr.takeError(), DSYMFile); - return; - } - - // We need to keep the Binary elive with the buffer - DSYMBinary = std::move(BinaryOrErr.get()); - - if (ObjectFile *O = dyn_cast<ObjectFile>(DSYMBinary.get())) { - // this is a Mach-O object file, use it - if (MachOObjectFile *MachDSYM = dyn_cast<MachOObjectFile>(&*O)) { - DbgObj = MachDSYM; - } - else { - WithColor::error(errs(), "llvm-objdump") - << DSYMFile << " is not a Mach-O file type.\n"; - return; - } - } - else if (auto UB = dyn_cast<MachOUniversalBinary>(DSYMBinary.get())){ - // this is a Universal Binary, find a Mach-O for this architecture - uint32_t CPUType, CPUSubType; - const char *ArchFlag; - if (MachOOF->is64Bit()) { - const MachO::mach_header_64 H_64 = MachOOF->getHeader64(); - CPUType = H_64.cputype; - CPUSubType = H_64.cpusubtype; - } else { - const MachO::mach_header H = MachOOF->getHeader(); - CPUType = H.cputype; - CPUSubType = H.cpusubtype; - } - Triple T = MachOObjectFile::getArchTriple(CPUType, CPUSubType, nullptr, - &ArchFlag); - Expected<std::unique_ptr<MachOObjectFile>> MachDSYM = - UB->getObjectForArch(ArchFlag); - if (!MachDSYM) { - report_error(MachDSYM.takeError(), DSYMFile); - return; - } - - // We need to keep the Binary elive with the buffer - DbgObj = &*MachDSYM.get(); - DSYMBinary = std::move(*MachDSYM); - } - else { - WithColor::error(errs(), "llvm-objdump") - << DSYMFile << " is not a Mach-O or Universal file type.\n"; - return; - } } // Setup the DIContext |