summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorGuanzhong Chen <gzchen@google.com>2019-07-18 17:53:22 +0000
committerGuanzhong Chen <gzchen@google.com>2019-07-18 17:53:22 +0000
commit801fa8e6b9eb2398a051752bb0e9d81279360d14 (patch)
tree85dbbbc175c054a527d970f9ea819f05abd0880c /clang
parent05be1da24cd947187a8b750e9eca45e80d2e7414 (diff)
downloadbcm5719-llvm-801fa8e6b9eb2398a051752bb0e9d81279360d14.tar.gz
bcm5719-llvm-801fa8e6b9eb2398a051752bb0e9d81279360d14.zip
[WebAssembly] Implement __builtin_wasm_tls_base intrinsic
Summary: Add `__builtin_wasm_tls_base` so that LeakSanitizer can find the thread-local block and scan through it for memory leaks. Reviewers: tlively, aheejin, sbc100 Subscribers: dschuff, jgravelle-google, hiraditya, sunfish, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D64900 llvm-svn: 366475
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/BuiltinsWebAssembly.def1
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp4
-rw-r--r--clang/test/CodeGen/builtins-wasm.c5
3 files changed, 10 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/BuiltinsWebAssembly.def b/clang/include/clang/Basic/BuiltinsWebAssembly.def
index 63177f016ac..68cecdf6309 100644
--- a/clang/include/clang/Basic/BuiltinsWebAssembly.def
+++ b/clang/include/clang/Basic/BuiltinsWebAssembly.def
@@ -31,6 +31,7 @@ TARGET_BUILTIN(__builtin_wasm_data_drop, "vIUi", "", "bulk-memory")
// Thread-local storage
TARGET_BUILTIN(__builtin_wasm_tls_size, "z", "nc", "bulk-memory")
+TARGET_BUILTIN(__builtin_wasm_tls_base, "v*", "n", "bulk-memory")
// Floating point min/max
BUILTIN(__builtin_wasm_min_f32, "fff", "nc")
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index a300bab49f9..8c7411fc305 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -13924,6 +13924,10 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_tls_size, ResultType);
return Builder.CreateCall(Callee);
}
+ case WebAssembly::BI__builtin_wasm_tls_base: {
+ Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_tls_base);
+ return Builder.CreateCall(Callee);
+ }
case WebAssembly::BI__builtin_wasm_throw: {
Value *Tag = EmitScalarExpr(E->getArg(0));
Value *Obj = EmitScalarExpr(E->getArg(1));
diff --git a/clang/test/CodeGen/builtins-wasm.c b/clang/test/CodeGen/builtins-wasm.c
index 8a17fb39641..8f8e7a9e4d0 100644
--- a/clang/test/CodeGen/builtins-wasm.c
+++ b/clang/test/CodeGen/builtins-wasm.c
@@ -44,6 +44,11 @@ __SIZE_TYPE__ tls_size() {
// WEBASSEMBLY64: call i64 @llvm.wasm.tls.size.i64()
}
+void *tls_base() {
+ return __builtin_wasm_tls_base();
+ // WEBASSEMBLY: call i8* @llvm.wasm.tls.base()
+}
+
void throw(void *obj) {
return __builtin_wasm_throw(0, obj);
// WEBASSEMBLY32: call void @llvm.wasm.throw(i32 0, i8* %{{.*}})
OpenPOWER on IntegriCloud