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.