Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

/users/u3/mtikir/PMaCInstrumentor_v1601/tools/CommonMethods.h

Go to the documentation of this file.
00001 #ifndef _CommonMethods_h_
00002 #define _CommonMethods_h_
00003 
00004 #include <Generate.h>
00005 
00006 class CommonMethods : public XCoffFileGen {
00007 protected:
00008     static char*            staticPrintExtension;
00009     uint32_t                libraryFunctionCount;
00010 
00011     BasicBlock**            blocksToInstrument;
00012     BasicBlock*             terminationBlock;
00013     uint32_t                numOfBlocksFiltered;
00014 
00015     /*************************************************/
00016     /********* Data Section Extension ****************/
00017     uint64_t                extendedBeginAddr;
00018 
00019     uint64_t                execTOCAddress;
00020     uint32_t                tocXorUpdateVal;
00021     uint32_t                tocDistUpdateVal;
00022 
00023     uint64_t                libraryFunctionStubAddrLocs[4];
00024     uint64_t                libraryFuncStubAddrs[4];
00025 
00026     uint64_t                saveAddressCondReg;
00027     uint64_t                saveAddressFPCondReg;
00028 
00029     uint64_t                saveAddressLinkReg;
00030     uint64_t                saveAddressCtrReg;
00031     uint64_t                saveAddressExpReg;
00032 
00033     uint64_t                saveAddressGprRegs;
00034     uint64_t                saveAddressFprRegs;
00035 
00036     uint64_t                dataBufferAddress;
00037 
00038     uint64_t                commentAddress;
00039     char*                   sharedLibraryInfoStr;
00040 
00041     uint64_t                extraBlockInfoAddress;
00042 
00043     /*************************************************/
00044 
00045     char*                   sharedLibraryPath;
00046 
00047     bool                    enableExtendedPrint;
00048 
00049     CommonMethods(XCoffFile* xcoff,char* extension,uint32_t phaseNo,uint32_t callCount,char* inpFile);
00050 
00051 public:
00052     virtual ~CommonMethods() {}
00053 
00054     BasicBlock*  findTerminationBlock();
00055 
00056     uint32_t getNumOfSharedLibFuncs()    { return libraryFunctionCount; }
00057     uint32_t byteCountForSharedLibFuncWrappers() { return (getNumOfSharedLibFuncs() * 100 * sizeof(uint32_t)); }
00058     void     setAddrOfSharedLibFuncWrapper(uint32_t i,uint64_t addr) { ASSERT(i<libraryFunctionCount) ; libraryFuncStubAddrs[i] = addr; }
00059 
00060 
00061     uint32_t generateSharedLibFuncWrapper(uint32_t libFuncIdx,uint64_t funcCallAddr,
00062                             uint32_t genBufferOffset,BaseGen* gen);
00063     uint64_t getSharedLibFuncAddrLocation(uint32_t i){
00064         ASSERT(i < getNumOfSharedLibFuncs());
00065         return libraryFunctionStubAddrLocs[i];
00066     }
00067     int32_t getDataOffsetForInst(uint32_t idx){ 
00068         return (int32_t)(dataBufferAddress + (bytesPerBufferEntry()*idx) - execTOCAddress - tocDistUpdateVal);
00069     }
00070     int32_t getCommentAddressOffset(){
00071         return (int32_t)(commentAddress - execTOCAddress - tocDistUpdateVal);
00072     }
00073     void verify(uint32_t written) {}
00074 
00075     int32_t getGPRSaveOffset(uint32_t reg){
00076         return (int32_t)(saveAddressGprRegs + (sizeof(uint64_t)*reg) - execTOCAddress - tocDistUpdateVal);
00077     }
00078     int32_t getFPRSaveOffset(uint32_t reg){
00079         return (int32_t)(saveAddressFprRegs + (sizeof(uint64_t)*reg) - execTOCAddress - tocDistUpdateVal);
00080     }
00081     int32_t getCRSaveOffset(){
00082         return (int32_t)(saveAddressCondReg - execTOCAddress - tocDistUpdateVal);
00083     }
00084     int32_t getFPSCRSaveOffset(){
00085         return (int32_t)(saveAddressFPCondReg - execTOCAddress - tocDistUpdateVal);
00086     }
00087     int32_t getEXRSaveOffset(){
00088         return (int32_t)(saveAddressExpReg - execTOCAddress - tocDistUpdateVal);
00089     }
00090     int32_t getCTRSaveOffset(){
00091         return (int32_t)(saveAddressCtrReg - execTOCAddress - tocDistUpdateVal);
00092     }
00093     int32_t getLNKSaveOffset(){
00094         return (int32_t)(saveAddressLinkReg - execTOCAddress - tocDistUpdateVal);
00095     }
00096     BasicBlock** getInstBlocks()            { return blocksToInstrument; }
00097 
00098     void printInstrumentationPoints();
00099     void reserveDataForInstrumentation();
00100 
00101     virtual uint32_t bytesPerBufferEntry() { __SHOULD_NOT_ARRIVE; return 0; }
00102     virtual uint32_t howManyBufferEntry()  { __SHOULD_NOT_ARRIVE; return 0; }
00103     virtual bool filterBlockForInst(BasicBlock* bb) { __SHOULD_NOT_ARRIVE; return false; }
00104     virtual uint32_t spaceForBlockInfo()   { __SHOULD_NOT_ARRIVE; return 0; }
00105 
00106     void updateTOCRegister(Instruction* insnBuffer,uint32_t* insnIndex);
00107     void saveCTRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00108     void restCTRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00109     void saveEXRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00110     void restEXRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00111     void saveFPSCRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00112     void restFPSCRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00113     void saveCRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00114     void restCRRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00115     void saveLNKRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00116     void restLNKRegister(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg);
00117     void generateFuncCallFull(Instruction* insnBuffer,uint32_t* insnIndex,uint32_t reg,
00118                               uint64_t stubAddr,uint64_t funcAddr);
00119 
00120     virtual char* additionalInfoToPrint() { return "<no additional info>"; }
00121 
00122     void setExtendedPrint(bool flg) { enableExtendedPrint = flg; }
00123     bool isExtendedPrint() { return enableExtendedPrint; }
00124 };
00125 
00126 #endif /* CommonMethods */

Generated on Mon Jan 28 11:08:33 2008 for PMaCInstrumentor by doxygen 1.3.5