[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