//===-- msan_loadable.cc --------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file is a part of MemorySanitizer. // // MemorySanitizer unit tests. //===----------------------------------------------------------------------===// #include "msan/msan_interface_internal.h" #include <stdlib.h> static void *dso_global; // No name mangling. extern "C" { __attribute__((constructor)) void loadable_module_init(void) { if (!__msan_has_dynamic_component()) return; // The real test is that this compare should not make an uninit. if (dso_global == NULL) dso_global = malloc(4); } __attribute__((destructor)) void loadable_module_fini(void) { if (!__msan_has_dynamic_component()) return; free(dso_global); // *Don't* overwrite it with NULL! That would unpoison it, but our test // relies on reloading at the same address and keeping the poison. } void **get_dso_global() { return &dso_global; } }