Start to split jump table analysis to two different slices.
[dyninst.git] / parseAPI / src / SymbolicExpression.h
1 #ifndef SYMBOLIC_EXPRESSION_H
2 #define SYMBOLIC_EXPRESSION_H
3
4 #include "DynAST.h"
5 #include "Absloc.h"
6 #include <map>
7 using Dyninst::AST;
8 using namespace Dyninst;
9 // This class tracks the expanded assignments,
10 // and also provides several helper functions for manipulating ASTs
11 class SymbolicExpression {
12
13     dyn_hash_map<Assignment::Ptr, AST::Ptr, Assignment::AssignmentPtrHasher> expandCache;
14
15 public:
16
17     static AST::Ptr SimplifyRoot(AST::Ptr ast, Address addr);
18     static AST::Ptr SimplifyAnAST(AST::Ptr ast, Address addr);
19     static AST::Ptr SubstituteAnAST(AST::Ptr ast, const std::map<AST::Ptr, AST::Ptr>& aliasMap);
20     static AST::Ptr DeepCopyAnAST(AST::Ptr ast);
21     static bool ContainAnAST(AST::Ptr root, AST::Ptr check);
22
23     std::pair<AST::Ptr, bool> ExpandAssignment(Assignment::Ptr);
24
25     //On x86 and x86-64, the value of PC is post-instruction, 
26     // which is the current address plus the length of the instruction.
27     // On ARMv8, the value of PC is pre-instruction,
28     // which is the current address
29     static Address PCValue(Address cur, size_t insnSize, Architecture a);
30
31
32 };
33
34 #endif