Skip to content
This repository was archived by the owner on Aug 17, 2022. It is now read-only.

Commit 3ef9d66

Browse files
author
Yao Qi
committed
Don't override operator new if GDB is built with -fsanitize=address
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 if the code is NOT compiled with asan. gdb: 2016-10-25 Yao Qi <[email protected]> PR gdb/20716 * common/new-op.c (__has_feature): New macro. Don't override operator new if asan is used.
1 parent a18a2a3 commit 3ef9d66

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

gdb/ChangeLog

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2016-10-25 Yao Qi <[email protected]>
2+
3+
PR gdb/20716
4+
* common/new-op.c (__has_feature): New macro.
5+
Don't override operator new if asan is used.
6+
17
2016-10-24 Luis Machado <[email protected]>
28

39
* exec.c (exec_file_locate_attach): Prevent NULL pointer dereference

gdb/common/new-op.c

+7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
You should have received a copy of the GNU General Public License
1818
along with this program. If not, see <http://www.gnu.org/licenses/>. */
1919

20+
/* GCC does not understand __has_feature. */
21+
#if !defined(__has_feature)
22+
# define __has_feature(x) 0
23+
#endif
24+
25+
#if !__has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__)
2026
#include "common-defs.h"
2127
#include "host-defs.h"
2228
#include <new>
@@ -83,3 +89,4 @@ operator new[] (std::size_t sz, const std::nothrow_t&)
8389
{
8490
return ::operator new (sz, std::nothrow);
8591
}
92+
#endif

0 commit comments

Comments
 (0)