diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-05-16 09:14:05 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-05-16 09:14:05 +0000 |
commit | 1e7643243d3fe777963d24c571232abd97bb8fe7 (patch) | |
tree | c2f12ba338be4726ed343ddaa64a3507bece4c0b | |
parent | b3391b58f7104c8d4ac60b176127b7b86e847562 (diff) | |
download | bcm5719-llvm-1e7643243d3fe777963d24c571232abd97bb8fe7.tar.gz bcm5719-llvm-1e7643243d3fe777963d24c571232abd97bb8fe7.zip |
[msan] Switch TLS globals to initial-exec model.
They are always defined in the main executable.
llvm-svn: 181994
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp | 14 | ||||
-rw-r--r-- | llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll | 11 |
2 files changed, 17 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp index 1c2b1e57d48..cc5743b9380 100644 --- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -299,30 +299,30 @@ void MemorySanitizer::initializeCallbacks(Module &M) { RetvalTLS = new GlobalVariable( M, ArrayType::get(IRB.getInt64Ty(), 8), false, GlobalVariable::ExternalLinkage, 0, "__msan_retval_tls", 0, - GlobalVariable::GeneralDynamicTLSModel); + GlobalVariable::InitialExecTLSModel); RetvalOriginTLS = new GlobalVariable( M, OriginTy, false, GlobalVariable::ExternalLinkage, 0, - "__msan_retval_origin_tls", 0, GlobalVariable::GeneralDynamicTLSModel); + "__msan_retval_origin_tls", 0, GlobalVariable::InitialExecTLSModel); ParamTLS = new GlobalVariable( M, ArrayType::get(IRB.getInt64Ty(), 1000), false, GlobalVariable::ExternalLinkage, 0, "__msan_param_tls", 0, - GlobalVariable::GeneralDynamicTLSModel); + GlobalVariable::InitialExecTLSModel); ParamOriginTLS = new GlobalVariable( M, ArrayType::get(OriginTy, 1000), false, GlobalVariable::ExternalLinkage, - 0, "__msan_param_origin_tls", 0, GlobalVariable::GeneralDynamicTLSModel); + 0, "__msan_param_origin_tls", 0, GlobalVariable::InitialExecTLSModel); VAArgTLS = new GlobalVariable( M, ArrayType::get(IRB.getInt64Ty(), 1000), false, GlobalVariable::ExternalLinkage, 0, "__msan_va_arg_tls", 0, - GlobalVariable::GeneralDynamicTLSModel); + GlobalVariable::InitialExecTLSModel); VAArgOverflowSizeTLS = new GlobalVariable( M, IRB.getInt64Ty(), false, GlobalVariable::ExternalLinkage, 0, "__msan_va_arg_overflow_size_tls", 0, - GlobalVariable::GeneralDynamicTLSModel); + GlobalVariable::InitialExecTLSModel); OriginTLS = new GlobalVariable( M, IRB.getInt32Ty(), false, GlobalVariable::ExternalLinkage, 0, - "__msan_origin_tls", 0, GlobalVariable::GeneralDynamicTLSModel); + "__msan_origin_tls", 0, GlobalVariable::InitialExecTLSModel); // We insert an empty inline asm after __msan_report* to avoid callback merge. EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false), diff --git a/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll b/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll index 1e7a31793de..0d9ac8e1fd1 100644 --- a/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll +++ b/llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll @@ -5,8 +5,17 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3 ; Check the presence of __msan_init ; CHECK: @llvm.global_ctors {{.*}} @__msan_init -; Check the presence and the linkage type of __msan_track_origins +; Check the presence and the linkage type of __msan_track_origins and +; other interface symbols. ; CHECK: @__msan_track_origins = weak_odr constant i32 0 +; CHECK: @__msan_keep_going = weak_odr constant i32 0 +; CHECK: @__msan_retval_tls = external thread_local(initialexec) global [{{.*}}] +; CHECK: @__msan_retval_origin_tls = external thread_local(initialexec) global i32 +; CHECK: @__msan_param_tls = external thread_local(initialexec) global [{{.*}}] +; CHECK: @__msan_param_origin_tls = external thread_local(initialexec) global [{{.*}}] +; CHECK: @__msan_va_arg_tls = external thread_local(initialexec) global [{{.*}}] +; CHECK: @__msan_va_arg_overflow_size_tls = external thread_local(initialexec) global i64 +; CHECK: @__msan_origin_tls = external thread_local(initialexec) global i32 ; Check instrumentation of stores |