Skip to content

Commit 911a7e0

Browse files
Merge pull request #8 from tautschnig/sv-comp-fixes
Fix configuration bugs and change CBMC behaviour
2 parents e3fda73 + ddf8fec commit 911a7e0

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ CBMC-sv-comp-$(YEAR).tar.gz: cbmc.inc tool-wrapper.inc $(CBMC)/LICENSE $(CBMC)/s
2121
mv cbmc-wrapper tmp/cbmc
2222
cp $(CBMC)/LICENSE tmp/
2323
cp $(CBMC)/src/cbmc/cbmc tmp/cbmc-binary
24-
cd tmp && tar cfz ../$@ * && rm cbmc cbmc-binary LICENSE
24+
cd tmp && chmod a+rX * && tar cfz ../$@ * && rm cbmc cbmc-binary LICENSE
2525
rmdir tmp
2626

2727
2ls-sv-comp-$(YEAR).tar.gz: 2ls.inc tool-wrapper.inc $(2LS)/LICENSE $(2LS)/src/summarizer/2ls
@@ -30,5 +30,5 @@ CBMC-sv-comp-$(YEAR).tar.gz: cbmc.inc tool-wrapper.inc $(CBMC)/LICENSE $(CBMC)/s
3030
mv 2ls-wrapper tmp/2ls
3131
cp $(2LS)/LICENSE tmp/
3232
cp $(2LS)/src/summarizer/2ls tmp/2ls-binary
33-
cd tmp && tar cfz ../$@ * && rm 2ls 2ls-binary LICENSE
33+
cd tmp && chmod a+rX * && tar cfz ../$@ * && rm 2ls 2ls-binary LICENSE
3434
rmdir tmp

cbmc.inc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ TOOL_NAME=CBMC
77

88
run()
99
{
10+
if [ "$PROP" = "termination" ] ; then
11+
EC=42
12+
return
13+
fi
14+
1015
timeout 850 bash -c ' \
1116
\
1217
ulimit -v 15000000 ; \
@@ -17,7 +22,9 @@ echo "Unwind: $c" > $LOG.latest ; \
1722
./cbmc-binary --graphml-witness $LOG.witness --unwind $c --stop-on-fail $BIT_WIDTH $PROPERTY --function $ENTRY $BM >> $LOG.latest 2>&1 ; \
1823
ec=$? ; \
1924
if [ $ec -eq 0 ] ; then \
20-
if ! tail -n 10 $LOG.latest | grep -q "^VERIFICATION SUCCESSFUL$" ; then ec=1 ; fi ; \
25+
if ! tail -n 10 $LOG.latest | grep -q "^VERIFICATION SUCCESSFUL$" ; then ec=1 ; else \
26+
./cbmc-binary --unwinding-assertions --unwind $c --stop-on-fail $BIT_WIDTH $PROPERTY --function $ENTRY $BM > /dev/null 2>&1 || ec=42 ; \
27+
fi ; \
2128
fi ; \
2229
if [ $ec -eq 10 ] ; then \
2330
if ! tail -n 10 $LOG.latest | grep -q "^VERIFICATION FAILED$" ; then ec=1 ; fi ; \
@@ -26,6 +33,7 @@ fi ; \
2633
case $ec in \
2734
0) EC=0 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ;; \
2835
10) EC=10 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ; break ;; \
36+
42) EC=42 ; mv $LOG.latest $LOG.ok ; echo "EC=$EC" >> $LOG.ok ;; \
2937
*) if [ $EC -ne 0 ] ; then EC=$ec ; mv $LOG.latest $LOG.ok ; fi ; echo "EC=$EC" >> $LOG.ok ; break ;; \
3038
esac ; \
3139
\

tool-wrapper.inc

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@ declare -A OPTIONS
88
OPTIONS["label"]="--error-label"
99
OPTIONS["unreach_call"]=""
1010
OPTIONS["termination"]=""
11-
OPTIONS["overflow"]="--signed-overflow-check"
12-
OPTIONS["memsafety"]="--pointer-check --memory-leak-check --bounds-check"
11+
OPTIONS["overflow"]="--signed-overflow-check --no-assertions"
12+
OPTIONS["memsafety"]="--pointer-check --memory-leak-check --bounds-check --no-assertions"
1313

1414
parse_property_file()
1515
{
1616
local fn=$1
1717

18-
cat $fn | sed 's/[[:space:]]//g' | perl -n -e '
19-
if(/^CHECK\(init\((\S+)\(\)\),LTL\((\S+)\)\)$/) {
20-
print "ENTRY=$1\n";
21-
print "PROP=\"label\"\nLABEL=\"$1\"\n" if($2 =~ /^G!label\((\S+)\)$/);
18+
cat $fn | sed 's/[[:space:]]//g' | perl -n -e '
19+
if(/^CHECK\(init\((\S+)\(\)\),LTL\((\S+)\)\)$/) {
20+
print "ENTRY=$1\n";
21+
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=\"memsafety\"\n" if($2 =~ /^Gvalid-(free|deref|memtrack)$/);
24-
print "PROP=\"overflow\"\n" if($2 =~ /^G!overflow$/);
25-
print "PROP=\"termination\"\n" if($2 =~ /^Fend$/);
23+
print "PROP=\"memsafety\"\n" if($2 =~ /^Gvalid-(free|deref|memtrack)$/);
24+
print "PROP=\"overflow\"\n" if($2 =~ /^G!overflow$/);
25+
print "PROP=\"termination\"\n" if($2 =~ /^Fend$/);
2626
}'
2727
}
2828

@@ -34,6 +34,9 @@ parse_result()
3434
elif tail -n 50 $LOG.ok | \
3535
grep -Eq "^(\[.*\] |[[:space:]]*)dereference failure:" ; then
3636
echo 'FALSE(valid-deref)'
37+
elif tail -n 50 $LOG.ok | \
38+
grep -Eq "^(\[.*\] |[[:space:]]*)array.* upper bound in " ; then
39+
echo 'FALSE(valid-deref)'
3740
elif tail -n 50 $LOG.ok | \
3841
grep -Eq "^(\[.*\] |[[:space:]]*)double free$" ; then
3942
echo 'FALSE(valid-free)'
@@ -58,12 +61,12 @@ process_graphml()
5861
else
5962
TYPE="violation_witness"
6063
fi
61-
cat $LOG.witness | perl -p -e "s/(<graph edgedefault=\"directed\">)/\$1\\E
62-
<data key=\"witness-type\">$(echo $TYPE)<\/data>
63-
<data key=\"producer\">$(echo $TOOL_NAME)<\/data>
64-
<data key=\"specification\">$(<$PROP_FILE)<\/data>
65-
<data key=\"programfile\">$(echo $BM | sed 's8/8\\/8g')<\/data>
66-
<data key=\"programhash\">$(sha1sum $BM | awk '{print $1}')<\/data>
64+
cat $LOG.witness | perl -p -e "s/(<graph edgedefault=\"directed\">)/\$1\\E
65+
<data key=\"witness-type\">$(echo $TYPE)<\/data>
66+
<data key=\"producer\">$(echo $TOOL_NAME)<\/data>
67+
<data key=\"specification\">$(<$PROP_FILE)<\/data>
68+
<data key=\"programfile\">$(echo $BM | sed 's8/8\\/8g')<\/data>
69+
<data key=\"programhash\">$(sha1sum $BM | awk '{print $1}')<\/data>
6770
<data key=\"architecture\">${BIT_WIDTH##--}bit<\/data>\\Q/"
6871
fi
6972
}

0 commit comments

Comments
 (0)