def generateClralltestEvents(sClrEtwAllMan): tree = DOM.parse(sClrEtwAllMan) clrtestEvents = [] for providerNode in tree.getElementsByTagName('provider'): templateNodes = providerNode.getElementsByTagName('template') allTemplates = parseTemplateNodes(templateNodes) eventNodes = providerNode.getElementsByTagName('event') for eventNode in eventNodes: eventName = eventNode.getAttribute('symbol') templateName = eventNode.getAttribute('template') clrtestEvents.append(" EventXplatEnabled" + eventName + "();\n") clrtestEvents.append("Error |= FireEtXplat" + eventName + "(\n") line =[] if templateName: template = allTemplates[templateName] fnSig = template.signature for params in fnSig.paramlist: if params in template.structs: line.append("sizeof(Struct1),\n") argline ='' fnparam = fnSig.getParam(params) if fnparam.name.lower() == 'count': argline = '2' else: if fnparam.winType == "win:Binary": argline = 'win_Binary' elif fnparam.winType == "win:Pointer" and fnparam.count == "win:count": argline = "(const void**)&var11" elif fnparam.winType == "win:Pointer" : argline = "(const void*)var11" elif fnparam.winType =="win:AnsiString": argline = '" Testing AniString "' elif fnparam.winType =="win:UnicodeString": argline = 'W(" Testing UnicodeString ")' else: if fnparam.count == "win:count": line.append("&") argline = fnparam.winType.replace(":","_") line.append(argline) line.append(",\n") #remove trailing commas if len(line) > 0: del line[-1] line.append("\n") line.append(");\n") clrtestEvents.extend(line) return ''.join(clrtestEvents)
def checkConsistency(manifest, exclusion_filename): tree = DOM.parse(manifest) exclusionInfo = parseExclusionList(exclusion_filename) for providerNode in tree.getElementsByTagName('provider'): stackSupportSpecified = {} eventNodes = providerNode.getElementsByTagName('event') templateNodes = providerNode.getElementsByTagName('template') eventProvider = providerNode.getAttribute('name') allTemplates = parseTemplateNodes(templateNodes) for eventNode in eventNodes: taskName = eventNode.getAttribute('task') eventSymbol = eventNode.getAttribute('symbol') eventTemplate = eventNode.getAttribute('template') eventValue = int(eventNode.getAttribute('value')) clrInstanceBit = getStackWalkBit(eventProvider, taskName, eventSymbol, exclusionInfo.noclrinstance) sLookupFieldName = "ClrInstanceID" sLookupFieldType = "win:UInt16" if clrInstanceBit and allTemplates.get(eventTemplate): # check for the event template and look for a field named ClrInstanceId of type win:UInt16 fnParam = allTemplates[eventTemplate].getFnParam(sLookupFieldName) if not(fnParam and fnParam.winType == sLookupFieldType): raise Exception(exclusion_filename + ":No " + sLookupFieldName + " field of type " + sLookupFieldType + " for event symbol " + eventSymbol) # If some versions of an event are on the nostack/stack lists, # and some versions are not on either the nostack or stack list, # then developer likely forgot to specify one of the versions eventStackBitFromNoStackList = getStackWalkBit(eventProvider, taskName, eventSymbol, exclusionInfo.nostack) eventStackBitFromExplicitStackList = getStackWalkBit(eventProvider, taskName, eventSymbol, exclusionInfo.explicitstack) sStackSpecificityError = exclusion_filename + ": Error processing event :" + eventSymbol + "(ID" + str(eventValue) + "): This file must contain either ALL versions of this event or NO versions of this event. Currently some, but not all, versions of this event are present\n" if not stackSupportSpecified.get(eventValue): # Haven't checked this event before. Remember whether a preference is stated if ( not eventStackBitFromNoStackList) or ( not eventStackBitFromExplicitStackList): stackSupportSpecified[eventValue] = True else: stackSupportSpecified[eventValue] = False else: # We've checked this event before. if stackSupportSpecified[eventValue]: # When we last checked, a preference was previously specified, so it better be specified here if eventStackBitFromNoStackList and eventStackBitFromExplicitStackList: raise Exception(sStackSpecificityError) else: # When we last checked, a preference was not previously specified, so it better not be specified here if ( not eventStackBitFromNoStackList) or ( not eventStackBitFromExplicitStackList): raise Exception(sStackSpecificityError)