1//===-- msan_loadable.cc --------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is a part of MemorySanitizer. 11// 12// MemorySanitizer unit tests. 13//===----------------------------------------------------------------------===// 14 15#include "msan/msan_interface_internal.h" 16#include <stdlib.h> 17 18static void *dso_global; 19 20// No name mangling. 21extern "C" { 22 23__attribute__((constructor)) 24void loadable_module_init(void) { 25 if (!__msan_has_dynamic_component()) 26 return; 27 // The real test is that this compare should not make an uninit. 28 if (dso_global == NULL) 29 dso_global = malloc(4); 30} 31 32__attribute__((destructor)) 33void loadable_module_fini(void) { 34 if (!__msan_has_dynamic_component()) 35 return; 36 free(dso_global); 37 // *Don't* overwrite it with NULL! That would unpoison it, but our test 38 // relies on reloading at the same address and keeping the poison. 39} 40 41void **get_dso_global() { 42 return &dso_global; 43} 44 45} 46