Passes

  • LocalDataStructures
  • Computes the local data structure graphs for all of the functions in the program. Implemeted as a module pass; but should be a function pass. Reference1 Class definition in DataStructure.h: // // FIXME: This should be a Function pass that can be USED by a Pass, and would be automatically preserved. Until we can do that, this is a Pass. // classLocalDataStructures : public DataStructures { AddressTakenAnalysis* addrAnalysis; public: static char ID; LocalDataStructures() : DataStructures(ID, "local.

  • DataStructures
  • Reference1 Defined in DataStructure.h: classDataStructures : public ModulePass { typedef std::map<const Function*, DSGraph*> DSInfoTy; /// DataLayout, comes in handy const DataLayout* TD; /// Pass to get Graphs from DataStructures* GraphSource; /// Do we clone Graphs or steal them? bool Clone; /// do we reset the aux list to the func list? bool resetAuxCalls; /// Were are DSGraphs stolen by another pass? bool DSGraphsStolen; void buildGlobalECs(svset<const GlobalValue*>& ECGlobals); void eliminateUsesOfECGlobals(DSGraph& G, const svset<const GlobalValue*> &ECGlobals); // DSInfo, one graph for each function DSInfoTy DSInfo; // Name for printing const char* printname; protected: /// The Globals Graph contains all information on the globals DSGraph *GlobalsGraph; /// GlobalECs - The equivalence classes for each global value that is merged /// with other global values in the DSGraphs.

  • TDDataStructures
  • Reference1 Class definition in DataStructure.h, drived from class DataStructures: // TDDataStructures // - Analysis that computes new data structure graphs for each function using the closed graphs for the callers computed by the bottom-up pass. classTDDataStructures : public DataStructures { svset<const Function*> ExternallyCallable; /// CallerCallEdges - For a particular graph, we keep a list of these records /// which indicates which graphs call this function and from where. struct CallerCallEdge { DSGraph *CallerGraph; // The graph of the caller function.

  • EQTDDataStructures
  • Reference1: EQTDDataStructures is the ``final” form of DSA and is probably the appropriate pass for most external clients to use. By including this pass, a client will get the results of the DSA analysis after all phases of DSA have been run. Merging has been performed for aliasing in both callers and callees, so fewer nodes will be incomplete than in bottom-up. Aliasing information will therefore be most precise. The primary disadvantage of using EQTDDataStructures is the loss of precision caused by the additional merging of nodes relative to bottom-up.

Created Jul 25, 2019 // Last Updated Nov 17, 2019

If you could revise
the fundmental principles of
computer system design
to improve security...

... what would you change?