From 9fc20c8cfbd258ffb113a1a14ffc16fb6b9c95a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Tj=C3=A4der?= <henrik@tjaders.com>
Date: Sun, 5 Mar 2017 22:40:18 +0100
Subject: [PATCH] Force KLEE to play within bounds and cleanup

---
 include/SRP_wcet.h |  2 --
 klee_stm_gdb.py    |  2 +-
 src/main.c         | 11 +++++++----
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/include/SRP_wcet.h b/include/SRP_wcet.h
index 609d5ef..8894583 100644
--- a/include/SRP_wcet.h
+++ b/include/SRP_wcet.h
@@ -66,5 +66,3 @@ locks eventlist[MAX_NUM_LOCKS];
 #define BREAKPOINT
 
 void finish_execution(void) {}
-//void terminate_execution(void) {}
-
diff --git a/klee_stm_gdb.py b/klee_stm_gdb.py
index f6ab1c5..d59e056 100644
--- a/klee_stm_gdb.py
+++ b/klee_stm_gdb.py
@@ -33,7 +33,7 @@ cur.execute('''CREATE TABLE IF NOT EXISTS events
     FILE           TEXT     NOT NULL,
     TIME           INT      NOT NULL,
     RESOURCE       TEXT     NOT NULL,
-    ACTION         TEXT
+    ACTION         TEXT,
     JOB            TEXT);''')
 
 
diff --git a/src/main.c b/src/main.c
index 83de52d..c2ccd95 100644
--- a/src/main.c
+++ b/src/main.c
@@ -44,9 +44,7 @@
 
 // Analysis variables
 static volatile int state;
-#ifdef KLEE
 static int job;
-#endif
 
 void work(int i) {
 	volatile int k = 0;
@@ -100,9 +98,13 @@ TASK(j3) {
 int main() {
 	klee_make_symbolic(&job, sizeof(job), "job");
 
+	klee_assume(job > 0 && job < 4);
+
 	switch (job) {
-		case 1:
+        default:
+        klee_make_symbolic(&state, sizeof(state), "state");
 		// check task 1
+        case 1:
 		klee_make_symbolic(&state, sizeof(state), "state");
 		EXTI1_IRQHandler();
 		break;
@@ -116,12 +118,13 @@ int main() {
 		klee_make_symbolic(&state, sizeof(state), "state");
 		EXTI3_IRQHandler();
 		break;
+            /*klee_make_symbolic(&state, sizeof(state), "state");*/
+            /*break;*/
 	}
 }
 
 #elif defined KLEE_WCET
 /* The case when gdb runs WCET benchmarking */
-static int state;
 static int job;
 int main() {
 
-- 
GitLab