about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-02-02 15:23:49 -0800
committerGraydon Hoare <graydon@mozilla.com>2011-02-02 15:23:49 -0800
commit8e963f63a8d076c8e2f162ba27c49e6cb1dacb96 (patch)
treea3070ffd22701b441b51c1b395ff6a01169c9ce1
parentdd3ed6139a6fc6fda15403d0b5679535959945e5 (diff)
downloadrust-8e963f63a8d076c8e2f162ba27c49e6cb1dacb96.tar.gz
rust-8e963f63a8d076c8e2f162ba27c49e6cb1dacb96.zip
Add trace and trap helpers to trans for low level diagnostics.
-rw-r--r--src/comp/middle/trans.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index c955340e8dd..d091e3ad938 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -4186,6 +4186,24 @@ fn declare_intrinsics(ModuleRef llmod) -> hashmap[str,ValueRef] {
     ret intrinsics;
 }
 
+
+fn trace_str(@block_ctxt cx, str s) {
+    trans_upcall(cx, "upcall_trace_str", vec(p2i(C_cstr(cx.fcx.ccx, s))));
+}
+
+fn trace_word(@block_ctxt cx, ValueRef v) {
+    trans_upcall(cx, "upcall_trace_word", vec(v));
+}
+
+fn trace_ptr(@block_ctxt cx, ValueRef v) {
+    trace_word(cx, cx.build.PtrToInt(v, T_int()));
+}
+
+fn trap(@block_ctxt bcx) {
+    let vec[ValueRef] v = vec();
+    bcx.build.Call(bcx.fcx.ccx.intrinsics.get("llvm.trap"), v);
+}
+
 fn check_module(ModuleRef llmod) {
     auto pm = mk_pass_manager();
     llvm.LLVMAddVerifierPass(pm.llpm);