Skip to content

Commit dfeb873

Browse files
committed
[llvm-symbolizer]Fix printing of malformed address values not passed via stdin
Summary: relates https://bugs.llvm.org/show_bug.cgi?id=44443 Adding missing newline when printing bad input values. Fix testcase Reviewers: jhenderson Reviewed By: jhenderson Subscribers: rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D72313
1 parent b212eb7 commit dfeb873

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,23 @@
11
# Use address that can't fit in a 64-bit number. Show that llvm-symbolizer
22
# simply echoes it as per other malformed input addresses.
3-
RUN: llvm-symbolizer --obj=addr.exe 0x10000000000000000 | FileCheck %s
3+
RUN: llvm-symbolizer --obj=addr.exe 0x10000000000000000 | FileCheck --check-prefix=LARGE-ADDR %s
44

5-
CHECK-NOT: {{.}}
6-
CHECK: 0x10000000000000000
7-
CHECK-NOT: {{.}}
5+
LARGE-ADDR-NOT: {{.}}
6+
LARGE-ADDR: 0x10000000000000000
7+
LARGE-ADDR-NOT: {{.}}
8+
9+
RUN: echo '"some text"' '"some text2"' > %t.rsp
10+
RUN: echo -e 'some text\nsome text2\n' > %t.inp
11+
12+
# Test bad input address values, via stdin, command line and response file.
13+
RUN: llvm-symbolizer --obj=%p/Inputs/addr.exe < %t.inp | FileCheck --check-prefix=BAD-INPUT %s
14+
RUN: llvm-symbolizer --obj=%p/Inputs/addr.exe "some text" "some text2" | FileCheck --check-prefix=BAD-INPUT %s
15+
RUN: llvm-symbolizer --obj=%p/Inputs/addr.exe @%t.rsp | FileCheck --check-prefix=BAD-INPUT %s
16+
17+
# Test bad input address values for the GNU-compatible version.
18+
RUN: llvm-addr2line --obj=%p/Inputs/addr.exe < %t.inp | FileCheck --check-prefix=BAD-INPUT %s
19+
RUN: llvm-addr2line --obj=%p/Inputs/addr.exe "some text" "some text2" | FileCheck --check-prefix=BAD-INPUT %s
20+
RUN: llvm-addr2line --obj=%p/Inputs/addr.exe @%t.rsp | FileCheck --check-prefix=BAD-INPUT %s
21+
22+
BAD-INPUT: some text
23+
BAD-INPUT-NEXT: some text2

llvm/test/tools/llvm-symbolizer/sym.test

+10-5
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ RUN: llvm-addr2line -pai -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileChec
4242
RUN: llvm-addr2line -pfi -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefixes=A2LP,A2LP_F,A2LP_FI %s
4343
RUN: llvm-addr2line -pafi -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefixes=A2LP,A2LP_AF,A2LP_FI %s
4444

45-
#CHECK: some text
46-
#CHECK: 0x40054d
47-
#CHECK: main
48-
#CHECK: {{[/\]+}}tmp{{[/\]+}}x.c:14:0
49-
#CHECK: some text2
45+
# CHECK: some text
46+
# CHECK-NEXT: 0x40054d
47+
# CHECK-NEXT: inctwo
48+
# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:3:3
49+
# CHECK-NEXT: inc
50+
# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:7:0
51+
# CHECK-NEXT: main
52+
# CHECK-NEXT: {{[/\]+}}tmp{{[/\]+}}x.c:14:0
53+
# CHECK-EMPTY:
54+
# CHECK-NEXT: some text2
5055
#
5156
#PRETTY: some text
5257
#PRETTY: {{[0x]+}}40054d: inctwo at {{[/\]+}}tmp{{[/\]+}}x.c:3:3

llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "llvm/Support/InitLLVM.h"
2525
#include "llvm/Support/Path.h"
2626
#include "llvm/Support/raw_ostream.h"
27+
#include <algorithm>
2728
#include <cstdio>
2829
#include <cstring>
2930
#include <string>
@@ -228,7 +229,7 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer,
228229
std::string ModuleName;
229230
uint64_t Offset = 0;
230231
if (!parseCommand(StringRef(InputString), Cmd, ModuleName, Offset)) {
231-
outs() << InputString;
232+
outs() << InputString << "\n";
232233
return;
233234
}
234235

@@ -328,7 +329,13 @@ int main(int argc, char **argv) {
328329
char InputString[kMaxInputStringLength];
329330

330331
while (fgets(InputString, sizeof(InputString), stdin)) {
331-
symbolizeInput(InputString, Symbolizer, Printer);
332+
// Strip newline characters.
333+
std::string StrippedInputString(InputString);
334+
StrippedInputString.erase(
335+
std::remove_if(StrippedInputString.begin(), StrippedInputString.end(),
336+
[](char c) { return c == '\r' || c == '\n'; }),
337+
StrippedInputString.end());
338+
symbolizeInput(StrippedInputString, Symbolizer, Printer);
332339
outs().flush();
333340
}
334341
} else {

0 commit comments

Comments
 (0)