src: Add support for running with address sanitizer.
authorAndreas Schneider <asn@samba.org>
Mon, 20 Oct 2014 07:13:36 +0000 (09:13 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 20 Oct 2014 14:48:29 +0000 (16:48 +0200)
It address sanitzer will complain about our hack with variable function
attributes. This disables the checking of it.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
ConfigureChecks.cmake
config.h.cmake
src/socket_wrapper.c

index ea0a2085379f1640b95b88a12cab15db5fe45fa5..32cd9bb166bc80ebf0051b6625c6621660420be7 100644 (file)
@@ -194,6 +194,17 @@ int main(void) {
     return 0;
 }" HAVE_FUNCTION_ATTRIBUTE_FORMAT)
 
+check_c_source_compiles("
+void test_address_sanitizer_attribute(void) __attribute__((no_sanitize_address));
+
+void test_address_sanitizer_attribute(void)
+{
+    return;
+}
+
+int main(void) {
+    return 0;
+}" HAVE_ADDRESS_SANITIZER_ATTRIBUTE)
 
 check_library_exists(dl dlopen "" HAVE_LIBDL)
 if (HAVE_LIBDL)
index 8b6642051e572dd0b1ebea7e3d4b84e58cda8905..91e1206300ae3de2f5180f6f9979782413587a6f 100644 (file)
@@ -57,6 +57,7 @@
 
 #cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
+#cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1
 #cmakedefine HAVE_SOCKADDR_STORAGE 1
 #cmakedefine HAVE_IPV6 1
 #cmakedefine HAVE_FUNCTION_ATTRIBUTE_FORMAT 1
index b30303f3192a7527699de02c3d83271e3e97e799..82e57376c35166c0234fed0785e05b24bd45179c 100644 (file)
@@ -100,6 +100,12 @@ enum swrap_dbglvl_e {
 #define DESTRUCTOR_ATTRIBUTE
 #endif
 
+#ifdef HAVE_ADDRESS_SANITIZER_ATTRIBUTE
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE __attribute__((no_sanitize_address))
+#else
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
+#endif
+
 #ifdef HAVE_GCC_THREAD_LOCAL_STORAGE
 # define SWRAP_THREAD __thread
 #else
@@ -598,6 +604,7 @@ static int libc_eventfd(int count, int flags)
 }
 #endif
 
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
 static int libc_vfcntl(int fd, int cmd, va_list ap)
 {
        long int args[4];
@@ -649,6 +656,7 @@ static int libc_getsockopt(int sockfd,
        return swrap.fns.libc_getsockopt(sockfd, level, optname, optval, optlen);
 }
 
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
 static int libc_vioctl(int d, unsigned long int request, va_list ap)
 {
        long int args[4];