diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2014-05-29 14:02:06 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2014-05-29 14:02:06 +0000 |
commit | ef5f26bf19a6e00be53ef29a48bc8e94adadbf9e (patch) | |
tree | baae6ef2221e2614264ff07148635f2ced586b39 | |
parent | bde4c9c773eed5993d70dcc1f164ad033019ce83 (diff) | |
download | bcm5719-llvm-ef5f26bf19a6e00be53ef29a48bc8e94adadbf9e.tar.gz bcm5719-llvm-ef5f26bf19a6e00be53ef29a48bc8e94adadbf9e.zip |
tsan: allow to write memory profile to stdout/stderr
llvm-svn: 209811
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_rtl.cc | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc index b4c564f5da2..c494bf33826 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc @@ -131,16 +131,21 @@ static void BackgroundThread(void *arg) { fd_t mprof_fd = kInvalidFd; if (flags()->profile_memory && flags()->profile_memory[0]) { - // FIXME(dvyukov): support stdout/stderr - InternalScopedBuffer<char> filename(4096); - internal_snprintf(filename.data(), filename.size(), "%s.%d", - flags()->profile_memory, (int)internal_getpid()); - uptr openrv = OpenFile(filename.data(), true); - if (internal_iserror(openrv)) { - Printf("ThreadSanitizer: failed to open memory profile file '%s'\n", - &filename[0]); + if (internal_strcmp(flags()->profile_memory, "stdout") == 0) { + mprof_fd = 1; + } else if (internal_strcmp(flags()->profile_memory, "stderr") == 0) { + mprof_fd = 2; } else { - mprof_fd = openrv; + InternalScopedBuffer<char> filename(4096); + internal_snprintf(filename.data(), filename.size(), "%s.%d", + flags()->profile_memory, (int)internal_getpid()); + uptr openrv = OpenFile(filename.data(), true); + if (internal_iserror(openrv)) { + Printf("ThreadSanitizer: failed to open memory profile file '%s'\n", + &filename[0]); + } else { + mprof_fd = openrv; + } } } |