summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/llvm-readobj.cpp
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2019-08-08 07:17:35 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2019-08-08 07:17:35 +0000
commit67ea32a00709f5f2d999002d747c58ac357223fd (patch)
tree997907a1a6b02d74da239524972b3beacef356b7 /llvm/tools/llvm-readobj/llvm-readobj.cpp
parent6fd13f0849573aeec26f28ab0927eea0b5a7ccb9 (diff)
downloadbcm5719-llvm-67ea32a00709f5f2d999002d747c58ac357223fd.tar.gz
bcm5719-llvm-67ea32a00709f5f2d999002d747c58ac357223fd.zip
[llvm-readobj/libObject] - Introduce a custom warning handler for `ELFFile<ELFT>` methods.
Currently, we have a code duplication in llvm-readobj which was introduced in D63266. The duplication was introduced to allow llvm-readobj to dump the partially broken object. Methods in ELFFile<ELFT> perform a strict validation of the inputs, what is itself good, but not for dumper tools, that might want to dump the information, even if some pieces are broken/unexpected. This patch introduces a warning handler which can be passed to ELFFile<ELFT> methods and can allow skipping the non-critical errors when needed/possible. For demonstration, I removed the duplication from llvm-readobj and implemented a warning using the new custom warning handler. It also deduplicates the strings printed, making the output less verbose. Differential revision: https://reviews.llvm.org/D65515 llvm-svn: 368260
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp
index bb629c28cf1..f607490e8f8 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -394,6 +394,12 @@ void reportWarning(Twine Msg) {
WithColor::warning(errs()) << Msg << "\n";
}
+void reportWarning(StringRef Input, Error Err) {
+ if (Input == "-")
+ Input = "<stdin>";
+ warn(createFileError(Input, std::move(Err)));
+}
+
void warn(Error Err) {
handleAllErrors(std::move(Err), [&](const ErrorInfoBase &EI) {
reportWarning(EI.message());
OpenPOWER on IntegriCloud