From a7b237ffdfa19a5a0a8c95030612c8ae0d268140 Mon Sep 17 00:00:00 2001 From: Yuanfang Chen Date: Tue, 9 Jul 2019 21:53:33 +0000 Subject: [PATCH] [llvm-objdump] Keep warning for --disassemble-functions in correct order. relative to normal output when dumping archive files. prepare for PR35351. Reviewers: jhenderson, grimar, MaskRay, rupprecht Reviewed by: MaskRay, jhenderson Differential Revision: https://reviews.llvm.org/D64165 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@365564 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/llvm-objdump/X86/warn-missing-disasm-func.test | 12 +++++++++++- tools/llvm-objdump/llvm-objdump.cpp | 6 +++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test b/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test index 14d18a3feea..ec7d0302a71 100644 --- a/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test +++ b/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test @@ -1,5 +1,10 @@ ## Warn if --disassemble-functions specifies an unknown symbol. -# RUN: yaml2obj %s | llvm-objdump - --disassemble-functions=foo 2>&1 | FileCheck %s + +# RUN: yaml2obj -o %t.o %s +# RUN: rm -f %t.a +# RUN: llvm-ar qc %t.a %t.o %t.o +# RUN: llvm-objdump --disassemble-functions=foo %t.o 2>&1 | FileCheck %s +# RUN: llvm-objdump --disassemble-functions=foo %t.a 2>&1 | FileCheck %s --check-prefix=MULTI --- !ELF FileHeader: @@ -9,3 +14,8 @@ FileHeader: Machine: EM_X86_64 # CHECK: warning: failed to disassemble missing function foo + +# MULTI: file format ELF64-x86-64 +# MULTI: warning: failed to disassemble missing function foo +# MULTI: file format ELF64-x86-64 +# MULTI: warning: failed to disassemble missing function foo diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 8c0423826aa..58981203c59 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -386,8 +386,12 @@ void warn(StringRef Message) { errs().flush(); } -void warn(Twine Message) { +static void warn(Twine Message) { + // Output order between errs() and outs() matters especially for archive + // files where the output is per member object. + outs().flush(); WithColor::warning(errs(), ToolName) << Message << "\n"; + errs().flush(); } LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message) { -- 2.11.0