File tree 3 files changed +59
-2
lines changed
3 files changed +59
-2
lines changed Original file line number Diff line number Diff line change 1
1
CBMC =../cbmc
2
2
2LS =../2ls
3
+ JBMC =../cbmc
3
4
YEAR =2018
4
5
5
- all : cbmc 2ls
6
+ all : cbmc 2ls jbmc
6
7
7
8
cbmc : cbmc.zip
8
9
9
10
2ls : 2ls.zip
10
11
11
- .PHONY : cbmc 2ls
12
+ jbmc : jbmc.zip
13
+
14
+ .PHONY : cbmc 2ls jbmc
12
15
13
16
% -wrapper : % .inc tool-wrapper.inc
14
17
echo " #!/bin/bash" > $@
@@ -36,3 +39,14 @@ cbmc.zip: cbmc.inc tool-wrapper.inc $(CBMC)/LICENSE $(CBMC)/src/cbmc/cbmc
36
39
zip -r $@ $(basename $@ )
37
40
cd $(basename $@ ) && rm 2ls 2ls-binary LICENSE
38
41
rmdir $(basename $@ )
42
+
43
+ jbmc.zip : jbmc.inc tool-wrapper.inc $(JBMC ) /LICENSE $(JBMC ) /src/jbmc/jbmc
44
+ mkdir -p $(basename $@ )
45
+ $(MAKE ) jbmc-wrapper
46
+ mv jbmc-wrapper $(basename $@ ) /jbmc
47
+ cp $(JBMC ) /LICENSE $(basename $@ ) /
48
+ cp $(JBMC ) /src/jbmc/jbmc $(basename $@ ) /jbmc-binary
49
+ chmod a+rX $(basename $@ ) /*
50
+ zip -r $@ $(basename $@ )
51
+ cd $(basename $@ ) && rm jbmc jbmc-binary LICENSE
52
+ rmdir $(basename $@ )
Original file line number Diff line number Diff line change
1
+ # tool
2
+
3
+ TOOL_BINARY =. /jbmc -binary
4
+ TOOL_NAME = JBMC
5
+
6
+ # function to run the tool
7
+
8
+ run ()
9
+ {
10
+ if [ "$PROP" = "termination" ] ; then
11
+ PROPERTY = "$PROPERTY --no-assertions --no-self-loops-to-assumptions"
12
+ fi
13
+
14
+ timeout 875 bash -c ' \
15
+ \
16
+ ulimit -v 15000000 ; \
17
+ \
18
+ EC=42 ; \
19
+ for c in 2 6 12 17 21 40 200 400 1025 2049 268435456 ; do \
20
+ echo "Unwind: $c" > $LOG.latest ; \
21
+ ./jbmc-binary --graphml-witness $LOG.witness --unwind $c --stop-on-fail $BIT_WIDTH --object-bits $OBJ_BITS $PROPERTY --function $ENTRY $BM >> $LOG.latest 2>&1 ; \
22
+ ec=$? ; \
23
+ if [ $ec -eq 0 ] ; then \
24
+ if ! tail -n 10 $LOG.latest | grep -q "^VERIFICATION SUCCESSFUL$" ; then ec=1 ; else \
25
+ ./jbmc-binary --unwinding-assertions --unwind $c --stop-on-fail $BIT_WIDTH --object-bits $OBJ_BITS $PROPERTY --function $ENTRY $BM > /dev/null 2>&1 || ec=42 ; \
26
+ fi ; \
27
+ fi ; \
28
+ if [ $ec -eq 10 ] ; then \
29
+ if ! tail -n 10 $LOG.latest | grep -q "^VERIFICATION FAILED$" ; then ec=1 ; fi ; \
30
+ fi ; \
31
+ \
32
+ case $ec in \
33
+ 0) EC=0 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ; break ;; \
34
+ 10) EC=10 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ; break ;; \
35
+ 42) EC=42 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ;; \
36
+ *) if [ $EC -ne 0 ] ; then EC=$ec ; mv $LOG.latest $LOG.ok ; fi ; echo "EC=$EC" >> $LOG.ok ; break ;; \
37
+ esac ; \
38
+ \
39
+ done \
40
+ '
41
+ eval `tail -n 1 $LOG . ok `
42
+ }
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ if(/^CHECK\(init\((\S+)\(\)\),LTL\((\S+)\)\)$/) {
20
20
print "ENTRY=$1\n";
21
21
print "PROP=\"label\"\nLABEL=\"$1\"\n" if($2 =~ /^G!label\((\S+)\)$/);
22
22
print "PROP=\"unreach_call\"\n" if($2 =~ /^G!call\(__VERIFIER_error\(\)\)$/);
23
+ print "PROP=\"unreach_call\"\n" if($2 =~ /^Gassert$/);
23
24
print "PROP=\"memsafety\"\n" if($2 =~ /^Gvalid-(free|deref|memtrack)$/);
24
25
print "PROP=\"overflow\"\n" if($2 =~ /^G!overflow$/);
25
26
print "PROP=\"termination\"\n" if($2 =~ /^Fend$/);
You can’t perform that action at this time.
0 commit comments