From a201c66fd1c0a7fdae3408572ae0befc37616259 Mon Sep 17 00:00:00 2001
From: Per <Per Lindgren>
Date: Mon, 13 Jan 2020 23:01:05 +0100
Subject: [PATCH] ktest

---
 examples/f401_ktest.rs | 58 ++++++++++++++++++++++++------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/examples/f401_ktest.rs b/examples/f401_ktest.rs
index 54d5aad..9ea2d19 100644
--- a/examples/f401_ktest.rs
+++ b/examples/f401_ktest.rs
@@ -8,43 +8,51 @@ extern crate panic_halt;
 
 use stm32f4::stm32f401 as stm32;
 
-use cortex_m::{asm, bkpt, iprintln};
+use cortex_m::{asm, bkpt};
 use cortex_m_rt::entry;
-
+// // use klee_sys::klee_make_symbolic2;
+// // Mimic RTFM resources
+// static mut X: u32 = 54;
 #[entry]
+#[inline(never)]
 fn main() -> ! {
-    let mut x: u32 = 54;
-    // klee_make_symbolic(&mut x);
-    // while x == 0 {}
-    // // asm::bkpt();
-    //
-    //
-    bkpt!(1);
-    asm::nop();
-    asm::nop();
-
-    bkpt!(2);
-    asm::nop();
-
-    bkpt!();
+    let mut x = 54;
+
+    klee_make_symbolic(&mut x);
+
+    if x == 0 {
+        bkpt!();
+    }
+
     loop {
         asm::nop();
     }
 }
 
-#[inline(always)]
-fn klee_make_symbolic<T>(data: &mut T) {
-    asm::bkpt();
-    // unsafe { klee_bkpt(data as *mut T as *mut core::ffi::c_void) };
+#[inline(never)]
+pub fn klee_make_symbolic<T>(data: &mut T) {
+    // force llvm to consider data to be mutaded
+    unsafe {
+        asm!("bkpt #0" : /* output */: /* input */ "r"(data): /* clobber */ : "volatile")
+    }
 }
 
-#[no_mangle]
-pub extern "C" fn klee_bkpt(data: *mut core::ffi::c_void) {
-    //*data = 0;
-    asm::bkpt();
-}
+// pub fn taint() {
+//     unsafe {
+//         X = 73;
+//     }
+// }
+
+// #[no_mangle]
+// pub extern "C" fn klee_bkpt(data: *mut core::ffi::c_void) {
+//     bkpt!();
+// }
 
 // extern "C" {
 //     pub fn klee_bkpt(ptr: *mut core::ffi::c_void, // pointer to the data
 //     );
 // }
+// cargo objdump --bin app --release -- -disassemble -no-show-raw-insn
+
+// unsafe { asm!("mov $0,R15" : "=r"(r) ::: "volatile") }
+// cargo objdump --example f401_ktest --release --features f4,inline-asm --target thumbv7em-none-eabihf -- -d
-- 
GitLab