Example #1
0
def genNotifyEventId(anEvent):
    if pemGlobals.dialect == 'K42':
        print pemEvent.getEventMajorIdMacro(anEvent.getClassId()),
        print ",\n\t\t\t"+pemEvent.getEventSpecifierMacro(anEvent),
        print ", \n\t\t\t" + pemEvent.getLayerIdMacro(anEvent.getLayerId()),
    elif pemGlobals.dialect == 'AIX':
        print "TRACE_" + anEvent.getQualifiedSpecifier(),
    else:
        print "TRACE_" + anEvent.getQualifiedSpecifier(),
Example #2
0
def genNotifyEventId(anEvent):
    if pemGlobals.dialect == 'K42':
        print pemEvent.getEventMajorIdMacro(anEvent.getClassId()),
        print ",\n\t\t\t" + pemEvent.getEventSpecifierMacro(anEvent),
        print ", \n\t\t\t" + pemEvent.getLayerIdMacro(anEvent.getLayerId()),
    elif pemGlobals.dialect == 'AIX':
        print "TRACE_" + anEvent.getQualifiedSpecifier(),
    else:
        print "TRACE_" + anEvent.getQualifiedSpecifier(),
Example #3
0
def genLayerClassDefs(layer, allClassIds, outputDir):

    fd = None
    if pemGlobals.dummyOutput == 0:
        fd = open(os.path.join(outputDir, "trace" + layer + "Classes.h"), 'w')
        sys.stdout = fd

    print "#ifndef __TRACE_" + string.upper(layer) + "_CLASSES_H_"
    print "#define __TRACE_" + string.upper(layer) + "_CLASSES_H_"
    genPreamble()

    # another hack for the K42 hw event list
    if layer == 'HW':
        if pemGlobals.hasHWEventList > 0:
            print '#include "traceHWEventList.h"\n'

    print '#define', pemEvent.getLayerIdMacro(layer),
    print pemEvent.PEMLayers[layer]

    # generate the major_id enum
    if allClassIds.has_key(layer):
        print 'enum {'
        for classId, classVal in allClassIds[layer]:
            print "\t"+ pemEvent.getEventMajorIdMacro(classId), "=", \
                  classVal, ","
        # the most awful hack until I talk to Bob about the LAST_MAJOR_ID
        if layer == 'OS':
            print "\tTRACE_LAST_MAJOR_ID_CHECK = 26,"
        print "\tTRACE_LAST_" + string.upper(layer) + "_MAJOR_ID_CHECK"
        print '};'
        print '\n'

        # generate the masks
        for classId, classVal in allClassIds[layer]:
            print "#define " + pemEvent.getEventMaskMacro(classId),
            print "(1 <<", pemEvent.getEventMajorIdMacro(classId) + ")"
        print '\n'

    print "#endif /* #ifndef __TRACE_" + string.upper(layer) + "_CLASSES_H_ */"

    if pemGlobals.dummyOutput == 0:
        sys.stdout = sys.__stdout__
        fd.close()
Example #4
0
def genLayerClassDefs(layer, allClassIds, outputDir):

    fd = None
    if pemGlobals.dummyOutput == 0:
        fd = open(os.path.join(outputDir, "trace" + layer + "Classes.h"), 'w')
        sys.stdout = fd

    print "#ifndef __TRACE_" + string.upper(layer) + "_CLASSES_H_"
    print "#define __TRACE_" + string.upper(layer) + "_CLASSES_H_"
    genPreamble()

    # another hack for the K42 hw event list
    if layer == 'HW':
        if pemGlobals.hasHWEventList > 0:
            print '#include "traceHWEventList.h"\n'
            
    print '#define', pemEvent.getLayerIdMacro(layer),  
    print pemEvent.PEMLayers[layer]
        
    # generate the major_id enum
    if allClassIds.has_key(layer):
        print 'enum {'
        for classId, classVal in allClassIds[layer]:
            print "\t"+ pemEvent.getEventMajorIdMacro(classId), "=", \
                  classVal, ","
        # the most awful hack until I talk to Bob about the LAST_MAJOR_ID
        if layer == 'OS':
            print "\tTRACE_LAST_MAJOR_ID_CHECK = 26,"
        print "\tTRACE_LAST_" + string.upper(layer) + "_MAJOR_ID_CHECK"
        print '};'
        print '\n'

        # generate the masks
        for classId, classVal in allClassIds[layer]:
            print "#define " + pemEvent.getEventMaskMacro(classId),
            print "(1 <<", pemEvent.getEventMajorIdMacro(classId) +")"
        print '\n'
        
    print "#endif /* #ifndef __TRACE_" + string.upper(layer) + "_CLASSES_H_ */"

    if pemGlobals.dummyOutput == 0:
        sys.stdout = sys.__stdout__
        fd.close()
