[2/5] Don't sanitize linker_set

Message ID 20201019155537.15290-3-sebastian.huber@embedded-brains.de
State Accepted
Commit b9967c3f9040c25efe0a67b59dbd05ee79d0a97d
Headers show
  • Synchronize <sys/cdefs.h> and <stdatomic.h> with FreeBSD
Related show

Commit Message

Sebastian Huber Oct. 19, 2020, 3:55 p.m.
From: dab <dab@FreeBSD.org>

The assumptions of linker_set don't play nicely with
AddressSanitizer. AddressSanitizer adds a 'redzone' of zeros around
globals (including those in named sections), whereas linker_set
assumes they are all packed consecutively like a pointer array. So:
let's annotate linker_set so that AddressSanitizer ignores it.

Submitted by:	Matthew Bryan <matthew.bryan@isilon.com>
Reviewed by:	kib, rang_acm.org
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D22239
 newlib/libc/include/sys/cdefs.h | 7 +++++++
 1 file changed, 7 insertions(+)



diff --git a/newlib/libc/include/sys/cdefs.h b/newlib/libc/include/sys/cdefs.h
index 9a0466fff..1f2ce063d 100644
--- a/newlib/libc/include/sys/cdefs.h
+++ b/newlib/libc/include/sys/cdefs.h
@@ -709,6 +709,13 @@ 
 /* Function should not be analyzed. */
 #define	__no_lock_analysis	__lock_annotate(no_thread_safety_analysis)
+/* Function or variable should not be sanitized, ie. by AddressSanitizer */
+#if __has_attribute(no_sanitize)
+#define __nosanitizeaddress	__attribute__((no_sanitize("address")))
+#define __nosanitizeaddress
 /* Guard variables and structure members by lock. */
 #define	__guarded_by(x)		__lock_annotate(guarded_by(x))
 #define	__pt_guarded_by(x)	__lock_annotate(pt_guarded_by(x))