diff --git a/llvm/test/tools/llvm-symbolizer/invalid-input-address.test b/llvm/test/tools/llvm-symbolizer/invalid-input-address.test --- a/llvm/test/tools/llvm-symbolizer/invalid-input-address.test +++ b/llvm/test/tools/llvm-symbolizer/invalid-input-address.test @@ -1,7 +1,39 @@ # Use address that can't fit in a 64-bit number. Show that llvm-symbolizer # simply echoes it as per other malformed input addresses. -RUN: llvm-symbolizer --obj=addr.exe 0x10000000000000000 | FileCheck %s +RUN: echo '"some text"' 0x40054d '"some text2"' > %t.rsp +RUN: echo -e 'some text\n0x40054d\nsome text2\n' > %t.inp -CHECK-NOT: {{.}} -CHECK: 0x10000000000000000 -CHECK-NOT: {{.}} +RUN: llvm-symbolizer --obj=addr.exe 0x10000000000000000 | FileCheck -check-prefix=LARGE_ADDR %s + +RUN: llvm-symbolizer -print-address -obj=%p/Inputs/addr.exe < %t.inp | FileCheck %s +RUN: llvm-symbolizer -print-address -obj=%p/Inputs/addr.exe "some text" 0x40054d "some text2" | FileCheck %s +RUN: llvm-symbolizer -print-address -obj=%p/Inputs/addr.exe @%t.rsp | FileCheck %s + +RUN: llvm-addr2line -obj=%p/Inputs/addr.exe < %t.inp | FileCheck -check-prefix=A2L %s +RUN: llvm-addr2line -obj=%p/Inputs/addr.exe "some text" 0x40054d "some text2" | FileCheck -check-prefix=A2L %s +RUN: llvm-addr2line -obj=%p/Inputs/addr.exe @%t.rsp | FileCheck -check-prefix=A2L %s + +LARGE_ADDR-NOT: {{.}} +LARGE_ADDR: 0x10000000000000000 +LARGE_ADDR-NOT: {{.}} + +CHECK: some text +CHECK-NEXT: 0x40054d +CHECK-NEXT: inctwo +CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:3:3 +CHECK-NEXT: inc +CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:7:0 +CHECK-NEXT: main +CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:14:0 +CHECK-EMPTY: +CHECK-NEXT: some text2 + +A2L: some text +A2L_NEXT: 0x40054d +A2L_NEXT: inctwo +A2L-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:3{{$}} +A2L_NEXT: inc{{$}} +A2L_NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:7{{$}} +A2L_NEXT: main +A2L_NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:14{{$}} +A2L-NEXT: some text2 diff --git a/llvm/test/tools/llvm-symbolizer/sym.test b/llvm/test/tools/llvm-symbolizer/sym.test --- a/llvm/test/tools/llvm-symbolizer/sym.test +++ b/llvm/test/tools/llvm-symbolizer/sym.test @@ -42,11 +42,16 @@ RUN: llvm-addr2line -pfi -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefixes=A2LP,A2LP_F,A2LP_FI %s RUN: llvm-addr2line -pafi -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefixes=A2LP,A2LP_AF,A2LP_FI %s -#CHECK: some text -#CHECK: 0x40054d -#CHECK: main -#CHECK: {{[/\]+}}tmp{{[/\]+}}x.c:14:0 -#CHECK: some text2 +# CHECK: some text +# CHECK-NEXT: 0x40054d +# CHECK-NEXT: inctwo +# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:3:3 +# CHECK-NEXT: inc +# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:7:0 +# CHECK-NEXT: main +# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:14:0 +# CHECK-EMPTY: +# CHECK-NEXT: some text2 # #PRETTY: some text #PRETTY: {{[0x]+}}40054d: inctwo at {{[/\]+}}tmp{{[/\]+}}x.c:3:3 diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -24,6 +24,7 @@ #include "llvm/Support/InitLLVM.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" +#include #include #include #include @@ -228,7 +229,7 @@ std::string ModuleName; uint64_t Offset = 0; if (!parseCommand(StringRef(InputString), Cmd, ModuleName, Offset)) { - outs() << InputString; + outs() << InputString << "\n"; return; } @@ -328,7 +329,13 @@ char InputString[kMaxInputStringLength]; while (fgets(InputString, sizeof(InputString), stdin)) { - symbolizeInput(InputString, Symbolizer, Printer); + // Strip newline characters. + std::string StrippedInputString(InputString); + StrippedInputString.erase( + std::remove_if(StrippedInputString.begin(), StrippedInputString.end(), + [](char c) { return c == '\r' || c == '\n'; }), + StrippedInputString.end()); + symbolizeInput(StrippedInputString, Symbolizer, Printer); outs().flush(); } } else {