diff options
author | Kevin Enderby <enderby@apple.com> | 2016-08-02 22:58:55 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2016-08-02 22:58:55 +0000 |
commit | 395cc09444b114bfb0f860bcd5c3d0365e7ca18c (patch) | |
tree | 4226a5b54049be8f2c34517cc70b6c84bb52535c /llvm/tools/llvm-objdump/MachODump.cpp | |
parent | ee0627fd1b9f89d6320b186f038bf14fbf6e8468 (diff) | |
download | llvm-395cc09444b114bfb0f860bcd5c3d0365e7ca18c.zip llvm-395cc09444b114bfb0f860bcd5c3d0365e7ca18c.tar.gz llvm-395cc09444b114bfb0f860bcd5c3d0365e7ca18c.tar.bz2 |
More fixes to get good error messages for bad archives.
Fixed the last incorrect uses of llvm_unreachable() in the code
which were actually just cases of errors in the input Archives.
llvm-svn: 277540
Diffstat (limited to 'llvm/tools/llvm-objdump/MachODump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 8d924e5..b5e7a06 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -1477,7 +1477,10 @@ static void printArchiveChild(StringRef Filename, const Archive::Child &C, StringRef ArchitectureName = StringRef()) { if (print_offset) outs() << C.getChildOffset() << "\t"; - sys::fs::perms Mode = C.getAccessMode(); + Expected<sys::fs::perms> ModeOrErr = C.getAccessMode(); + if (!ModeOrErr) + report_error(Filename, C, ModeOrErr.takeError(), ArchitectureName); + sys::fs::perms Mode = ModeOrErr.get(); if (verbose) { // FIXME: this first dash, "-", is for (Mode & S_IFMT) == S_IFREG. // But there is nothing in sys::fs::perms for S_IFMT or S_IFREG. @@ -1495,9 +1498,15 @@ static void printArchiveChild(StringRef Filename, const Archive::Child &C, outs() << format("0%o ", Mode); } - unsigned UID = C.getUID(); + Expected<unsigned> UIDOrErr = C.getUID(); + if (!UIDOrErr) + report_error(Filename, C, UIDOrErr.takeError(), ArchitectureName); + unsigned UID = UIDOrErr.get(); outs() << format("%3d/", UID); - unsigned GID = C.getGID(); + Expected<unsigned> GIDOrErr = C.getGID(); + if (!GIDOrErr) + report_error(Filename, C, GIDOrErr.takeError(), ArchitectureName); + unsigned GID = GIDOrErr.get(); outs() << format("%-3d ", GID); Expected<uint64_t> Size = C.getRawSize(); if (!Size) @@ -1508,7 +1517,8 @@ static void printArchiveChild(StringRef Filename, const Archive::Child &C, if (verbose) { unsigned Seconds; if (RawLastModified.getAsInteger(10, Seconds)) - outs() << "(date: \"%s\" contains non-decimal chars) " << RawLastModified; + outs() << "(date: \"" << RawLastModified + << "\" contains non-decimal chars) "; else { // Since cime(3) returns a 26 character string of the form: // "Sun Sep 16 01:03:52 1973\n\0" |