[llvm] r367776 - [llvm-objdump] Re-commit r367284.
Michael Pozulp via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 4 21:40:56 PDT 2019
Hi Doug,
Thanks letting me know - I'm looking at it now. Once I have a fix is there
a way to run the test before committing to make sure it succeeds? I'd like
to be able to reproduce the problem so that I can test fixes to see if they
fix the problem. I'm running Arch Linux so I might have to come up with
something creative to reproduce a Windows file path and induce the failure.
I'm open to suggestions if you have any!
Best,
Mike
On Sun, Aug 4, 2019 at 8:39 PM <douglas.yung at sony.com> wrote:
> Hi Michael,
>
> 2 tests you modified in this commit are failing when run on a Windows bot.
> It seems to be due to the [[FILE]] substitution escaping characters and
> then expecting the output generated to match it which it does not since
> things are then doubly escaped. Can you take a look and try to fix this to
> get the bot green again?
>
>
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/27368
>
> FAIL: LLVM :: tools/llvm-objdump/X86/source-interleave-missing-source.test
> (48999 of 51701)
> ******************** TEST 'LLVM ::
> tools/llvm-objdump/X86/source-interleave-missing-source.test' FAILED
> ********************
> Script:
> --
> : 'RUN: at line 4'; sed -e
> "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp,g"
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll
> >
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll
> : 'RUN: at line 5'; sed -e
> "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.src/test/tools/llvm-objdump/X86/Inputs,g"
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll
> >
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll
> : 'RUN: at line 7';
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe
> -o
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o
> -filetype=obj -mtriple=x86_64-pc-linux
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll
> : 'RUN: at line 8';
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe
> -o
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o
> -filetype=obj -mtriple=x86_64-pc-linux
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll
> : 'RUN: at line 10';
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe
> --source
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o
> 2>
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e
> |
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test
> --check-prefixes=CHECK --implicit-check-not='main()'
> : 'RUN: at line 11';
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe
> --source
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o
> |
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test
> --check-prefixes=CHECK,SOURCE
> : 'RUN: at line 12';
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test
> --input-file
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e
> --check-prefixes=WARN
> -DFILE=C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp/source-interleave-x86_64.c
> --
> Exit Code: 1
>
> Command Output (stdout):
> --
> $ ":" "RUN: at line 4"
> $ "sed" "-e"
> "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp,g"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll"
> $ ":" "RUN: at line 5"
> $ "sed" "-e"
> "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.src/test/tools/llvm-objdump/X86/Inputs,g"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll"
> $ ":" "RUN: at line 7"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe"
> "-o"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o"
> "-filetype=obj" "-mtriple=x86_64-pc-linux"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll"
> $ ":" "RUN: at line 8"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe"
> "-o"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o"
> "-filetype=obj" "-mtriple=x86_64-pc-linux"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll"
> $ ":" "RUN: at line 10"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe"
> "--source"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test"
> "--check-prefixes=CHECK" "--implicit-check-not=main()"
> $ ":" "RUN: at line 11"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe"
> "--source"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test"
> "--check-prefixes=CHECK,SOURCE"
> $ ":" "RUN: at line 12"
> $
> "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test"
> "--input-file"
> "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e"
> "--check-prefixes=WARN"
> "-DFILE=C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp/source-interleave-x86_64.c"
> # command stderr:
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test:14:9:
> error: WARN: expected string not found in input
>
> # WARN: warning: failed to find source [[FILE]]
>
> ^
>
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:1:
> note: scanning from here
>
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe:
> warning: failed to find source
> C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c
>
> ^
>
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:1:
> note: with "FILE" equal to
> "C:\\\\ps4-buildslave2\\\\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\\\\llvm\\.obj\\\\test\\\\tools\\\\llvm-objdump\\\\X86\\\\Output\\\\source-interleave-missing-source\\.test\\.tmp/source-interleave-x86_64\\.c"
>
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe:
> warning: failed to find source
> C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c
>
> ^
>
> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:100:
> note: possible intended match here
>
> c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe:
> warning: failed to find source
> C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c
>
>
> ^
>
>
> error: command failed with exit status: 1
>
> Douglas Yung
>
> -----Original Message-----
> From: llvm-commits <llvm-commits-bounces at lists.llvm.org> On Behalf Of
> Michael Pozulp via llvm-commits
> Sent: Saturday, August 3, 2019 23:04
> To: llvm-commits at lists.llvm.org
> Subject: [llvm] r367776 - [llvm-objdump] Re-commit r367284.
>
> Author: pozulp
> Date: Sat Aug 3 23:04:00 2019
> New Revision: 367776
>
> URL: http://llvm.org/viewvc/llvm-project?rev=367776&view=rev
> Log:
> [llvm-objdump] Re-commit r367284.
>
> Add warning messages if disassembly + source for problematic inputs
>
> Summary: Addresses https://bugs.llvm.org/show_bug.cgi?id=41905
>
> Reviewers: jhenderson, rupprecht, grimar
>
> Reviewed By: jhenderson, grimar
>
> Subscribers: hiraditya, llvm-commits
>
> Tags: #llvm
>
> Differential Revision: https://reviews.llvm.org/D62462
>
> Modified:
> llvm/trunk/include/llvm/DebugInfo/DIContext.h
> llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp
> llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp
>
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test
>
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test
>
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test
> llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp
> llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
> llvm/trunk/tools/llvm-objdump/llvm-objdump.h
> llvm/trunk/tools/llvm-xray/func-id-helper.cpp
>
> Modified: llvm/trunk/include/llvm/DebugInfo/DIContext.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/DIContext.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/DIContext.h Sat Aug 3 23:04:00
> +++ 2019
> @@ -28,6 +28,10 @@ namespace llvm {
>
> /// A format-neutral container for source line information.
> struct DILineInfo {
> + // DILineInfo contains "<invalid>" for function/filename it cannot
> fetch.
> + static constexpr const char *const BadString = "<invalid>"; // Use
> + "??" instead of "<invalid>" to make our output closer to addr2line.
> + static constexpr const char *const Addr2LineBadString = "??";
> std::string FileName;
> std::string FunctionName;
> Optional<StringRef> Source;
> @@ -38,7 +42,7 @@ struct DILineInfo {
> // DWARF-specific.
> uint32_t Discriminator = 0;
>
> - DILineInfo() : FileName("<invalid>"), FunctionName("<invalid>") {}
> + DILineInfo() : FileName(BadString), FunctionName(BadString) {}
>
> bool operator==(const DILineInfo &RHS) const {
> return Line == RHS.Line && Column == RHS.Column && @@ -61,9 +65,9 @@
> struct DILineInfo {
>
> void dump(raw_ostream &OS) {
> OS << "Line info: ";
> - if (FileName != "<invalid>")
> + if (FileName != BadString)
> OS << "file '" << FileName << "', ";
> - if (FunctionName != "<invalid>")
> + if (FunctionName != BadString)
> OS << "function '" << FunctionName << "', ";
> OS << "line " << Line << ", ";
> OS << "column " << Column << ", ";
> @@ -109,7 +113,7 @@ struct DIGlobal {
> uint64_t Start = 0;
> uint64_t Size = 0;
>
> - DIGlobal() : Name("<invalid>") {}
> + DIGlobal() : Name(DILineInfo::BadString) {}
> };
>
> struct DILocal {
>
> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp Sat Aug 3 23:04:00
> +++ 2019
> @@ -1118,8 +1118,8 @@ DILineInfoTable DWARFContext::getLineInf
> if (!CU)
> return Lines;
>
> - std::string FunctionName = "<invalid>";
> uint32_t StartLine = 0;
> + std::string FunctionName(DILineInfo::BadString);
> getFunctionNameAndStartLineForAddress(CU, Address.Address, Spec.FNKind,
> FunctionName, StartLine);
>
>
> Modified: llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp Sat Aug 3 23:04:00
> +++ 2019
> @@ -30,11 +30,6 @@
> namespace llvm {
> namespace symbolize {
>
> -// By default, DILineInfo contains "<invalid>" for function/filename it
> -// cannot fetch. We replace it to "??" to make our output closer to
> addr2line.
> -static const char kDILineInfoBadString[] = "<invalid>"; -static const
> char kBadString[] = "??";
> -
> // Prints source code around in the FileName the Line.
> void DIPrinter::printContext(const std::string &FileName, int64_t Line) {
> if (PrintSourceContext <= 0)
> @@ -68,16 +63,16 @@ void DIPrinter::printContext(const std::
> void DIPrinter::print(const DILineInfo &Info, bool Inlined) {
> if (PrintFunctionNames) {
> std::string FunctionName = Info.FunctionName;
> - if (FunctionName == kDILineInfoBadString)
> - FunctionName = kBadString;
> + if (FunctionName == DILineInfo::BadString)
> + FunctionName = DILineInfo::Addr2LineBadString;
>
> StringRef Delimiter = PrintPretty ? " at " : "\n";
> StringRef Prefix = (PrintPretty && Inlined) ? " (inlined by) " : "";
> OS << Prefix << FunctionName << Delimiter;
> }
> std::string Filename = Info.FileName;
> - if (Filename == kDILineInfoBadString)
> - Filename = kBadString;
> + if (Filename == DILineInfo::BadString)
> + Filename = DILineInfo::Addr2LineBadString;
> else if (Basenames)
> Filename = llvm::sys::path::filename(Filename);
> if (!Verbose) {
> @@ -115,8 +110,8 @@ DIPrinter &DIPrinter::operator<<(const D
>
> DIPrinter &DIPrinter::operator<<(const DIGlobal &Global) {
> std::string Name = Global.Name;
> - if (Name == kDILineInfoBadString)
> - Name = kBadString;
> + if (Name == DILineInfo::BadString)
> + Name = DILineInfo::Addr2LineBadString;
> OS << Name << "\n";
> OS << Global.Start << " " << Global.Size << "\n";
> return *this;
>
> Modified:
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test
> (original)
> +++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-sou
> +++ rce.test Sat Aug 3 23:04:00 2019
> @@ -1,5 +1,5 @@
> ## Test llvm-objdump's --source behaviour when a line number is greater
> than the -## file length.
> +## file length and ensure that we emit a warning.
>
> # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll
> > %t.ll # RUN: sed -e "s,line: 7,line: 9999,g" %t.ll > %t2.ll @@ -8,9
> +8,11 @@ # RUN: llc -o %t2.o -filetype=obj -mtriple=x86_64-pc-linux %t2.ll
>
> # RUN: llvm-objdump --source %t.o | FileCheck %s
> --check-prefixes=CHECK,GOOD -# RUN: llvm-objdump --source %t2.o | FileCheck
> %s --implicit-check-not="int *b = &a;"
> +# RUN: llvm-objdump --source %t2.o 2> %t2.e | FileCheck %s
> --check-prefixes=CHECK --implicit-check-not="int *b = &a;"
> +# RUN: FileCheck %s --input-file %t2.e --check-prefixes=WARN
> +-DFILE=%p/Inputs/source-interleave-x86_64.c
>
> # CHECK: main:
> # CHECK-NEXT: ; int main() {
> +# WARN: warning: debug info line number 9999 exceeds the number of
> lines in [[FILE]]
> # GOOD: ; int *b = &a;
> # CHECK: ; return *b + foo();
>
> Modified:
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test
> (original)
> +++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-sou
> +++ rce.test Sat Aug 3 23:04:00 2019
> @@ -1,5 +1,5 @@
> ## Test that if the source cannot be found that disassembly is still
> printed, -## and that no source is printed.
> +## that no source is printed, and that we emit a warning.
>
> # RUN: sed -e "s,SRC_COMPDIR,%/t,g" %p/Inputs/source-interleave.ll >
> %t.ll # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g"
> %p/Inputs/source-interleave.ll > %t2.ll @@ -7,9 +7,11 @@ # RUN: llc -o
> %t.o -filetype=obj -mtriple=x86_64-pc-linux %t.ll # RUN: llc -o %t2.o
> -filetype=obj -mtriple=x86_64-pc-linux %t2.ll
>
> -# RUN: llvm-objdump --source %t.o | FileCheck %s
> --implicit-check-not='main()'
> +# RUN: llvm-objdump --source %t.o 2> %t.e | FileCheck %s
> --check-prefixes=CHECK --implicit-check-not='main()'
> # RUN: llvm-objdump --source %t2.o | FileCheck %s
> --check-prefixes=CHECK,SOURCE
> +# RUN: FileCheck %s --input-file %t.e --check-prefixes=WARN
> +-DFILE=%t/source-interleave-x86_64.c
>
> +# WARN: warning: failed to find source [[FILE]]
> # CHECK: 0000000000000010 main:
> # SOURCE-NEXT: ; int main() {
> # CHECK-NEXT: 10: 55 pushq %rbp
>
> Modified:
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test
> (original)
> +++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-in
> +++ fo.test Sat Aug 3 23:04:00 2019
> @@ -1,13 +1,15 @@
> ## Test that if an object has no debug information, only the disassembly
> is -## printed when --source is specified.
> +## printed when --source is specified, and that we emit a warning.
>
> # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll
> > %t.ll # RUN: llc -o %t.o -filetype=obj -mtriple=x86_64-pc-linux %t.ll #
> RUN: llvm-objcopy --strip-debug %t.o %t2.o
>
> # RUN: llvm-objdump --source %t.o | FileCheck %s
> --check-prefixes=CHECK,SOURCE -# RUN: llvm-objdump --source %t2.o |
> FileCheck %s --implicit-check-not='main()'
> +# RUN: llvm-objdump --source %t2.o 2> %t2.e | FileCheck %s
> --check-prefixes=CHECK --implicit-check-not='main()'
> +# RUN: FileCheck %s --input-file %t2.e --check-prefixes=WARN
> +-DFILE=%t2.o
>
> +# WARN: warning: failed to parse debug information for [[FILE]]
> # CHECK: 0000000000000010 main:
> # SOURCE-NEXT: ; int main() {
> # CHECK-NEXT: 10: 55 pushq %rbp
>
> Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp (original)
> +++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp Sat Aug 3
> +++ 23:04:00 2019
> @@ -520,7 +520,7 @@ void FileAnalysis::parseSectionContents(
> continue;
> }
>
> - if (LineInfo->FileName == "<invalid>")
> + if (LineInfo->FileName == DILineInfo::BadString)
> continue;
> }
>
>
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Sat Aug 3 23:04:00
> +++ 2019
> @@ -51,6 +51,7 @@
> #include "llvm/Support/Errc.h"
> #include "llvm/Support/FileSystem.h"
> #include "llvm/Support/Format.h"
> +#include "llvm/Support/FormatVariadic.h"
> #include "llvm/Support/GraphWriter.h"
> #include "llvm/Support/Host.h"
> #include "llvm/Support/InitLLVM.h"
> @@ -381,12 +382,7 @@ LLVM_ATTRIBUTE_NORETURN void error(Twine
> exit(1);
> }
>
> -void warn(StringRef Message) {
> - WithColor::warning(errs(), ToolName) << Message << ".\n";
> - errs().flush();
> -}
> -
> -static void warn(Twine Message) {
> +void warn(Twine Message) {
> // Output order between errs() and outs() matters especially for archive
> // files where the output is per member object.
> outs().flush();
> @@ -548,17 +544,22 @@ protected:
> DILineInfo OldLineInfo;
> const ObjectFile *Obj = nullptr;
> std::unique_ptr<symbolize::LLVMSymbolizer> Symbolizer;
> - // File name to file contents of source
> + // File name to file contents of source.
> std::unordered_map<std::string, std::unique_ptr<MemoryBuffer>>
> SourceCache;
> - // Mark the line endings of the cached source
> + // Mark the line endings of the cached source.
> std::unordered_map<std::string, std::vector<StringRef>> LineCache;
> + // Keep track of missing sources.
> + StringSet<> MissingSources;
> + // Only emit 'no debug info' warning once.
> + bool WarnedNoDebugInfo;
>
> private:
> bool cacheSource(const DILineInfo& LineInfoFile);
>
> public:
> SourcePrinter() = default;
> - SourcePrinter(const ObjectFile *Obj, StringRef DefaultArch) : Obj(Obj) {
> + SourcePrinter(const ObjectFile *Obj, StringRef DefaultArch)
> + : Obj(Obj), WarnedNoDebugInfo(false) {
> symbolize::LLVMSymbolizer::Options SymbolizerOpts;
> SymbolizerOpts.PrintFunctions =
> DILineInfoSpecifier::FunctionNameKind::None;
> SymbolizerOpts.Demangle = false;
> @@ -568,6 +569,7 @@ public:
> virtual ~SourcePrinter() = default;
> virtual void printSourceLine(raw_ostream &OS,
> object::SectionedAddress Address,
> + StringRef ObjectFilename,
> StringRef Delimiter = "; "); };
>
> @@ -577,8 +579,11 @@ bool SourcePrinter::cacheSource(const DI
> Buffer = MemoryBuffer::getMemBuffer(*LineInfo.Source);
> } else {
> auto BufferOrError = MemoryBuffer::getFile(LineInfo.FileName);
> - if (!BufferOrError)
> + if (!BufferOrError) {
> + if (MissingSources.insert(LineInfo.FileName).second)
> + warn("failed to find source " + LineInfo.FileName);
> return false;
> + }
> Buffer = std::move(*BufferOrError);
> }
> // Chomp the file to get lines
> @@ -599,20 +604,33 @@ bool SourcePrinter::cacheSource(const DI
>
> void SourcePrinter::printSourceLine(raw_ostream &OS,
> object::SectionedAddress Address,
> + StringRef ObjectFilename,
> StringRef Delimiter) {
> if (!Symbolizer)
> return;
>
> DILineInfo LineInfo = DILineInfo();
> auto ExpectedLineInfo = Symbolizer->symbolizeCode(*Obj, Address);
> + std::string ErrorMessage;
> if (!ExpectedLineInfo)
> - consumeError(ExpectedLineInfo.takeError());
> + ErrorMessage = toString(ExpectedLineInfo.takeError());
> else
> LineInfo = *ExpectedLineInfo;
>
> - if ((LineInfo.FileName == "<invalid>") || LineInfo.Line == 0 ||
> - ((OldLineInfo.Line == LineInfo.Line) &&
> - (OldLineInfo.FileName == LineInfo.FileName)))
> + if (LineInfo.FileName == DILineInfo::BadString) {
> + if (!WarnedNoDebugInfo) {
> + std::string Warning =
> + "failed to parse debug information for " + ObjectFilename.str();
> + if (!ErrorMessage.empty())
> + Warning += ": " + ErrorMessage;
> + warn(Warning);
> + WarnedNoDebugInfo = true;
> + }
> + return;
> + }
> +
> + if (LineInfo.Line == 0 || ((OldLineInfo.Line == LineInfo.Line) &&
> + (OldLineInfo.FileName ==
> + LineInfo.FileName)))
> return;
>
> if (PrintLines)
> @@ -623,8 +641,12 @@ void SourcePrinter::printSourceLine(raw_
> return;
> auto LineBuffer = LineCache.find(LineInfo.FileName);
> if (LineBuffer != LineCache.end()) {
> - if (LineInfo.Line > LineBuffer->second.size())
> + if (LineInfo.Line > LineBuffer->second.size()) {
> + warn(formatv(
> + "debug info line number {0} exceeds the number of lines in
> {1}",
> + LineInfo.Line, LineInfo.FileName));
> return;
> + }
> // Vector begins at 0, line numbers are non-zero
> OS << Delimiter << LineBuffer->second[LineInfo.Line - 1] << '\n';
> }
> @@ -663,10 +685,10 @@ public:
> ArrayRef<uint8_t> Bytes,
> object::SectionedAddress Address, raw_ostream
> &OS,
> StringRef Annot, MCSubtargetInfo const &STI,
> - SourcePrinter *SP,
> + SourcePrinter *SP, StringRef ObjectFilename,
> std::vector<RelocationRef> *Rels = nullptr) {
> if (SP && (PrintSource || PrintLines))
> - SP->printSourceLine(OS, Address);
> + SP->printSourceLine(OS, Address, ObjectFilename);
>
> size_t Start = OS.tell();
> if (!NoLeadingAddr)
> @@ -707,9 +729,10 @@ public:
> void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t>
> Bytes,
> object::SectionedAddress Address, raw_ostream &OS,
> StringRef Annot, MCSubtargetInfo const &STI,
> SourcePrinter *SP,
> + StringRef ObjectFilename,
> std::vector<RelocationRef> *Rels) override {
> if (SP && (PrintSource || PrintLines))
> - SP->printSourceLine(OS, Address, "");
> + SP->printSourceLine(OS, Address, ObjectFilename, "");
> if (!MI) {
> printLead(Bytes, Address.Address, OS);
> OS << " <unknown>";
> @@ -746,7 +769,7 @@ public:
> OS << Separator;
> Separator = "\n";
> if (SP && (PrintSource || PrintLines))
> - SP->printSourceLine(OS, Address, "");
> + SP->printSourceLine(OS, Address, ObjectFilename, "");
> printLead(Bytes, Address.Address, OS);
> OS << Preamble;
> Preamble = " ";
> @@ -776,9 +799,10 @@ public:
> void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t>
> Bytes,
> object::SectionedAddress Address, raw_ostream &OS,
> StringRef Annot, MCSubtargetInfo const &STI,
> SourcePrinter *SP,
> + StringRef ObjectFilename,
> std::vector<RelocationRef> *Rels) override {
> if (SP && (PrintSource || PrintLines))
> - SP->printSourceLine(OS, Address);
> + SP->printSourceLine(OS, Address, ObjectFilename);
>
> if (MI) {
> SmallString<40> InstStr;
> @@ -827,9 +851,10 @@ public:
> void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t>
> Bytes,
> object::SectionedAddress Address, raw_ostream &OS,
> StringRef Annot, MCSubtargetInfo const &STI,
> SourcePrinter *SP,
> + StringRef ObjectFilename,
> std::vector<RelocationRef> *Rels) override {
> if (SP && (PrintSource || PrintLines))
> - SP->printSourceLine(OS, Address);
> + SP->printSourceLine(OS, Address, ObjectFilename);
> if (!NoLeadingAddr)
> OS << format("%8" PRId64 ":", Address.Address / 8);
> if (!NoShowRawInsn) {
> @@ -1377,10 +1402,10 @@ static void disassembleObject(const Targ
> if (Size == 0)
> Size = 1;
>
> - PIP.printInst(
> - *IP, Disassembled ? &Inst : nullptr, Bytes.slice(Index, Size),
> - {SectionAddr + Index + VMAAdjustment, Section.getIndex()},
> outs(),
> - "", *STI, &SP, &Rels);
> + PIP.printInst(*IP, Disassembled ? &Inst : nullptr,
> + Bytes.slice(Index, Size),
> + {SectionAddr + Index + VMAAdjustment,
> Section.getIndex()},
> + outs(), "", *STI, &SP, Obj->getFileName(),
> + &Rels);
> outs() << CommentStream.str();
> Comments.clear();
>
>
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.h?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.h (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.h Sat Aug 3 23:04:00
> +++ 2019
> @@ -129,7 +129,7 @@ void printSectionHeaders(const object::O void
> printSectionContents(const object::ObjectFile *O); void
> printSymbolTable(const object::ObjectFile *O, StringRef ArchiveName,
> StringRef ArchitectureName = StringRef()); -void
> warn(StringRef Message);
> +void warn(Twine Message);
> LLVM_ATTRIBUTE_NORETURN void error(Twine Message);
> LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message);
> LLVM_ATTRIBUTE_NORETURN void report_error(Error E, StringRef File);
>
> Modified: llvm/trunk/tools/llvm-xray/func-id-helper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-xray/func-id-helper.cpp?rev=367776&r1=367775&r2=367776&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-xray/func-id-helper.cpp (original)
> +++ llvm/trunk/tools/llvm-xray/func-id-helper.cpp Sat Aug 3 23:04:00
> +++ 2019
> @@ -36,7 +36,7 @@ std::string FuncIdConversionHelper::Symb
> ModuleAddress.SectionIndex = object::SectionedAddress::UndefSection;
> if (auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap,
> ModuleAddress)) {
> auto &DI = *ResOrErr;
> - if (DI.FunctionName == "<invalid>")
> + if (DI.FunctionName == DILineInfo::BadString)
> F << "@(" << std::hex << It->second << ")";
> else
> F << DI.FunctionName;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190804/4ff15df3/attachment.html>
More information about the llvm-commits
mailing list