diff --git a/Cargo.toml b/Cargo.toml
index d54df3789127edbb80a94f24523b8741c3cae847..40d43efe7a0252695c7cd1423977954fe1d70868 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -35,7 +35,7 @@ version = "0.2.0"
 path = "./klee"
 
 [features]
-wcet_bkpt = [] 
+wcet_bkpt = ["cortex-m-rtfm-macros/wcet_bkpt"] 
 wcet_nop = []
 klee_mode = ["cortex-m-rtfm-macros/klee_mode", "klee/klee_mode"] 
 
diff --git a/examples/resource.rs b/examples/resource.rs
index a23dafa7773dcff1b3c0cacd6635194e9e24a104..94c0ba0047ec464c692edf80089c3160952bf498 100644
--- a/examples/resource.rs
+++ b/examples/resource.rs
@@ -78,36 +78,36 @@ fn exti3(t: &mut Threshold, mut r: EXTI3::Resources) {
 #[allow(dead_code)]
 fn init(_p: init::Peripherals, _r: init::Resources) {}
 
-extern crate cortex_m;
-use cortex_m::register::basepri;
-
-// for wcet should be autogenerated...
-
-#[inline(never)]
-#[no_mangle]
-fn readbasepri() -> u8 {
-    cortex_m::register::basepri::read()
-}
-#[inline(never)]
-#[allow(non_snake_case)]
-#[no_mangle]
-fn stub_EXTI1() {
-    unsafe { _EXTI1() };
-}
-#[inline(never)]
-#[no_mangle]
-#[allow(non_snake_case)]
-fn stub_EXTI2() {
-    unsafe { _EXTI2() };
-}
-#[inline(never)]
-#[no_mangle]
-#[allow(non_snake_case)]
-fn stub_EXTI3() {
-    unsafe {
-        _EXTI3();
-    }
-}
+// extern crate cortex_m;
+// use cortex_m::register::basepri;
+
+// // for wcet should be autogenerated...
+
+// #[inline(never)]
+// #[no_mangle]
+// fn readbasepri() -> u8 {
+//     cortex_m::register::basepri::read()
+// }
+// #[inline(never)]
+// #[allow(non_snake_case)]
+// #[no_mangle]
+// fn stub_EXTI1() {
+//     unsafe { _EXTI1() };
+// }
+// #[inline(never)]
+// #[no_mangle]
+// #[allow(non_snake_case)]
+// fn stub_EXTI2() {
+//     unsafe { _EXTI2() };
+// }
+// #[inline(never)]
+// #[no_mangle]
+// #[allow(non_snake_case)]
+// fn stub_EXTI3() {
+//     unsafe {
+//         _EXTI3();
+//     }
+// }
 
 // The idle loop.
 //
@@ -116,10 +116,10 @@ fn stub_EXTI3() {
 // endless loop.
 #[inline(never)]
 fn idle() -> ! {
-    readbasepri();
-    stub_EXTI1();
-    stub_EXTI2();
-    stub_EXTI3();
+    // readbasepri();
+    // stub_EXTI1(); // here to provide stub for gdb
+    // stub_EXTI2(); // here to provide stub for gdb
+    // stub_EXTI3(); // here to provide stub for gdb
 
     loop {
         rtfm::nop();
diff --git a/macros/Cargo.toml b/macros/Cargo.toml
index a2f12f7eb7869c72e68debdfc3a23e1906c5aa08..d59431d13a9036844c314166494e576baffcded9 100644
--- a/macros/Cargo.toml
+++ b/macros/Cargo.toml
@@ -22,4 +22,5 @@ path = "../klee"
 proc-macro = true
 
 [features]
-klee_mode = [] 
\ No newline at end of file
+klee_mode = [] 
+wcet_bkpt = [] 
\ No newline at end of file
diff --git a/macros/src/trans.rs b/macros/src/trans.rs
index 8d0e9e6a98e5ca2fc3d935fd167a3ef0d25e13d7..2c8ea462d59bcb1ced02a75d14232c59dd357f0f 100644
--- a/macros/src/trans.rs
+++ b/macros/src/trans.rs
@@ -27,7 +27,12 @@ pub fn app(app: &App, ownerships: &Ownerships) -> Tokens {
     quote!(#(#root)*)
 }
 
-fn idle(app: &App, ownerships: &Ownerships, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
+fn idle(
+    app: &App,
+    ownerships: &Ownerships,
+    main: &mut Vec<Tokens>,
+    root: &mut Vec<Tokens>,
+) {
     let krate = krate();
 
     let mut mod_items = vec![];
@@ -406,21 +411,33 @@ fn init(app: &App, main: &mut Vec<Tokens>, root: &mut Vec<Tokens>) {
     let init = &app.init.path;
 
     if !cfg!(feature = "klee_mode") {
-        // code generation for normal mode
-        main.push(quote! {
-            // type check
-            let init: fn(#(#tys,)*) #ret = #init;
-
-            #krate::atomic(unsafe { &mut #krate::Threshold::new(0) }, |_t| unsafe {
-                let _late_resources = init(#(#exprs,)*);
-                #(#late_resource_init)*
-
-                #(#exceptions)*
-                #(#interrupts)*
+        // code generation for normal/wcet mode
+        if !cfg!(feature = "wcet_bkpt") {
+            // normal mode
+            main.push(quote! {
+                // type check
+                let init: fn(#(#tys,)*) #ret = #init;
+
+                #krate::atomic(unsafe { &mut #krate::Threshold::new(0) }, |_t| unsafe {
+                    let _late_resources = init(#(#exprs,)*);
+                    #(#late_resource_init)*
+
+                    #(#exceptions)*
+                    #(#interrupts)*
+                });
             });
-        });
+        } else {
+            // wcet_mode
+            // panic!();
+            for (name, _task) in &app.tasks {
+                let _name = Ident::new(format!("stub_{}", name.as_ref()));
+                main.push(quote!{
+                    #_name();
+                });
+            }
+        }
     } else {
-        // code generation for klee mode
+        // code generation for klee_mode
         let mut tasks = vec![];
         let mut index: u32 = 0;
 
@@ -514,9 +531,10 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
             for rname in &task.resources {
                 let ceiling = ownerships[rname].ceiling();
                 let _rname = Ident::new(format!("_{}", rname.as_ref()));
-                let resource = app.resources
-                    .get(rname)
-                    .expect(&format!("BUG: resource {} has no definition", rname));
+                let resource = app.resources.get(rname).expect(&format!(
+                    "BUG: resource {} has no definition",
+                    rname
+                ));
 
                 let ty = &resource.ty;
                 let _static = if resource.expr.is_some() {
@@ -652,6 +670,7 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
 
         let path = &task.path;
         let _tname = Ident::new(format!("_{}", tname));
+        let _stub_tname = Ident::new(format!("stub_{}", tname));
         let export_name = Lit::Str(tname.as_ref().to_owned(), StrStyle::Cooked);
         root.push(quote! {
             #[allow(non_snake_case)]
@@ -662,6 +681,13 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
 
                 f(#(#exprs,)*)
             }
+
+            #[inline(never)]
+            #[no_mangle]
+            #[allow(non_snake_case)]
+            fn #_stub_tname() {
+                unsafe { #_tname(); }
+            }
         });
 
         root.push(quote!{