summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
diff options
context:
space:
mode:
authorJames Henderson <jh7370@my.bristol.ac.uk>2019-06-04 15:34:58 +0000
committerJames Henderson <jh7370@my.bristol.ac.uk>2019-06-04 15:34:58 +0000
commit7f3135037dd44620b231a975d313ce62f93fe873 (patch)
treeff996097953d1ec2195ea8fe964933c62caf0f4b /llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
parentdbb4322e511b6be756c8fd0a1ee1697b5b110de9 (diff)
downloadbcm5719-llvm-7f3135037dd44620b231a975d313ce62f93fe873.tar.gz
bcm5719-llvm-7f3135037dd44620b231a975d313ce62f93fe873.zip
[llvm-symbolizer] Flush output on bad input
One way of using llvm-symbolizer is to interactively within a process write a line from a parent process to llvm-symbolizer's stdin, and then read the output, then write the next line, read, etc. This worked as long as all the lines were good. However, this didn't work prior to this patch if any of the inputs were bad inputs, because the output is not flushed after a bad input, meaning the parent process is sat waiting for output, whilst llvm-symbolizer is sat waiting for input. This patch flushes the output after every invocation of symbolizeInput when reading from stdin. It also removes unnecessary flushing when llvm-symbolizer is not reading addresses from stdin, which should give a slight performance boost in these situations. Reviewed by: ikudrin Differential Revision: https://reviews.llvm.org/D62371 llvm-svn: 362511
Diffstat (limited to 'llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp')
-rw-r--r--llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index e385ed8fce5..423ad077bd0 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -246,7 +246,6 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer,
}
if (ClOutputStyle == DIPrinter::OutputStyle::LLVM)
outs() << "\n";
- outs().flush();
}
int main(int argc, char **argv) {
@@ -291,8 +290,10 @@ int main(int argc, char **argv) {
const int kMaxInputStringLength = 1024;
char InputString[kMaxInputStringLength];
- while (fgets(InputString, sizeof(InputString), stdin))
+ while (fgets(InputString, sizeof(InputString), stdin)) {
symbolizeInput(InputString, Symbolizer, Printer);
+ outs().flush();
+ }
} else {
for (StringRef Address : ClInputAddresses)
symbolizeInput(Address, Symbolizer, Printer);
OpenPOWER on IntegriCloud