[llvm-commits] [compiler-rt] r170423 - in /compiler-rt/trunk/lib/ubsan: lit_tests/TypeCheck/vptr.cpp ubsan_diag.cc ubsan_diag.h ubsan_handlers_cxx.cc ubsan_type_hash.cc ubsan_type_hash.h

Alexey Samsonov samsonov at google.com
Wed Dec 19 03:19:07 PST 2012


LGTM

+#if defined(__APPLE__) || defined(__linux__)
+
+#include "sanitizer_symbolizer.h"
+
+#include <stdlib.h>
Do you really need this header?

On Wed, Dec 19, 2012 at 6:08 AM, Richard Smith <richard at metafoo.co.uk>wrote:

> On Tue, Dec 18, 2012 at 2:31 AM, Alexey Samsonov <samsonov at google.com>
> wrote:
> > On Tue, Dec 18, 2012 at 1:30 PM, Richard Smith <
> richard-llvm at metafoo.co.uk>
> > wrote:
> >>
> >> Author: rsmith
> >> Date: Tue Dec 18 03:30:21 2012
> >> New Revision: 170423
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=170423&view=rev
> >> Log:
> >> ubsan: Demangle class names, and be more informative when a
> >> reinterpret_cast
> >> has got us to the wrong offset within an object.
> >>
> >> Modified:
> >>     compiler-rt/trunk/lib/ubsan/lit_tests/TypeCheck/vptr.cpp
> >>     compiler-rt/trunk/lib/ubsan/ubsan_diag.cc
> >>     compiler-rt/trunk/lib/ubsan/ubsan_diag.h
> >>     compiler-rt/trunk/lib/ubsan/ubsan_handlers_cxx.cc
> >>     compiler-rt/trunk/lib/ubsan/ubsan_type_hash.cc
> >>     compiler-rt/trunk/lib/ubsan/ubsan_type_hash.h
> >>
> >> Modified: compiler-rt/trunk/lib/ubsan/lit_tests/TypeCheck/vptr.cpp
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/lit_tests/TypeCheck/vptr.cpp?rev=170423&r1=170422&r2=170423&view=diff
> >>
> >>
> ==============================================================================
> >> --- compiler-rt/trunk/lib/ubsan/lit_tests/TypeCheck/vptr.cpp (original)
> >> +++ compiler-rt/trunk/lib/ubsan/lit_tests/TypeCheck/vptr.cpp Tue Dec 18
> >> 03:30:21 2012
> >> @@ -75,7 +75,7 @@
> >>
> >>    case 'm':
> >>      // CHECK-MEMBER: vptr.cpp:[[@LINE+5]]:15: runtime error: member
> >> access within address [[PTR:0x[0-9a-f]*]] which does not point to an
> object
> >> of type 'T'
> >> -    // CHECK-MEMBER-NEXT: [[PTR]]: note: object is of type
> >> [[DYN_TYPE:1S|1U]]
> >> +    // CHECK-MEMBER-NEXT: [[PTR]]: note: object is of type
> >> [[DYN_TYPE:'S'|'U']]
> >>      // CHECK-MEMBER-NEXT: {{^ .. .. .. ..  .. .. .. .. .. .. .. ..  }}
> >>      // CHECK-MEMBER-NEXT: {{^              \^~~~~~~~~~~(~~~~~~~~~~~~)?
> >> *$}}
> >>      // CHECK-MEMBER-NEXT: {{^              vptr for}} [[DYN_TYPE]]
> >> @@ -89,7 +89,7 @@
> >>
> >>    case 'f':
> >>      // CHECK-MEMFUN: vptr.cpp:[[@LINE+5]]:12: runtime error: member
> call
> >> on address [[PTR:0x[0-9a-f]*]] which does not point to an object of
> type 'T'
> >> -    // CHECK-MEMFUN-NEXT: [[PTR]]: note: object is of type
> >> [[DYN_TYPE:1S|1U]]
> >> +    // CHECK-MEMFUN-NEXT: [[PTR]]: note: object is of type
> >> [[DYN_TYPE:'S'|'U']]
> >>      // CHECK-MEMFUN-NEXT: {{^ .. .. .. ..  .. .. .. .. .. .. .. ..  }}
> >>      // CHECK-MEMFUN-NEXT: {{^              \^~~~~~~~~~~(~~~~~~~~~~~~)?
> >> *$}}
> >>      // CHECK-MEMFUN-NEXT: {{^              vptr for}} [[DYN_TYPE]]
> >> @@ -97,10 +97,10 @@
> >>
> >>    case 'o':
> >>      // CHECK-OFFSET: vptr.cpp:[[@LINE+5]]:12: runtime error: member
> call
> >> on address [[PTR:0x[0-9a-f]*]] which does not point to an object of
> type 'U'
> >> -    // CHECK-OFFSET-NEXT: 0x{{[0-9a-f]*}}: note: object is base class
> >> subobject at offset {{8|16}} within object of type [[DYN_TYPE:1U]]
> >> +    // CHECK-OFFSET-NEXT: 0x{{[0-9a-f]*}}: note: object is base class
> >> subobject at offset {{8|16}} within object of type [[DYN_TYPE:'U']]
> >>      // CHECK-OFFSET-NEXT: {{^ .. .. .. ..  .. .. .. .. .. .. .. ..  ..
> ..
> >> .. .. .. .. .. ..  .. .. .. .. .. .. .. ..  }}
> >>      // CHECK-OFFSET-NEXT: {{^              \^                        (
> >> ~~~~~~~~~~~~)~~~~~~~~~~~ *$}}
> >> -    // CHECK-OFFSET-NEXT: {{^                                       (
> >> )?vptr for}} [[DYN_TYPE]]
> >> +    // CHECK-OFFSET-NEXT: {{^                                       (
> >> )?vptr for}} 'T' base class of [[DYN_TYPE]]
> >>      return reinterpret_cast<U*>(p)->v() - 2;
> >>    }
> >>  }
> >>
> >> Modified: compiler-rt/trunk/lib/ubsan/ubsan_diag.cc
> >> URL:
> >>
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.cc?rev=170423&r1=170422&r2=170423&view=diff
> >>
> >>
> ==============================================================================
> >> --- compiler-rt/trunk/lib/ubsan/ubsan_diag.cc (original)
> >> +++ compiler-rt/trunk/lib/ubsan/ubsan_diag.cc Tue Dec 18 03:30:21 2012
> >> @@ -54,7 +54,7 @@
> >>    return *this;
> >>  }
> >>
> >> -/// Hexadecimal printing for numbers too large for fprintf to handle
> >> directly.
> >> +/// Hexadecimal printing for numbers too large for Printf to handle
> >> directly.
> >>  static void PrintHex(UIntMax Val) {
> >>  #if HAVE_INT128_T
> >>    Printf("0x%08x%08x%08x%08x",
> >> @@ -93,6 +93,15 @@
> >>    }
> >>  }
> >>
> >> +// C++ demangling function, as required by Itanium C++ ABI. This is
> weak,
> >> +// because we do not require a C++ ABI library to be linked to a
> program
> >> +// using UBSan; if it's not present, we'll just print the string
> mangled.
> >> +namespace __cxxabiv1 {
> >> +  extern "C" char *__cxa_demangle(const char *mangled, char *buffer,
> >> +                                  size_t *length, int *status)
> >> +    __attribute__((weak));
> >> +}
> >
> >
> > Do you think we should hoist (optional) demangling to sanitizer_common
> > and make it more portable (e.g. declare __cxa_demangle on Linux only,
> > use WEAK macro instead of attribute etc.)?
>
> Sounds good to me, patch attached.
>



-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121219/9dccc5c6/attachment.html>


More information about the llvm-commits mailing list