Public Types |
| typedef set< string > | string_set |
| typedef string_set::iterator | string_set_p |
Public Methods |
| | Pointers (procNode *root, unitNode *unit, bool debug=false) |
| | Constructor. More...
|
| | ~Pointers () |
| | Destructor. More...
|
| void | analyze () |
| | Run the analyzer. More...
|
| void | analyze (analysisProblem *problem) |
| void | reanalyze_at (procedureInfo *info, stmtLocation *callsite) |
| | Reanalyze a callsite. More...
|
| void | clear () |
| | Clear pointer information after a program change. More...
|
| void | set_context_sensitivity_threshold (int threshold) |
| | Context-sensitivity. More...
|
| void | show_progress () |
| | Turn on progress meter. More...
|
| void | hide_progress () |
| | Turn off progress meter. More...
|
| void | analyze_procedure (procLocation *current, memoryblock_set &external_defs, memoryuse_set &external_uses, memoryblock_set &external_changes, pointerValue &return_val) |
| | Analyze one procedure. More...
|
| virtual void | procedure_call (procedureInfo *caller, stmtLocation *current, callNode *call, pointerValue &call_target, pointervalue_list &arguments, memoryblock_set &external_defs, memoryuse_set &external_uses, memoryblock_set &external_changes, pointerValue &return_val) |
| | Process a procedure call. More...
|
| void | pass_parameters (procedureInfo *info, procedureInfo *caller, procLocation *callee_path, procNode *callee, pointervalue_list &arguments, memoryblock_set &changed_inputs, pointerValue &return_val) |
| | Pass parameters. More...
|
| void | process_merge_point (procedureInfo *info, basicblockLocation *current_block, pointerValue &result, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes) |
| | Process a merge point. More...
|
| void | process_changes (procedureInfo *info, basicblockLocation *current_block, memoryblock_set &changes, memoryblock_set &external_changes) |
| | Process changes. More...
|
| void | pass_external_inputs (procedureInfo *info, memoryuse_set &external_uses, memoryblock_set &changed_inputs) |
| | Process external inputs. More...
|
| void | pass_external_outputs (procedureInfo *info, memoryblock_set &external_defs, memoryblock_set &external_changes) |
| | Process external outputs. More...
|
| void | record_external_inputs_and_outputs (procedureInfo *info, procLocation *current, memoryblock_set &defs, memoryblock_set &external_defs, memoryuse_set &uses, memoryuse_set &external_uses) |
| | Record external inputs and outputs. More...
|
| void | conservative_procedure_call (procedureInfo *info, stmtLocation *current, pointervalue_list &arguments, memoryblock_set &reachable, memoryblock_set &external_defs, memoryuse_set &external_uses, memoryblock_set &external_changes, pointerValue &return_val) |
| | Conservative procedure call. More...
|
| void | eval (procedureInfo *info, stmtLocation *current, exprNode *E, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes, pointerValue &result, bool result_is_a_use) |
| | Expression evaluator. More...
|
| void | star_operator (stmtLocation *current, pointerValue &operand, memoryuse_set &uses, pointerValue &result) |
| | Star "*" operator. More...
|
| void | dot_operator (stmtLocation *current, const string &field_name, declNode *field_decl, pointerValue &operand, memoryuse_set &uses, pointerValue &result) |
| | Dot "." operator. More...
|
| void | assignment_operator (procedureInfo *info, Location *current, pointerValue &left_hand_side, pointerValue &right_hand_side, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes, bool additive=false) |
| | Assignment "=" operator. More...
|
| void | merge_operator (procedureInfo *info, Location *current, memoryBlock *block_to_merge, memoryuse_list &phi_uses, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes) |
| | Process a control-flow merge. More...
|
| void | call_operator (procedureInfo *caller, stmtLocation *current, callNode *call, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes, pointerValue &result) |
| | Function call operator. More...
|
| void | determine_call_targets (procedureInfo *caller, stmtLocation *current, callNode *call, memoryblock_set &defs, memoryuse_set &uses, memoryblock_set &changes, pointerValue &targets) |
| void | generate_uses (procedureInfo *info, Location *where, memoryuse_set &uses, pointerValue &pointer) |
| | Generate memoryUses. More...
|
| memoryDef * | nearest_def_at (procedureInfo *info, memoryBlock *block, Location *where) |
| | Reaching def. More...
|
| void | reachable_blocks (Location *where, memoryblock_list &worklist, memoryblock_set &already_seen) |
| | Reachable blocks. More...
|
| memoryBlock * | lookup_memoryblock (Location *location, declNode *decl) |
| | Lookup a memory block. More...
|
| procedureInfo * | lookup_procedure (procNode *proc) |
| | Lookup a procedure. More...
|
| bool | is_pointer_expression (exprNode *expr) |
| | Return true if the expression involves pointers. More...
|
| void | stats (ostream &out) |
| | Print some statistics. More...
|
| void | uses_and_defs () |
| | Print all uses and defs. More...
|
Protected Methods |
| memoryBlock * | lookup_heap_object (stmtLocation *current) |
| | Manage the heap. More...
|
| memoryBlock * | lookup_string_constant (stmtLocation *current, constant &value) |
| void | setup_va_list_variables (procedureInfo *info, procLocation *callee_path, procNode *callee, memoryBlock *ellipsis, pointerValue &return_val) |
| | Var args. More...
|
| void | progress_meter (procedureInfo *info, bool skipped) |
| | Progress meter. More...
|
Static Protected Methods |
| bool | is_allocation (pointerValue &call_targets) |
| bool | is_deallocation (pointerValue &call_targets) |
| bool | is_va_list (declNode *decl) |
| bool | is_va_list (exprNode *expr) |
| bool | is_va_start (pointerValue &call_targets) |
| bool | is_va_end (pointerValue &call_targets) |
| void | merge (const memoryblock_set &source, memoryblock_set &dest) |
| | Useful utilities. More...
|
| void | print_memoryblock_set (const string &label, const memoryblock_set &the_set, ostream &o) |
| void | print_memoryblock_def_set (const string &label, const memoryblock_set &the_set, ostream &o) |
| void | print_memorydef_set (const string &label, const memorydef_set &the_set, ostream &o) |
Protected Attributes |
| memoryModel | Memory |
| | Memory model. More...
|
| heap_map | HeapMap |
| | Heap index. More...
|
| procNode * | Root |
| | Analysis starting point. More...
|
| procLocation * | root_location |
| | Starting point in the location representation. More...
|
| Linker | linker |
| | Linker. More...
|
| procedureDB | Procedures |
| | Procedure database. More...
|
| analysisProblem * | Problem |
| | Use-defined analysis problem. More...
|
| bool | computePointers |
| | Analysis mode switch. More...
|
| Direction | _direction |
| | Analysis direction. More...
|
| int | _context_sensitivity_threshold |
| | Context-sensitivity threshold. More...
|
| bool | _debug |
| | Control debugging output. More...
|
| int | _procedureCount |
| | Progress counter. More...
|
| int | _skipCount |
| | Number of procedures skipped. More...
|
| bool | _show_progress |
| | Show progress counter. More...
|
| string_set | _unknown_procedures |
| | Unknown procedures. More...
|
This class is the main pointer analyzer engine.