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

/users/u3/mtikir/PMaCInstrumentor_v1601/include/Generate.h

Go to the documentation of this file.
00001 #ifndef _XCoffFileGen_h_
00002 #define _XCoffFileGen_h_
00003 
00004 #include <Base.h>
00005 #include <BinaryFile.h>
00006 #include <Instruction.h>
00007 
00008 class FileHeader;
00009 class AOutHeader;
00010 class SectHeader;
00011 class RawSection;
00012 class RelocationTable;
00013 class LineInfoTable;
00014 class SymbolTable;
00015 class StringTable;
00016 class XCoffFileGen;
00017 class TextSection;
00018 class DataSection;
00019 
00020 class BasicBlock;
00021 
00022 class FileHeaderGen : public BaseGen {
00023 protected:
00024     FileHeader* fileHeader;
00025 public:
00026     FileHeaderGen(FileHeader* fh) : BaseGen(XCoffClassTypes_file_header),fileHeader(fh) {}
00027     virtual ~FileHeaderGen() {}
00028     Base* getParsedBase() { return (Base*)fileHeader; }
00029 };
00030 
00031 class AOutHeaderGen : public BaseGen {
00032 protected:
00033     AOutHeader* aOutheader;
00034 public:
00035     AOutHeaderGen(AOutHeader* ah) : BaseGen(XCoffClassTypes_aout_header),aOutheader(ah) {}
00036     virtual ~AOutHeaderGen() {}
00037     Base* getParsedBase() { return (Base*)aOutheader; }
00038 };
00039 
00040 class SectHeaderGen : public BaseGen {
00041 protected:
00042     SectHeader* sectHeader;
00043 public:
00044     SectHeaderGen(SectHeader* sh) : BaseGen(XCoffClassTypes_sect_header),sectHeader(sh) {}
00045     virtual ~SectHeaderGen() {}
00046     Base* getParsedBase() { return (Base*)sectHeader; }
00047 };
00048 
00049 class RawSectionGen : public BaseGen {
00050 protected:
00051     RawSection* rawSection;
00052 public:
00053     RawSectionGen(RawSection* rs) : BaseGen(XCoffClassTypes_sect_rawdata),rawSection(rs) {}
00054     virtual ~RawSectionGen() {}
00055     uint32_t setFileOffset(uint32_t offset);
00056     Base* getParsedBase() { return (Base*)rawSection; }
00057 };
00058 
00059 class RelocationTableGen : public BaseGen {
00060 protected:
00061     RelocationTable* relocationTable;
00062 public:
00063     RelocationTableGen(RelocationTable* rt) : BaseGen(XCoffClassTypes_relocation),relocationTable(rt) {}
00064     virtual ~RelocationTableGen() {}
00065     Base* getParsedBase() { return (Base*)relocationTable; }
00066 };
00067 
00068 class LineInfoTableGen : public BaseGen {
00069 protected:
00070     LineInfoTable* lineInfoTable;
00071 public:
00072     LineInfoTableGen(LineInfoTable* li) : BaseGen(XCoffClassTypes_line_info),lineInfoTable(li) {}
00073     virtual ~LineInfoTableGen() {}
00074     Base* getParsedBase() { return (Base*)lineInfoTable; }
00075 };
00076 
00077 class SymbolTableGen : public BaseGen {
00078 protected:
00079     SymbolTable* symbolTable;
00080 public:
00081     SymbolTableGen(SymbolTable* st) : BaseGen(XCoffClassTypes_symbol_table),symbolTable(st) {}
00082     virtual ~SymbolTableGen() {}
00083     Base* getParsedBase() { return (Base*)symbolTable; }
00084 };
00085 
00086 class StringTableGen : public BaseGen {
00087 protected:
00088     StringTable* stringTable;
00089 public:
00090     StringTableGen(StringTable* st) : BaseGen(XCoffClassTypes_string_table),stringTable(st) {}
00091     virtual ~StringTableGen() {}
00092     Base* getParsedBase() { return (Base*)stringTable; }
00093 };
00094 
00095 class XCoffFileGen {
00096 protected:
00097 
00098     XCoffFile*              xcoffFile;
00099 
00100     char*                   inputFileName;
00101     char*                   outputFileName;
00102     BinaryOutputFile        binaryOutputFile;
00103     char*                   fileExtension;
00104     uint32_t                phaseIndex;
00105 
00106     FileHeaderGen*          fileHeaderGen;
00107     AOutHeaderGen*          aOutHeaderGen;
00108 
00109     uint32_t                numberOfSections;
00110     SectHeaderGen**         sectHeadersGen;
00111     RawSectionGen**         rawSectionsGen;
00112     RelocationTableGen**    relocationTablesGen;
00113     LineInfoTableGen**      lineInfoTablesGen;
00114 
00115     SymbolTableGen*         symbolTableGen;
00116     StringTableGen*         stringTableGen;
00117     
00118     uint32_t                instrumentedFileSize;
00119     uint32_t                numberOfInstPoints;
00120 
00121     uint32_t                extendedDataSize;
00122     uint32_t                dataBufferEntryCount;
00123 
00124     char*                   pathToInstLibraries;
00125 
00126     void inst_step1_allocateBuffers();
00127     void inst_step2_setFileOffsets();
00128     void inst_step3_instrumentInBuffer();
00129     void inst_step4_updateBSSCSectionEntries();
00130     
00131     XCoffFileGen(XCoffFile* xcoff,char* extension,uint32_t phaseNo,char* blockFile);
00132 
00133 public:
00134 
00135     virtual ~XCoffFileGen() { }
00136 
00137     char*    getFileExtension()        { return fileExtension; }
00138     uint32_t getInstrumentedFileSize() { return instrumentedFileSize; }
00139     uint32_t getPhaseIndex()           { return phaseIndex; }
00140 
00141     uint32_t getNumberOfAllFunctions();
00142     uint32_t getNumberOfAllBlocks();
00143     uint32_t getNumberOfAllMemoryOps();
00144     uint32_t getNumberOfAllFloatPOps();
00145     uint32_t getNumberOfAllObjects();
00146     uint32_t getAllObjects(BaseGen** arr,uint32_t s);
00147 
00148     uint32_t getSymbolTableOffsetForInst();
00149     uint32_t getRawSectionSizeForInst(uint32_t idx);
00150     uint32_t getRawSectionOffsetForInst(uint32_t idx);
00151     uint32_t getRelocOffsetForInst(uint32_t idx);
00152     uint32_t getLineInfoOffsetForInst(uint32_t idx);
00153     uint64_t getNewBSSSectionVAddressForInst();
00154 
00155     virtual void selectInstrumentationPoints(char* blockFile) { __SHOULD_NOT_ARRIVE; }
00156     virtual void printInstrumentationPoints() { __SHOULD_NOT_ARRIVE; }
00157     virtual uint32_t getNumberOfInstPoints(TextSection* textSect) { return numberOfInstPoints; }
00158 
00159     uint32_t        getExtendedDataSize()                  { return extendedDataSize; }
00160     uint32_t        getDataBufferEntryCount()              { return dataBufferEntryCount; }
00161     virtual int32_t getDataOffsetForInst(uint32_t idx) {  __SHOULD_NOT_ARRIVE; return 0; }
00162     virtual void    reserveDataForInstrumentation()        { __SHOULD_NOT_ARRIVE; }
00163 
00164     virtual void verify(uint32_t written) { __SHOULD_NOT_ARRIVE; }
00165 
00166     virtual uint32_t getNumOfSharedLibFuncs()    { __SHOULD_NOT_ARRIVE; return 0; }
00167     virtual uint32_t byteCountForSharedLibFuncWrappers() { __SHOULD_NOT_ARRIVE; return 0; }
00168     virtual uint32_t generateSharedLibFuncWrapper(uint32_t libFuncIdx,uint64_t funcCallAddr,uint32_t genBufferOffset,BaseGen* gen) {
00169         __SHOULD_NOT_ARRIVE; return 0;
00170     }
00171     virtual void     setAddrOfSharedLibFuncWrapper(uint32_t i,uint64_t addr){ __SHOULD_NOT_ARRIVE; }
00172     uint32_t         generateStubForAllLibraryCalls(uint32_t genBufferOffset,BaseGen* gen);
00173     virtual char*    getSharedLibFuncName(uint32_t i) { __SHOULD_NOT_ARRIVE; return NULL; }
00174     virtual uint64_t getSharedLibFuncAddrLocation(uint32_t i) { __SHOULD_NOT_ARRIVE; return 0; }
00175     virtual void     getSharedLibraryPathAndObj(char** path,char** name,char** obj){ __SHOULD_NOT_ARRIVE; }
00176 
00177     virtual void initializeReservedData(DataSection* dataSect,BaseGen* gen) { __SHOULD_NOT_ARRIVE; }
00178 
00179     virtual uint32_t maxByteCountPerInst() { __SHOULD_NOT_ARRIVE; return 0; }
00180     virtual uint32_t byteCountForInst(uint32_t instPointIdx,uint64_t instStubAddress,TextSection* textSect) { 
00181         __SHOULD_NOT_ARRIVE; return 0; 
00182     }
00183     virtual uint32_t generateCodeForInst(uint32_t instPointIdx,uint64_t instStubAddress,TextSection* textSect,
00184                                          BaseGen* gen,uint32_t genBufferOffset) {
00185         __SHOULD_NOT_ARRIVE; return 0; 
00186     }
00187 
00188     void         instrument();
00189     uint32_t     dump();
00190 
00191     virtual char* getGenClassName() { __SHOULD_NOT_ARRIVE; return NULL; }
00192 
00193     char* getPathToInstLib() { return pathToInstLibraries; }
00194     void setPathToInstLib(char* libPathTop);
00195 };
00196 
00197 #endif

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