• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- tsan_printf.cc ----------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file is a part of ThreadSanitizer (TSan), a race detector.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "sanitizer_common/sanitizer_common.h"
15 #include "sanitizer_common/sanitizer_libc.h"
16 #include "tsan_defs.h"
17 #include "tsan_mman.h"
18 #include "tsan_platform.h"
19 
20 #include <stdarg.h>  // va_list
21 
22 namespace __sanitizer {
23 int VSNPrintf(char *buff, int buff_length, const char *format, va_list args);
24 }  // namespace __sanitizer
25 
26 namespace __tsan {
27 
TsanPrintf(const char * format,...)28 void TsanPrintf(const char *format, ...) {
29   ScopedInRtl in_rtl;
30   const uptr kMaxLen = 16 * 1024;
31   InternalScopedBuffer<char> buffer(kMaxLen);
32   va_list args;
33   va_start(args, format);
34   uptr len = VSNPrintf(buffer.data(), buffer.size(), format, args);
35   va_end(args);
36   internal_write(CTX() ? flags()->log_fileno : 2,
37       buffer.data(), len < buffer.size() ? len : buffer.size() - 1);
38 }
39 
40 }  // namespace __tsan
41