From 461fee5328fd4450126c495cb6823c33c0588672 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 14 May 2020 17:42:54 +0200 Subject: BLI: deduplicate address sanitizer code Reviewers: brecht, campbellbarton Differential Revision: https://developer.blender.org/D7731 --- source/blender/blenlib/BLI_asan.h | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 source/blender/blenlib/BLI_asan.h (limited to 'source/blender/blenlib/BLI_asan.h') diff --git a/source/blender/blenlib/BLI_asan.h b/source/blender/blenlib/BLI_asan.h new file mode 100644 index 00000000000..fdade805c2a --- /dev/null +++ b/source/blender/blenlib/BLI_asan.h @@ -0,0 +1,45 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __BLI_ADDRESS_SANITIZER_H__ +#define __BLI_ADDRESS_SANITIZER_H__ + +/* Clang defines this. */ +#ifndef __has_feature +# define __has_feature(x) 0 +#endif + +#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer) +# include "sanitizer/asan_interface.h" +#else +/* Ensure return value is used. Just using UNUSED_VARS results in a warning. */ +# define ASAN_POISON_MEMORY_REGION(addr, size) (void)(0 && ((size) != 0 && (addr) != NULL)) +# define ASAN_UNPOISON_MEMORY_REGION(addr, size) (void)(0 && ((size) != 0 && (addr) != NULL)) +#endif + +/** + * Mark a region of memory as "freed". When using address sanitizer, accessing the given memory + * region will cause an use-after-poison error. This can be used to find errors when dealing with + * uninitialized memory in custom containers. + */ +#define BLI_asan_poison(addr, size) ASAN_POISON_MEMORY_REGION(addr, size) + +/** + * Mark a region of memory as usable again. + */ +#define BLI_asan_unpoison(addr, size) ASAN_UNPOISON_MEMORY_REGION(addr, size) + +#endif /* __BLI_ADDRESS_SANITIZER_H__ */ -- cgit v1.2.3