示例#1
0
def genParseEventStructures(allEvents, classId):
    parseMacro = "TRACE_" + string.upper(classId) + "_PARSE_DEFINE_IN_C"
    print '#ifdef', parseMacro
    print "TraceEventParse trace" + classId + "EventParse[] = {"

    # define a function to replace the positional arguments with %pos[%fmt]
    pFmt = '%(?P<argNo>\d+)'  # identify a field argument

    def pFmt2k42(matchObject):
        fieldNo = int(matchObject.group('argNo'))
        fieldName = anEvent.getFieldNameByPos(fieldNo)
        fieldFormat = anEvent.getFieldFormat(fieldName)
        traceFieldNo = anEvent.getTraceFields().index(fieldName)
        return '%' + str(traceFieldNo) + '[' + fieldFormat + ']'

    # generate the parse structure for each event
    for anEvent in allEvents:
        print "\t{ __TR(" + pemEvent.getEventSpecifierMacro(anEvent) + "),"
        parseString = "\""
        for field in anEvent.getTraceFields():  # anEvent._fieldSeq:
            parseString = parseString + \
                          pemTypes.getTypeBitSize(anEvent.getFieldType(field)) + " "
        parseString = parseString + "\""
        print "\t" + parseString + ","
        if anEvent._printFormat != None:
            print "\t  \"" + re.sub(pFmt, pFmt2k42,
                                    anEvent._printFormat) + "\"},"
        else:
            print "\t  \"\" },"
    print "};"
    print '#else /* #ifdef', parseMacro, '*/'
    print "extern TraceEventParse trace" + classId + "EventParse[];"
    print '#endif /* #ifdef', parseMacro, '*/'
    print '\n'
示例#2
0
文件: pemGenPEMAPI.py 项目: jimix/k42
def genParseEventStructures(allEvents, classId):
    parseMacro = "TRACE_" + string.upper(classId) + "_PARSE_DEFINE_IN_C"
    print '#ifdef', parseMacro
    print "TraceEventParse trace" + classId + "EventParse[] = {"

    # define a function to replace the positional arguments with %pos[%fmt]
    pFmt = '%(?P<argNo>\d+)' # identify a field argument
    def pFmt2k42(matchObject):
        fieldNo = int(matchObject.group('argNo'))
        fieldName = anEvent.getFieldNameByPos(fieldNo)
        fieldFormat = anEvent.getFieldFormat(fieldName)
        traceFieldNo = anEvent.getTraceFields().index(fieldName)
        return '%' + str(traceFieldNo) + '[' + fieldFormat + ']'

    # generate the parse structure for each event
    for anEvent in allEvents:
        print "\t{ __TR(" + pemEvent.getEventSpecifierMacro(anEvent) + "),"
        parseString = "\"" 
        for field in anEvent.getTraceFields(): # anEvent._fieldSeq:
            parseString = parseString + \
                          pemTypes.getTypeBitSize(anEvent.getFieldType(field)) + " "
        parseString = parseString + "\""
        print "\t" + parseString + ","
        if anEvent._printFormat != None:
            print "\t  \""+re.sub(pFmt, pFmt2k42, anEvent._printFormat)+"\"},"
        else:
            print "\t  \"\" },"
    print "};"
    print '#else /* #ifdef', parseMacro, '*/'
    print "extern TraceEventParse trace" + classId + "EventParse[];"
    print '#endif /* #ifdef', parseMacro, '*/'
    print '\n'
示例#3
0
文件: pemEvent.py 项目: jimix/k42
    def packFields(self):
        args = {}
        filled = 0
        i = 0
        for field in self.getTraceFields():

            fieldType = self.getFieldType(field)
            if self.isListField(field):
                if filled > 0:
                    args[i] = args[i] + ")"
                    i = i+1
                    filled = 0
                # for C we need an extra argument, the size of the list, which
                # is computed in pemGenPEMAPI
                if pemGlobals.language == 'C':
                    #args[i] = string.replace(self.getListCount(field), '_', '', 1) + \
                    #          "* (" + pemTypes.getTypeBitSize(fieldType) + " >> 3)"
                    #args[i+1] = field
                    args[i] = '___listLength'
                    args[i+1] = '(void *)___tmpBuffer'
                    i = i+2
                else:
                    args[i] = field
                    i = i+1
            
            elif fieldType == 'uint64' or fieldType == 'string':
                if filled > 0:
                    args[i] = args[i] + ")"
                    i = i+1
                    filled = 0
                args[i] = field
                i = i+1
            else:
                typeBitSize = int(pemTypes.getTypeBitSize(fieldType))
                if (filled + typeBitSize) <= 64:
                    if not args.has_key(i):
                        args[i] = "("+pemTypes.getCType('uint64')+ ")("
                    if filled > 0:
                        args[i] = args[i] + "|"
                    args[i] = args[i] + \
                              "((("+pemTypes.getCType('uint64')+")"+field+")<<"+\
                              str(64-filled-typeBitSize) + ")"
                else:
                    i = i + 1
                    args[i] = "("+pemTypes.getCType('uint64')+ ")(" + \
                              "((("+pemTypes.getCType('uint64')+")"+field+")<<"+\
                              str(64-filled-typeBitSize) + ")"
                    filled = 0
                filled = filled + typeBitSize
                
                if filled == 64: 
                    args[i] = args[i] + ")"
                    i = i+1
                    filled = 0 

        if filled > 0:
            args[i] = args[i] + ")"

        return args
示例#4
0
    def packFields(self):
        args = {}
        filled = 0
        i = 0
        for field in self.getTraceFields():

            fieldType = self.getFieldType(field)
            if self.isListField(field):
                if filled > 0:
                    args[i] = args[i] + ")"
                    i = i + 1
                    filled = 0
                # for C we need an extra argument, the size of the list, which
                # is computed in pemGenPEMAPI
                if pemGlobals.language == 'C':
                    #args[i] = string.replace(self.getListCount(field), '_', '', 1) + \
                    #          "* (" + pemTypes.getTypeBitSize(fieldType) + " >> 3)"
                    #args[i+1] = field
                    args[i] = '___listLength'
                    args[i + 1] = '(void *)___tmpBuffer'
                    i = i + 2
                else:
                    args[i] = field
                    i = i + 1

            elif fieldType == 'uint64' or fieldType == 'string':
                if filled > 0:
                    args[i] = args[i] + ")"
                    i = i + 1
                    filled = 0
                args[i] = field
                i = i + 1
            else:
                typeBitSize = int(pemTypes.getTypeBitSize(fieldType))
                if (filled + typeBitSize) <= 64:
                    if not args.has_key(i):
                        args[i] = "(" + pemTypes.getCType('uint64') + ")("
                    if filled > 0:
                        args[i] = args[i] + "|"
                    args[i] = args[i] + \
                              "((("+pemTypes.getCType('uint64')+")"+field+")<<"+\
                              str(64-filled-typeBitSize) + ")"
                else:
                    i = i + 1
                    args[i] = "("+pemTypes.getCType('uint64')+ ")(" + \
                              "((("+pemTypes.getCType('uint64')+")"+field+")<<"+\
                              str(64-filled-typeBitSize) + ")"
                    filled = 0
                filled = filled + typeBitSize

                if filled == 64:
                    args[i] = args[i] + ")"
                    i = i + 1
                    filled = 0

        if filled > 0:
            args[i] = args[i] + ")"

        return args