00001 #include "integerOps.h"
00002 #include "x86InstructionSemantics.h"
00003 #include "Partitioner.h"
00004
00005
00006
00007
00008 std::vector<SgGraphNode*> findGraphRoots(SgIncidenceDirectedGraph* graph);
00009
00010
00011
00012
00013 void
00014 findTraceForSubtree(const SgIncidenceDirectedGraph* graph, SgGraphNode* cur_node, std::vector<SgAsmx86Instruction*>& curTrace, size_t max_length,
00015 std::set< std::vector<SgAsmx86Instruction*> >& returnSet);
00016
00017
00018
00019
00020
00021 std::set< std::vector<SgAsmx86Instruction*> >
00022 generateStaticTraces(SgIncidenceDirectedGraph* graph, size_t max_length);
00023
00024
00025
00026
00027
00028 void addBlocksFromFunctionToGraph(SgIncidenceDirectedGraph* graph, std::map<rose_addr_t, SgGraphNode*>& instToNodeMap, SgAsmFunction* funcDecl );
00029
00030
00031
00032
00033 SgIncidenceDirectedGraph* constructCFG_BB(SgAsmStatement* blocks, const Partitioner::BasicBlockStarts& bb_starts,const Disassembler::InstructionMap& instMap );
00034
00035
00036
00037
00038 SgIncidenceDirectedGraph* constructCFG( SgAsmInterpretation *interp );
00039 SgIncidenceDirectedGraph* constructCFG( const Partitioner::FunctionStarts& func_starts, const Partitioner::BasicBlockStarts& bb_starts,const Disassembler::InstructionMap& instMap );
00040
00041
00042
00043
00044
00045 SgIncidenceDirectedGraph* constructCallGraph( SgAsmInterpretation *interp );
00046 SgIncidenceDirectedGraph* constructCallGraph( const Partitioner::FunctionStarts& func_starts,const Partitioner::BasicBlockStarts& bb_starts, const Disassembler::InstructionMap& instMap );
00047