[llvm] 072f518 - Improve error handling in llvm-dwarfdump.
Adrian Prantl via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 23 10:44:20 PDT 2021
Author: Adrian Prantl
Date: 2021-06-23T10:44:13-07:00
New Revision: 072f5180f2d33a3323a164fe19a7a477e93073a9
URL: https://github.com/llvm/llvm-project/commit/072f5180f2d33a3323a164fe19a7a477e93073a9
DIFF: https://github.com/llvm/llvm-project/commit/072f5180f2d33a3323a164fe19a7a477e93073a9.diff
LOG: Improve error handling in llvm-dwarfdump.
Without this patch we're only showing a generic error message derived
from the error code to the end user.
rdar://79378794
Differential Revision: https://reviews.llvm.org/D104483
Added:
llvm/test/tools/llvm-dwarfdump/X86/lc_malformed.test
Modified:
llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/lc_malformed.test b/llvm/test/tools/llvm-dwarfdump/X86/lc_malformed.test
new file mode 100644
index 0000000000000..eb3df27adf766
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/lc_malformed.test
@@ -0,0 +1,39 @@
+# RUN: yaml2obj %s | not llvm-dwarfdump --uuid - 2>&1 | FileCheck %s
+# CHECK: load command 0 filesize field in LC_SEGMENT_64 greater than vmsize field
+
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x01000007
+ cpusubtype: 0x00000003
+ filetype: 0x00000001
+ ncmds: 1
+ sizeofcmds: 24
+ flags: 0x00002000
+ reserved: 0x00000000
+LoadCommands:
+ - cmd: LC_SEGMENT_64
+ cmdsize: 232
+ segname: ''
+ vmaddr: 0
+ vmsize: 80
+ fileoff: 384
+ filesize: 81
+ maxprot: 7
+ initprot: 7
+ nsects: 1
+ flags: 0
+ Sections:
+ - sectname: __text
+ segname: __TEXT
+ addr: 0x0000000000000000
+ size: 15
+ offset: 0x00000180
+ align: 4
+ reloff: 0x00000000
+ nreloc: 0
+ flags: 0x80000400
+ reserved1: 0x00000000
+ reserved2: 0x00000000
+ reserved3: 0x00000000
+...
diff --git a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
index abb2961826810..889deb42c16a1 100644
--- a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
+++ b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
@@ -263,13 +263,17 @@ static cl::extrahelp
/// @}
//===----------------------------------------------------------------------===//
-static void error(StringRef Prefix, std::error_code EC) {
- if (!EC)
+static void error(StringRef Prefix, Error Err) {
+ if (!Err)
return;
- WithColor::error() << Prefix << ": " << EC.message() << "\n";
+ WithColor::error() << Prefix << ": " << toString(std::move(Err)) << "\n";
exit(1);
}
+static void error(StringRef Prefix, std::error_code EC) {
+ error(Prefix, errorCodeToError(EC));
+}
+
static DIDumpOptions getDumpOpts(DWARFContext &C) {
DIDumpOptions DumpOpts;
DumpOpts.DumpType = DumpType;
@@ -508,13 +512,13 @@ static bool handleArchive(StringRef Filename, Archive &Arch,
Error Err = Error::success();
for (auto Child : Arch.children(Err)) {
auto BuffOrErr = Child.getMemoryBufferRef();
- error(Filename, errorToErrorCode(BuffOrErr.takeError()));
+ error(Filename, BuffOrErr.takeError());
auto NameOrErr = Child.getName();
- error(Filename, errorToErrorCode(NameOrErr.takeError()));
+ error(Filename, NameOrErr.takeError());
std::string Name = (Filename + "(" + NameOrErr.get() + ")").str();
Result &= handleBuffer(Name, BuffOrErr.get(), HandleObj, OS);
}
- error(Filename, errorToErrorCode(std::move(Err)));
+ error(Filename, std::move(Err));
return Result;
}
@@ -522,7 +526,7 @@ static bool handleArchive(StringRef Filename, Archive &Arch,
static bool handleBuffer(StringRef Filename, MemoryBufferRef Buffer,
HandlerFn HandleObj, raw_ostream &OS) {
Expected<std::unique_ptr<Binary>> BinOrErr = object::createBinary(Buffer);
- error(Filename, errorToErrorCode(BinOrErr.takeError()));
+ error(Filename, BinOrErr.takeError());
bool Result = true;
auto RecoverableErrorHandler = [&](Error E) {
@@ -553,7 +557,7 @@ static bool handleBuffer(StringRef Filename, MemoryBufferRef Buffer,
} else
consumeError(MachOOrErr.takeError());
if (auto ArchiveOrErr = ObjForArch.getAsArchive()) {
- error(ObjName, errorToErrorCode(ArchiveOrErr.takeError()));
+ error(ObjName, ArchiveOrErr.takeError());
if (!handleArchive(ObjName, *ArchiveOrErr.get(), HandleObj, OS))
Result = false;
continue;
More information about the llvm-commits
mailing list