From 506f89ce914e99233a66fee8c1ec070b668d1759 Mon Sep 17 00:00:00 2001 From: Georgii Rymar Date: Fri, 28 Aug 2020 13:33:20 +0300 Subject: [PATCH] [llvm-readobj/elf] - Don't fail when dumping an archive with a member that can't be recognized. Imagine we have an archive that has 3 objects in the following order: , and . Currently llvm-readelf/obj report an error and stops dumping in the middle. This patch changes the error reported to warning. Differential revision: https://reviews.llvm.org/D86771 --- llvm/test/tools/llvm-readobj/archive.test | 16 ++++++++++++++++ llvm/tools/llvm-readobj/llvm-readobj.cpp | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/llvm/test/tools/llvm-readobj/archive.test b/llvm/test/tools/llvm-readobj/archive.test index a51c2d6..0cf7e06 100644 --- a/llvm/test/tools/llvm-readobj/archive.test +++ b/llvm/test/tools/llvm-readobj/archive.test @@ -1,3 +1,5 @@ +## Test how we dump archives. + ## Show that dumping operations apply to all members in an archive. # RUN: rm -f %t.a @@ -82,3 +84,17 @@ header: Characteristics: [ ] sections: [] symbols: [] + +## Here we test that we report a warning and continue dumping when an archive contains +## a unrecognized object. We place a dummy archive to another archive in the middle, +## so that it is placed between two valid objects. + +# RUN: rm -f %t2.a +# RUN: llvm-ar rc %t.dir/broken.a %t.dir/trivial.obj.elf-x86-64 +# RUN: llvm-ar qc %t2.a %t.dir/trivial.obj.elf-x86-64 %t.dir/broken.a %t.dir/trivial.obj.elf-x86-64 +# RUN: llvm-readobj --all %t2.a 2>&1 | FileCheck %s -DARFILE="%t2.a" --check-prefix=BROKEN +# RUN: llvm-readelf --all %t2.a 2>&1 | FileCheck %s -DARFILE="%t2.a" --check-prefix=BROKEN + +# BROKEN: File: [[ARFILE]](trivial.obj.elf-x86-64) +# BROKEN: warning: '[[ARFILE]]': Unrecognized file type. +# BROKEN: File: [[ARFILE]](trivial.obj.elf-x86-64) diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index 6c392be..49fa0eb 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -584,8 +584,8 @@ static void dumpArchive(const Archive *Arc, ScopedPrinter &Writer) { else if (COFFImportFile *Imp = dyn_cast(&*ChildOrErr.get())) dumpCOFFImportFile(Imp, Writer); else - reportError(errorCodeToError(readobj_error::unrecognized_file_format), - Arc->getFileName()); + reportWarning(errorCodeToError(readobj_error::unrecognized_file_format), + Arc->getFileName()); } if (Err) reportError(std::move(Err), Arc->getFileName()); -- 2.7.4