Plans on SMG fixes
- enable CI (#3 (closed))
- fix easy problems detected by CI
-
merge
trunkintosmg-master- !13 (merged) update CI after merge
- check aligned/packed attributes
-
merge fixes into
smg-master- !8 (closed) petrov-8take2-fix-areNotEqual fixes #8 (closed)?
-
!3 (merged) marchenko-smg-abstraction
- fixes levels #25 (closed) #9 (closed), lists #19 (closed) #10 #21
-
refactor:
- SMG consistency runtime checks, see #32 for details, see also upstream #712.
-
unsupported features in input
- unsupported features (atexit, pthread_create, ...) -- fail with error?
- recursion -- two modes: strict fails (for competitions), default keeps searching for bugs and reports unknown instead of true
- cannot evaluate size / offset -- same as above?
-
get rid of HV-edge filter !29
- was necessary when HVEs was a flat collection
-
introduce methods
#getHVEs(object),#getHVE(object, offset),#hasHVE(object, offset, bitsize) - other, more rare variants of filtering
- depends on how we treat value sizes
- maybe add backwards map value->HVEs with this value
-
get rid of PT-edge filter too?
- add backwards collection for PTEs so we can use same scheme as for HVEs
-
objects
- fix: stack allocations are not variables, move to separate collection in frame, forbid abstracting
- fix: invalid heap should still be in heap collection
- see which collections we need
- refactor collections into the small ones, return big ones as chained iterators over small
-
isHeap, isStack, isGlobal, isExternal should be object's method, without lookup in an SMG collections
-
isExternal is spreading in
SMGState#pruneUnreachable, so it is not an object's method. Split into isExternal and isReachableFromExternal?
-
isExternal is spreading in
-
refactor
SMGObject's hierarchy:-
make
SMGAbstractObjectan abstract class underSMGObject!34 (merged) -
introduce children for
SMGRegion: variable, allocation, return object, string literal, function. This way we can be sure if something is an allocation and can add specifics inside.- make use of SMGRegion's hierarchy: store and retrieve specific information via methods
-
make
- evaluators, see !9
Edited by Олег Максимович Петров