This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Don't override operator new if GDB is built with -fsanitize=address
- From: Pedro Alves <palves at redhat dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>, gdb-patches at sourceware dot org
- Date: Tue, 25 Oct 2016 10:39:18 +0100
- Subject: Re: [PATCH] Don't override operator new if GDB is built with -fsanitize=address
- Authentication-results: sourceware.org; auth=none
- References: <1477387295-24846-1-git-send-email-yao.qi@linaro.org>
On 10/25/2016 10:21 AM, Yao Qi wrote:
> Nowadays, if we build GDB with -fsanitize=address, we can get the asan
> error below,
>
> (gdb) quit
> =================================================================
> ==9723==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x60200003bf70
> #0 0x7f88f3837527 in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x55527)
> #1 0xac8e13 in __gnu_cxx::new_allocator<void (*)()>::deallocate(void (**)(), unsigned long) /usr/include/c++/4.9/ext/new_allocator.h:110
> #2 0xac8cc2 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()> >::deallocate(std::allocator<void (*)()>&, void (**)(), unsigned long) /usr/include/c++/4.9/ext/alloc_traits.h:185
> ....
> 0x60200003bf70 is located 0 bytes inside of 8-byte region [0x60200003bf70,0x60200003bf78)
> allocated by thread T0 here:
> #0 0x7f88f38367ef in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x547ef)
> #1 0xbd2762 in operator new(unsigned long) /home/yao/SourceCode/gnu/gdb/git/gdb/common/new-op.c:42
> #2 0xac8edc in __gnu_cxx::new_allocator<void (*)()>::allocate(unsigned long, void const*) /usr/include/c++/4.9/ext/new_allocator.h:104
> #3 0xac8d81 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()> >::allocate(std::allocator<void (*)()>&, unsigned long) /usr/include/c++/4.9/ext/alloc_traits.h:182
>
> The reason for this is that we override operator new but don't override
> operator delete. This patch does the override only if the code is NOT
> compiled with asan.
>
> gdb:
>
> 2016-10-25 Yao Qi <yao.qi@linaro.org>
>
> PR gdb/20716
> * common/new-op.c (__has_feature): New macro.
> Don't override operator new if asan is used.
LGTM.
Thanks,
Pedro Alves