Example #5
0
def genFiles(layer, layerEvents, outputDir):

    fd = None

    for classId in layerEvents.keys():
        if pemGlobals.dummyOutput == 0:
            fd = open(os.path.join(outputDir, "trace" + classId + ".h"), 'w')
            sys.stdout = fd

        classIdUpper = string.upper(classId)
        print "#ifndef __TRACE_" + classIdUpper + "_H_"
        print "#define __TRACE_" + classIdUpper + "_H_"
        genPreamble()

        if pemGlobals.genTraceStubs > 0:
            print "#ifdef TRACE_STUBS"
            print "#include <stdio.h>"
            print "#endif"
            print "\n"

        if pemGlobals.dialect == 'AIX':
            print "/* following for AIX trace hooks */"
            # print "#include <sys/trcctl.h>"    ...not sure this is necessary
            print "#include <sys/trcmacros.h>"
            print "#include <sys/trchkid.h>"
            print "\n"

        if pemGlobals.dialect != 'K42':
            print "#include <traceHeader.h>"
            print "#include <traceRecord.h>"
            print "#include <notify.h>"
        print "#include \"trace" + layer + "Classes.h\"\n"

        print "/* the XLC compiler does not accept inline and long long at the same time."
        print " * Using the _XLC_INLINE macro we can force the inline. */"
        print "#ifdef __GNUC__"
        print "#define _XLC_INLINE static inline"
        print "#else"
        print "#define _XLC_INLINE"
        print "#endif"
        print "\n"

        # generate the specifiers enum
        print 'enum {',
        for anEvent in layerEvents[classId]:
            print '\t', pemEvent.getEventSpecifierMacro(anEvent), ','
        # generate the specifier for the interval events
        #for anEvent in layerEvents[classId]:
        #    if anEvent.isIntervalEvent() and anEvent.getIntervalType()=='END':
        #        print '\t', pemEvent.getEventSpecifierMacro(anEvent.transferClassName()), ','
        print '\t', "TRACE_" + string.upper(
            layer) + "_" + classIdUpper + "_MAX"
        print '};\n'

        # generate global eventId macros
        if pemGlobals.dialect != 'K42':
            for anEvent in layerEvents[classId]:
                print "#define TRACE_"+anEvent.getQualifiedSpecifier()+ \
                      " \\\n"+ "  (" +\
                      "(" + pemEvent.getLayerIdMacro(layer) + "<<20)|(" + \
                      pemEvent.getEventMajorIdMacro(classId) + "<<14)|(" + \
                      pemEvent.getEventSpecifierMacro(anEvent) + "))"

            print '\n'

        if pemGlobals.dialect == 'K42':
            genParseEventStructures(layerEvents[classId], classId)

        # generate the function calls
        if classId != 'Default':
            genInlineMethods(layerEvents[classId], classId)

        print "#endif /* #ifndef __TRACE_" + classIdUpper + "_H_ */"

        if pemGlobals.dummyOutput == 0:
            sys.stdout = sys.__stdout__
            fd.close()
