[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
Richard Smith
richard at metafoo.co.uk
Wed Dec 19 21:02:45 PST 2012
On Wed, Dec 19, 2012 at 3:19 AM, Alexey Samsonov <samsonov at google.com> wrote:
> LGTM
Thanks, r170666.
> +#if defined(__APPLE__) || defined(__linux__)
> +
> +#include "sanitizer_symbolizer.h"
> +
> +#include <stdlib.h>
> Do you really need this header?
This is only used to provide 'size_t'. Could switch to uptr or
__SIZE_TYPE__ if you prefer?
> 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
>
More information about the llvm-commits
mailing list