set(GIT_VERSION "none, release version")
endif()
+### Setup gcc & clang flags
+if (NOT MSVC)
+ include(${CMAKE_HOME_DIRECTORY}/tools/cmake/GCCFlags.cmake)
+endif()
+
### Generate the required headers and scripts
#############################################
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/UnitTesting.cmake)
-### Setup gcc & clang flags
-if (NOT MSVC)
- include(${CMAKE_HOME_DIRECTORY}/tools/cmake/GCCFlags.cmake)
-endif()
-
### Make Libs
if(NOT WIN32)
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
#include <sys/mman.h>
#include <unistd.h>
+#include "src/internal_config.h"
#include "src/xbt/memory_map.hpp"
#include "private.h"
}
#endif
-#if defined(__has_feature)
-#define HAS_FEATURE(x) __has_feature(x)
-#else
-#define HAS_FEATURE(x) 0
-#endif
-#if HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
+#if HAVE_SANITIZE_ADDRESS
#include <sanitizer/asan_interface.h>
-static void* safe_memcpy(void* dest, void* src, size_t n)
+static void* asan_safe_memcpy(void* dest, void* src, size_t n)
{
char* psrc = static_cast<char*>(src);
char* pdest = static_cast<char*>(dest);
return dest;
}
#else
-#define safe_memcpy(dest, src, n) memcpy(dest, src, n)
+#define asan_safe_memcpy(dest, src, n) memcpy(dest, src, n)
#endif
/** Map a given SMPI privatization segment (make a SMPI process active) */
#if HAVE_PRIVATIZATION
if(smpi_loaded_page==-1){//initial switch, do the copy from the real page here
for (int i=0; i< smpi_process_count(); i++){
- safe_memcpy(smpi_privatization_regions[i].address, TOPAGE(smpi_start_data_exe), smpi_size_data_exe);
+ asan_safe_memcpy(smpi_privatization_regions[i].address, TOPAGE(smpi_start_data_exe), smpi_size_data_exe);
}
}
xbt_die("Impossible to unlink temporary file for memory mapping");
// initialize the values
- safe_memcpy(address, TOPAGE(smpi_start_data_exe), smpi_size_data_exe);
+ asan_safe_memcpy(address, TOPAGE(smpi_start_data_exe), smpi_size_data_exe);
// store the address of the mapping for further switches
smpi_privatization_regions[i].file_descriptor = file_descriptor;
tools/cmake/scripts/update_tesh.pl
tools/cmake/UnitTesting.cmake
tools/cmake/src/internal_config.h.in
+ tools/cmake/test_prog/prog_asan.cpp
tools/cmake/test_prog/prog_gnu_dynlinker.c
tools/cmake/test_prog/prog_makecontext.c
tools/cmake/test_prog/prog_mutex_timedlock.c
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -fsanitize=address")
set(TESH_OPTION --enable-sanitizers)
+ try_compile(HAVE_SANITIZE_ADDRESS ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_asan.cpp)
+ try_compile(HAVE_SANITIZE_ADDRESS_FIBER_SUPPORT ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_asan.cpp
+ COMPILE_DEFINITIONS -DCHECK_FIBER_SUPPORT)
+else()
+ set(HAVE_SANITIZE_ADDRESS FALSE CACHE INTERNAL "")
+ set(HAVE_SANITIZE_ADDRESS_FIBER_SUPPORT FALSE CACHE INTERNAL "")
endif()
if(enable_thread_sanitizer)
/* Warning: The file internal_config.h is AUTOMATICALLY GENERATED by Cmake.
* Edit the template instead: tools/cmake/src/internal_config.h.in */
-/* Copyright (c) 2004-2016. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* <valgrind/valgrind.h> */
#cmakedefine01 HAVE_VALGRIND_H
+/* Address Sanitizer */
+#cmakedefine01 HAVE_SANITIZE_ADDRESS
+#cmakedefine01 HAVE_SANITIZE_ADDRESS_FIBER_SUPPORT
+
/* Time portability */
/* Function gettimeofday */
#cmakedefine01 HAVE_GETTIMEOFDAY
--- /dev/null
+/* Copyright (c) 2017. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+/* Check availability of AddressSanitizer */
+
+#if defined(__has_feature)
+#define HAS_FEATURE(x) __has_feature(x)
+#else
+#define HAS_FEATURE(x) 0
+#endif
+
+#if not HAS_FEATURE(address_sanitizer) && not defined(__SANITIZE_ADDRESS__)
+#error "ASan feature not found."
+#endif
+
+#include <sanitizer/asan_interface.h>
+
+#if defined(CHECK_FIBER_SUPPORT)
+// Verify the existence of the fiber annotation interface, with the expected signature
+void (*start_fiber)(void**, const void*, size_t) = __sanitizer_start_switch_fiber;
+void (*finish_fiber)(void*, const void**, size_t*) = __sanitizer_finish_switch_fiber;
+#endif
+
+int main(void)
+{
+}