Example #6
0
def genK42Wrappers(layerId, classId, layerEvents):

    wrappers = []
    classIdUpper = string.upper(classId)
    print "#include <trace/trace" + classId + ".h>\n"
        
    # generate the trace event macros/inlines
    fName = "trace" + classId + "Enabled"
    wrappers.append(fName)
    fName = string.lower(fName)	
    print 'inline uval'
    print fName + "() {"
    print "\treturn (kernelInfoLocal.traceInfo.mask & " + \
          pemEvent.getEventMaskMacro(classId) + ");"
    print "}"
    print '\n'
    
    # generate the generic inline functions
    # genGenericInlines(classId) 

    # a list of lists of data arguments
    dataArgs = []
    for anEvent in layerEvents[classId]:
        args = []
        for field in anEvent._fieldSeq:
            args.append(anEvent.getFieldType(field))
        if dataArgs.count(args) == 0:
            dataArgs.append(args)

    # generate all the inlines
    for args in dataArgs:
        (words, strings) = countWordsAndStrings(args)

        print 'inline void'
        fName = getMethodName(classId, args)
        wrappers.append(fName)
	fName = string.lower(fName)
        print fName + "(uval16 * minorId",
        whichArg = 0
        for arg in args:
            if arg == 'string':
                print ", "+ pemTypes.getCType(arg) + " data" + str(whichArg),
                print ", int len" + str(whichArg),
            else:
                print ", "+ pemTypes.getCType(arg) +" * data"+ str(whichArg),
            whichArg = whichArg+1
        print ") {"
        print "\t if(unlikely(kernelInfoLocal.traceInfo.mask & " + \
              pemEvent.getEventMaskMacro(classId) + ")) {"
        if strings == 0:
            print "\t\ttraceDefault" + str(len(args)),
            print "(TRACE_" + classIdUpper + "_MAJOR_ID, *minorId," + \
                  pemEvent.getLayerIdMacro(layerId),
        else:
            # add a NULL if there are string args
            whichArg = 0
            for arg in args:
                if arg == 'string':
                    print "\t\t((char *)data"+str(whichArg) + ")[len"+str(whichArg) + \
                          "] = '\\0';"
                whichArg = whichArg + 1
            print "\t\ttraceDefaultGeneric (",
            print "TRACE_" + classIdUpper + "_MAJOR_ID, *minorId," + \
                  pemEvent.getLayerIdMacro(layerId) + ",",
            print str(words) + ", " + str(strings),
        whichArg = 0
        for arg in args:
            if arg == 'string':  print ", data" + str(whichArg),
            else:                print ", *data" + str(whichArg),
            whichArg = whichArg + 1
        print ");"
        print "\t}"
        print "}\n"
Example #7
0
def genGenericWrappers(layerId, classId, layerEvents):

    print '#define uval unsigned int'
    print '#define uval16 unsigned short'
    print '#define uval32 unsigned long'
    print '#define uval64 unsigned long long'
    print "#include <trace" + classId + ".h>\n"
        
    wrappers = []
    classIdUpper = string.upper(classId)
    # a list of lists of data arguments
    dataArgs = []
    for anEvent in layerEvents[classId]:
        args = []
        for field in anEvent._fieldSeq:
            args.append(anEvent.getFieldType(field))
        if dataArgs.count(args) == 0:
            dataArgs.append(args)

    # generate all the inlines
    for args in dataArgs:
        (words, strings) = countWordsAndStrings(args)

        print 'inline void'
        fName = getMethodName(classId, args)
        wrappers.append(fName)
	fName = string.lower(fName)
        print fName + "(uval16 * minorId",
        whichArg = 0
        for arg in args:
            if arg == 'string':
                print ", "+ pemTypes.getCType(arg) + " data" + str(whichArg),
                print ", int len" + str(whichArg),
            else:
                print ", "+ pemTypes.getCType(arg) +" * data"+ str(whichArg),
            whichArg = whichArg+1
        print ") {"

        if strings == 0:
            print "\t\tnotifyEvent" + str(len(args)) + "(",
            print "(("+pemEvent.getLayerIdMacro(layerId) + "<<20)|(TRACE_"\
                  + classIdUpper + "_MAJOR_ID<<14)|(*minorId))",
                  
        else:
            print "\t\tnotifyEventGeneric (",
            print "(("+pemEvent.getLayerIdMacro(layerId) + "<<20)|(TRACE_"\
                  + classIdUpper + "_MAJOR_ID<<14)|(*minorId))" + ",",
            print str(words) + ", " + str(strings),
        whichArg = 0
        for arg in args:
            if arg == 'string':  print ", data" + str(whichArg),
            else:                print ", *data" + str(whichArg),
            whichArg = whichArg + 1
        print ");"
        print "}"

        print "#ifdef __GNUC__"
        print "void "+fName+"_() __attribute__ ((weak,alias(\""+fName+"\")));"
        print "#endif"

        print '\n'
