Skip to content

Commit def3ba5

Browse files
Merge pull request #28 from peterschrammel/jbmc
JBMC Tool wrapper
2 parents 6756c84 + 7fcd31f commit def3ba5

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

Makefile

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
CBMC=../cbmc
22
2LS=../2ls
3+
JBMC=../cbmc
34
YEAR=2018
45

5-
all: cbmc 2ls
6+
all: cbmc 2ls jbmc
67

78
cbmc: cbmc.zip
89

910
2ls: 2ls.zip
1011

11-
.PHONY: cbmc 2ls
12+
jbmc: jbmc.zip
13+
14+
.PHONY: cbmc 2ls jbmc
1215

1316
%-wrapper: %.inc tool-wrapper.inc
1417
echo "#!/bin/bash" > $@
@@ -36,3 +39,14 @@ cbmc.zip: cbmc.inc tool-wrapper.inc $(CBMC)/LICENSE $(CBMC)/src/cbmc/cbmc
3639
zip -r $@ $(basename $@)
3740
cd $(basename $@) && rm 2ls 2ls-binary LICENSE
3841
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 $@)

jbmc.inc

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
}

tool-wrapper.inc

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ if(/^CHECK\(init\((\S+)\(\)\),LTL\((\S+)\)\)$/) {
2020
print "ENTRY=$1\n";
2121
print "PROP=\"label\"\nLABEL=\"$1\"\n" if($2 =~ /^G!label\((\S+)\)$/);
2222
print "PROP=\"unreach_call\"\n" if($2 =~ /^G!call\(__VERIFIER_error\(\)\)$/);
23+
print "PROP=\"unreach_call\"\n" if($2 =~ /^Gassert$/);
2324
print "PROP=\"memsafety\"\n" if($2 =~ /^Gvalid-(free|deref|memtrack)$/);
2425
print "PROP=\"overflow\"\n" if($2 =~ /^G!overflow$/);
2526
print "PROP=\"termination\"\n" if($2 =~ /^Fend$/);

0 commit comments

Comments
 (0)