Predator  [unstable] git snapshot
symabstract.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2009-2010 Kamil Dudka <kdudka@redhat.com>
3  * Copyright (C) 2010 Petr Peringer, FIT
4  *
5  * This file is part of predator.
6  *
7  * predator is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * any later version.
11  *
12  * predator is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with predator. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef H_GUARD_SYMABSTRACT_H
22 #define H_GUARD_SYMABSTRACT_H
23 
24 /**
25  * @file symabstract.hh
26  * list segment based abstraction/concretization of heap objects
27  */
28 
29 #include "config.h"
30 #include "symheap.hh"
31 
32 #include <list>
33 
34 /**
35  * container for symbolic heaps scheduled for processing. It's feed by
36  * concretizeObj() and consumed by SymExecCore::concretizeLoop().
37  */
38 typedef std::list<SymHeap> TSymHeapList;
39 
40 /**
41  * concretize the given @b abstract object. If the result is non-deterministic,
42  * more than one symbolic heap can be produced.
43  * @param sh an instance of symbolic heap, used in read/write mode
44  * @param dst a container for the results caused by non-deterministic decisions
45  * @param obj @b abstract heap object that should be concretized
46  * @param ts @b target specifier refining the target to be concretized
47  * @param leakObjs if not NULL, push all leaked root objects to the list
48  * @note the first result is always stored into sh, the use of dst is optional
49  */
50 void concretizeObj(
51  SymHeap &sh,
52  TSymHeapList &dst,
53  TObjId obj,
55  TObjSet *leakObjs = 0);
56 
57 /// splice out a possibly empty list segment
59  SymHeap &sh,
60  TObjId seg,
61  TObjSet *leakObjs);
62 
63 /// replace a DLS by a single concrete object
65 
66 /**
67  * analyze the given symbolic heap and consider abstraction of some shapes that
68  * we know ho to rewrite to their more abstract way of existence
69  * @param sh an instance of symbolic heap, used in read/write mode
70  */
71 void abstractIfNeeded(SymHeap &sh);
72 
73 /// enable/disable debugging of symabstract
74 void debugSymAbstract(bool enable);
75 
76 #endif /* H_GUARD_SYMABSTRACT_H */