Example #8
0
def genFiles(layer, layerEvents, outputDir):

    fd = None
    
    for classId in layerEvents.keys():
        if pemGlobals.dummyOutput == 0:
            fd = open(os.path.join(outputDir, "trace" + classId + ".h"), 'w')
            sys.stdout = fd

        classIdUpper = string.upper(classId)
        print "#ifndef __TRACE_" + classIdUpper + "_H_"
        print "#define __TRACE_" + classIdUpper + "_H_"
        genPreamble()

        if pemGlobals.genTraceStubs > 0:
            print "#ifdef TRACE_STUBS"
            print "#include <stdio.h>"
            print "#endif"
            print "\n"

        if pemGlobals.dialect == 'AIX':
            print "/* following for AIX trace hooks */"
            # print "#include <sys/trcctl.h>"    ...not sure this is necessary 
            print "#include <sys/trcmacros.h>"
            print "#include <sys/trchkid.h>"
            print "\n"

        if pemGlobals.dialect != 'K42':
            print "#include <traceHeader.h>"
            print "#include <traceRecord.h>"
            print "#include <notify.h>"
        print "#include \"trace" + layer + "Classes.h\"\n"

        print "/* the XLC compiler does not accept inline and long long at the same time."
        print " * Using the _XLC_INLINE macro we can force the inline. */"
        print "#ifdef __GNUC__"
        print "#define _XLC_INLINE static inline"
        print "#else"
        print "#define _XLC_INLINE"
        print "#endif"
        print "\n"
        
        # generate the specifiers enum
        print 'enum {',
        for anEvent in layerEvents[classId]:
            print '\t', pemEvent.getEventSpecifierMacro(anEvent), ','
        # generate the specifier for the interval events
        #for anEvent in layerEvents[classId]:
        #    if anEvent.isIntervalEvent() and anEvent.getIntervalType()=='END':
        #        print '\t', pemEvent.getEventSpecifierMacro(anEvent.transferClassName()), ','
        print '\t',"TRACE_" + string.upper(layer) + "_" + classIdUpper + "_MAX"
        print '};\n'

        # generate global eventId macros
        if pemGlobals.dialect != 'K42':
            for anEvent in layerEvents[classId]:
                print "#define TRACE_"+anEvent.getQualifiedSpecifier()+ \
                      " \\\n"+ "  (" +\
                      "(" + pemEvent.getLayerIdMacro(layer) + "<<20)|(" + \
                      pemEvent.getEventMajorIdMacro(classId) + "<<14)|(" + \
                      pemEvent.getEventSpecifierMacro(anEvent) + "))"

            print '\n'

        if pemGlobals.dialect == 'K42':
            genParseEventStructures(layerEvents[classId], classId)

        # generate the function calls
        if classId != 'Default':
            genInlineMethods(layerEvents[classId], classId)

        print "#endif /* #ifndef __TRACE_" + classIdUpper + "_H_ */"
              
        if pemGlobals.dummyOutput == 0:
            sys.stdout = sys.__stdout__
            fd.close()