[llvm-commits] [compiler-rt] r162834 - in /compiler-rt/trunk/lib/sanitizer_common: sanitizer_common.h sanitizer_printf.cc sanitizer_stacktrace.cc

Dmitry Vyukov dvyukov at google.com
Wed Aug 29 01:50:39 PDT 2012


On Wed, Aug 29, 2012 at 12:40 PM, Kostya Serebryany <kcc at google.com> wrote:

> Author: kcc
> Date: Wed Aug 29 03:40:36 2012
> New Revision: 162834
>
> URL: http://llvm.org/viewvc/llvm-project?rev=162834&view=rev
> Log:
> [asan/tsan] use InternalScopedBuffer instead of stack arrays. Use mmap
> inseted of InternalAlloc in InternalScopedBuffer
>
> Modified:
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=162834&r1=162833&r2=162834&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Wed Aug 29
> 03:40:36 2012
> @@ -55,15 +55,17 @@
>
>  // InternalScopedBuffer can be used instead of large stack arrays to
>  // keep frame size low.
> +// FIXME: use InternalAlloc instead of MmapOrDie once
> +// InternalAlloc is made libc-free.
>  template<typename T>
>  class InternalScopedBuffer {
>   public:
>    explicit InternalScopedBuffer(uptr cnt) {
>      cnt_ = cnt;
> -    ptr_ = (T*)InternalAlloc(cnt * sizeof(T));
> +    ptr_ = (T*)MmapOrDie(cnt * sizeof(T), "InternalScopedBuffer");
>


Please make it using malloc again. It was always intended to be
"scoped-malloc" and extensively used in tsan.



>    }
>    ~InternalScopedBuffer() {
> -    InternalFree(ptr_);
> +    UnmapOrDie(ptr_, cnt_ * sizeof(T));
>    }
>    operator T*() { return ptr_; }
>    T &operator[](uptr i) { return ptr_[i]; }
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc?rev=162834&r1=162833&r2=162834&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_printf.cc Wed Aug 29
> 03:40:36 2012
> @@ -149,16 +149,15 @@
>
>  void Printf(const char *format, ...) {
>    const int kLen = 1024 * 4;
> -  char *buffer = (char*)MmapOrDie(kLen, __FUNCTION__);
> +  InternalScopedBuffer<char> buffer(kLen);
>    va_list args;
>    va_start(args, format);
> -  int needed_length = VSNPrintf(buffer, kLen, format, args);
> +  int needed_length = VSNPrintf(buffer.data(), kLen, format, args);
>    va_end(args);
>    RAW_CHECK_MSG(needed_length < kLen, "Buffer in Printf is too short!\n");
> -  RawWrite(buffer);
> +  RawWrite(buffer.data());
>    if (PrintfAndReportCallback)
> -    PrintfAndReportCallback(buffer);
> -  UnmapOrDie(buffer, kLen);
> +    PrintfAndReportCallback(buffer.data());
>  }
>
>  // Writes at most "length" symbols to "buffer" (including trailing '\0').
> @@ -176,19 +175,19 @@
>  // Like Printf, but prints the current PID before the output string.
>  void Report(const char *format, ...) {
>    const int kLen = 1024 * 4;
> -  char *buffer = (char*)MmapOrDie(kLen, __FUNCTION__);
> -  int needed_length = internal_snprintf(buffer, kLen, "==%d== ",
> GetPid());
> +  InternalScopedBuffer<char> buffer(kLen);
> +  int needed_length = internal_snprintf(buffer.data(),
> +                                        kLen, "==%d== ", GetPid());
>    RAW_CHECK_MSG(needed_length < kLen, "Buffer in Report is too short!\n");
>    va_list args;
>    va_start(args, format);
> -  needed_length += VSNPrintf(buffer + needed_length, kLen - needed_length,
> -                             format, args);
> +  needed_length += VSNPrintf(buffer.data() + needed_length,
> +                             kLen - needed_length, format, args);
>    va_end(args);
>    RAW_CHECK_MSG(needed_length < kLen, "Buffer in Report is too short!\n");
> -  RawWrite(buffer);
> +  RawWrite(buffer.data());
>    if (PrintfAndReportCallback)
> -    PrintfAndReportCallback(buffer);
> -  UnmapOrDie(buffer, kLen);
> +    PrintfAndReportCallback(buffer.data());
>  }
>
>  }  // namespace __sanitizer
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc?rev=162834&r1=162833&r2=162834&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.cc Wed Aug
> 29 03:40:36 2012
> @@ -40,23 +40,23 @@
>                              bool symbolize, const char *strip_file_prefix,
>                              SymbolizeCallback symbolize_callback ) {
>    MemoryMappingLayout proc_maps;
> +  InternalScopedBuffer<char> buff(kPageSize * 2);
> +  InternalScopedBuffer<AddressInfo> addr_frames(64);
>    uptr frame_num = 0;
>    for (uptr i = 0; i < size && addr[i]; i++) {
>      uptr pc = patch_pc(addr[i]);
>      if (symbolize_callback) {
> -      char buff[4096];
> -      symbolize_callback((void*)pc, buff, sizeof(buff));
> +      symbolize_callback((void*)pc, buff.data(), buff.size());
>        // We can't know anything about the string returned by external
>        // symbolizer, but if it starts with filename, try to strip path
> prefix
>        // from it.
>        Printf("  #%zu 0x%zx %s\n", frame_num, pc,
> -             StripPathPrefix(buff, strip_file_prefix));
> +             StripPathPrefix(buff.data(), strip_file_prefix));
>        frame_num++;
>        continue;
>      }
> -    AddressInfo addr_frames[64];
>      uptr addr_frames_num =
> -      symbolize ? SymbolizeCode(pc, addr_frames, ARRAY_SIZE(addr_frames))
> : 0;
> +      symbolize ? SymbolizeCode(pc, addr_frames.data(),
> addr_frames.size()) : 0;
>      if (addr_frames_num > 0) {
>        for (uptr j = 0; j < addr_frames_num; j++) {
>          AddressInfo &info = addr_frames[j];
> @@ -77,11 +77,10 @@
>        }
>      } else {
>        uptr offset;
> -      char filename[4096];
>        if (proc_maps.GetObjectNameAndOffset(pc, &offset,
> -                                           filename, sizeof(filename))) {
> +                                           buff.data(), buff.size())) {
>          Printf("    #%zu 0x%zx (%s+0x%zx)\n", frame_num, pc,
> -               StripPathPrefix(filename, strip_file_prefix), offset);
> +               StripPathPrefix(buff.data(), strip_file_prefix), offset);
>        } else {
>          Printf("    #%zu 0x%zx\n", frame_num, pc);
>        }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120829/ab70a84a/attachment.html>


More information about the llvm-commits mailing list