compile/remote-compile/lbc/tool/checkSymbol.py (63 lines of code) (raw):

# -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: checkSymbol Description : Author : liaozhaoyan date: 2021/7/17 ------------------------------------------------- Change Activity: 2021/7/17: ------------------------------------------------- """ __author__ = 'liaozhaoyan' import re class ClbcSymbol(object): def __init__(self): self.__reEvent = re.compile(r"LBC_PERF_OUTPUT[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ ]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reHash = re.compile(r"LBC_HASH[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reArray = re.compile(r"LBC_ARRAY[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reHist2 = re.compile(r"LBC_HIST2[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reHist10 = re.compile(r"LBC_HIST10[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reLruHash = re.compile( r"LBC_LRU_HASH[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") rePerHash = re.compile( r"LBC_PERCPU_HASH[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") rePerArray = re.compile( r"LBC_PERCPU_Array[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reLruPerHash = re.compile( r"LBC_LRU_PERCPU_HASH[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_ \[\]]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") reStack = re.compile( r"LBC_STACK[ \t]*\([ \t]*[a-zA-Z0-9_]+[ \t]*,[ \t]*[a-zA-Z0-9_]+[ \t]*\)[ \t]*;") self._reMaps = { 'hash': reHash, 'array': reArray, 'hist2': reHist2, 'hist10': reHist10, 'lruHash': reLruHash, 'perHash': rePerHash, 'perArray': rePerArray, 'lruPerHash': reLruPerHash, 'stack': reStack, } self.__reInBrackets = re.compile("(?<=\\().+?(?=\\))") def findEvent(self, s): ds = {} es = self.__reEvent.findall(s) for e in es: l = self.__reInBrackets.findall(e)[0] m, t, other = l.split(",", 2) ds[m.strip()] = {'type': 'event', "ktype": None, "vtype": t.strip()} return ds def findMaps(self, s): ds = {} for t, reMap in self._reMaps.items(): es = reMap.findall(s) if t == 'stack': for e in es: l = self.__reInBrackets.findall(e)[0] m, other = l.split(",", 1) # vtype u64[127] ,127 is a const value for stack, should not change!! ds[m.strip()] = {'type': t, "ktype": 'unsigned int', "vtype": 'long long unsigned int[127]'} elif t in ('hist2', "hist10"): for e in es: m = self.__reInBrackets.findall(e)[0] ds[m.strip()] = {'type': t, "ktype": 'int', "vtype": 'long int'} else: for e in es: l = self.__reInBrackets.findall(e)[0] m, k, v, other = l.split(",", 3) ds[m.strip()] = {'type': t, "ktype": k.strip(), "vtype": v.strip()} return ds if __name__ == "__main__": sym = ClbcSymbol() with open('/Users/liaozhaoyan/work/sh/c/lbc/bpf/lbc.bpf.c') as f: s = f.read() print(sym.findEvent(s))