diff --git a/docs/C_C++_API.md b/docs/C_C++_API.md index 892ae8de2ca9c9644c519043ff30e029fd4fc05f..82bd6bf20d4ea18bef44cc698ce7488854f22908 100644 --- a/docs/C_C++_API.md +++ b/docs/C_C++_API.md @@ -135,10 +135,9 @@ * unsigned long offset 地址偏移 * unsigned long codeMapEndAddr 结束地址 * unsigned long codeMapAddr 初始地址 - * __u64 count 个数 + * mntPoint 挂载点 * Stack next 下一个stack * Stack prev 前一个stack - * __u64 count 计数 * const char *evt: 事件名称 * int64_t ts: Pmu采集时间戳 * pid_t pid: 进程ID diff --git a/docs/Go_API.md b/docs/Go_API.md index d989f2094f68a1a0962d4dbb62a37a33973fd2a1..be9a7bbe6dd2b72a3c52bd0324c12a22077a344c 100644 --- a/docs/Go_API.md +++ b/docs/Go_API.md @@ -151,10 +151,12 @@ func PmuRead(fd int) (PmuDataVo, error) * Module string 模块名称 * SymbolName string 符号名 * MangleName string mangle后的符号名 + * FileName string dwarf对应文件路径 * LineNum uint32 行号 * Offset uint64 地址偏移 * CodeMapEndAddr uint64 结束地址 * CodeMapAddr uint64 初始地址 + * MntPoint string 挂载点 * BranchRecords * FromAddr uint64 起始地址 * ToAddr uint64 跳转地址 diff --git a/docs/Python_API.md b/docs/Python_API.md index 6a2760e8a606a2653c696a0e02d7885a4449813c..a822acdee8dbc7c21f1400e252e9258bc5324146 100644 --- a/docs/Python_API.md +++ b/docs/Python_API.md @@ -145,14 +145,14 @@ pd为kperf.open返回值 * module 模块名称 * symbolName 符号名 * mangleName mangle后的符号名 + * fileName dwarf文件路径 * lineNum 行号 * offset 地址偏移 * codeMapEndAddr 结束地址 * codeMapAddr 初始地址 - * count 个数 + * mntPoint 挂载点 * next 下一个stack * prev 前一个stack - * count 计数 * evt: 事件 * ts: Pmu采集时间戳 * pid: 进程ID diff --git a/go/src/libkperf/kperf/kperf.go b/go/src/libkperf/kperf/kperf.go index bd67a8b9b5e045ec569b2189036cf687873a44a4..8dd4886ab0f768c086ce8ef01eed371419d6b1b4 100644 --- a/go/src/libkperf/kperf/kperf.go +++ b/go/src/libkperf/kperf/kperf.go @@ -1402,7 +1402,8 @@ func (data *PmuData) appendSymbols(pmuData C.struct_PmuData) { LineNum:uint32(cSymbol.lineNum), Offset:uint64(cSymbol.offset), CodeMapEndAddr:uint64(cSymbol.codeMapEndAddr), - CodeMapAddr:uint64(cSymbol.codeMapAddr)} + CodeMapAddr:uint64(cSymbol.codeMapAddr), + MntPoint:C.GoString(cSymbol.mntPoint)} symbols = append(symbols, oneSymbol) } curStack = curStack.next diff --git a/go/src/libkperf/sym/sym.go b/go/src/libkperf/sym/sym.go index 0e8326856e9ae7e1f08053b08d4bf2e125d98a61..10016612d2b1c668bb0f36916531acd932ddd6f8 100644 --- a/go/src/libkperf/sym/sym.go +++ b/go/src/libkperf/sym/sym.go @@ -36,6 +36,7 @@ type Symbol struct { Offset uint64 // offset relateive to the start address CodeMapEndAddr uint64 // function end address CodeMapAddr uint64 // real srcAddr of Asm Code or + MntPoint string // mount point cSymbol *C.struct_Symbol // pointer of C source symbol } @@ -249,6 +250,7 @@ func getGoSymbol(cSymbol *C.struct_Symbol) Symbol { Offset:uint64(cSymbol.offset), CodeMapEndAddr:uint64(cSymbol.codeMapEndAddr), CodeMapAddr:uint64(cSymbol.codeMapAddr), + MntPoint:C.GoString(cSymbol.mntPoint), cSymbol: cSymbol} } diff --git a/python/modules/_libkperf/Symbol.py b/python/modules/_libkperf/Symbol.py index 97819f11604c12a11922bcf3a7991669b88cfe0a..979cb67f8b9bc6a366fc9fd79c7705db8d40cc0d 100644 --- a/python/modules/_libkperf/Symbol.py +++ b/python/modules/_libkperf/Symbol.py @@ -29,7 +29,7 @@ class CtypesSymbol(ctypes.Structure): unsigned long offset; unsigned long codeMapEndAddr; // function end address unsigned long codeMapAddr; // real srcAddr of Asm Code or - __u64 count; + char* mntPoint; // mount point }; """ @@ -43,7 +43,7 @@ class CtypesSymbol(ctypes.Structure): ('offset', ctypes.c_ulong), ('codeMapEndAddr', ctypes.c_ulong), ('codeMapAddr', ctypes.c_ulong), - ('count', ctypes.c_uint64) + ('mntPoint', ctypes.c_char_p), ] def __init__(self, @@ -56,7 +56,7 @@ class CtypesSymbol(ctypes.Structure): offset= 0, codeMapEndAddr= 0, codeMapAddr= 0, - count= 0, + mntPoint='', *args, **kw): super(CtypesSymbol, self).__init__(*args, **kw) self.addr = ctypes.c_ulong(addr) @@ -71,12 +71,12 @@ class CtypesSymbol(ctypes.Structure): self.codeMapEndAddr = ctypes.c_ulong(codeMapEndAddr) self.codeMapAddr = ctypes.c_ulong(codeMapAddr) - self.count = ctypes.c_uint64(count) + self.mntPoint = ctypes.c_char_p(mntPoint.encode(UTF_8)) class Symbol: - __slots__ = ['__c_sym','__module', '__symbolName', '__mangleName', '__fileName'] + __slots__ = ['__c_sym','__module', '__symbolName', '__mangleName', '__fileName', '__mntPoint'] def __init__(self, addr= 0, @@ -88,7 +88,7 @@ class Symbol: offset= 0, codeMapEndAddr= 0, codeMapAddr= 0, - count= 0): + mntPoint= ''): self.__c_sym = CtypesSymbol( addr=addr, module=module, @@ -99,7 +99,7 @@ class Symbol: offset=offset, codeMapEndAddr=codeMapEndAddr, codeMapAddr=codeMapAddr, - count=count + mntPoint=mntPoint ) @property @@ -153,6 +153,16 @@ class Symbol: @fileName.setter def fileName(self, fileName): self.c_sym.fileName = ctypes.c_char_p(fileName.encode(UTF_8)) + + @property + def mntPoint(self): + if not self.__mntPoint and self.c_sym.mntPoint: + self.__mntPoint = self.c_sym.mntPoint.decode(UTF_8) + return self.__mntPoint + + @mntPoint.setter + def mntPoint(self, mntPoint): + self.c_sym.mntPoint = ctypes.c_char_p(mntPoint.encode(UTF_8)) @property def lineNum(self): @@ -186,14 +196,6 @@ class Symbol: def codeMapAddr(self, codeMapAddr): self.c_sym.codeMapAddr = ctypes.c_ulong(codeMapAddr) - @property - def count(self): - return self.c_sym.count - - @count.setter - def count(self, count): - self.c_sym.count = ctypes.c_uint64(count) - @classmethod def from_c_sym(cls, c_sym): symbol = cls() @@ -202,6 +204,7 @@ class Symbol: symbol.__symbolName = None symbol.__mangleName = None symbol.__fileName = None + symbol.__mntPoint = None return symbol @@ -211,7 +214,6 @@ class CtypesStack(ctypes.Structure): struct Symbol* symbol; // symbol info for current stack struct Stack* next; // points to next position in stack struct Stack* prev; // points to previous position in stack - __u64 count; } __attribute__((aligned(64))); """ pass @@ -220,8 +222,7 @@ class CtypesStack(ctypes.Structure): CtypesStack._fields_ = [ ('symbol', ctypes.POINTER(CtypesSymbol)), ('next', ctypes.POINTER(CtypesStack)), - ('prev', ctypes.POINTER(CtypesStack)), - ('count', ctypes.c_uint64) + ('prev', ctypes.POINTER(CtypesStack)) ] @@ -232,14 +233,11 @@ class Stack(object): def __init__(self, symbol= None, next= None, - prev= None, - count= 0): + prev= None): self.__c_stack = CtypesStack( symbol=symbol.c_sym if symbol else None, next=next.c_stack if next else None, - prev=prev.c_stack if prev else None, - count=count - ) + prev=prev.c_stack if prev else None) @property def c_stack(self): @@ -266,7 +264,6 @@ class Stack(object): def next(self, next): self.c_stack.next = next.c_stack if next else None - @property def prev(self): if not self.__prev: @@ -277,14 +274,6 @@ class Stack(object): def prev(self, prev): self.c_stack.prev = prev.c_stack if prev else None - @property - def count(self): - return self.c_stack.count - - @count.setter - def count(self, count): - self.c_stack.count = ctypes.c_uint64(count) - @classmethod def from_c_stack(cls, c_stack): stack = cls() diff --git a/python/modules/ksym/symbol.py b/python/modules/ksym/symbol.py index dfc34fcf29608f033fabebfae695151d57a71f40..406aa11ddd4a752eaaa0d42c9b410d656be36b75 100644 --- a/python/modules/ksym/symbol.py +++ b/python/modules/ksym/symbol.py @@ -28,7 +28,7 @@ class Symbol(_libkperf.Symbol): offset = 0, codeMapEndAddr = 0, codeMapAddr = 0, - count = 0): + mntPoint = ''): super(Symbol, self).__init__( addr=addr, module=module, @@ -38,7 +38,7 @@ class Symbol(_libkperf.Symbol): offset=offset, codeMapEndAddr=codeMapEndAddr, codeMapAddr=codeMapAddr, - count=count + mntPoint=mntPoint, ) @@ -47,13 +47,11 @@ class Stack(_libkperf.Stack): def __init__(self, symbol = None, next = None, - prev = None, - count = 0): + prev = None): super(Stack, self).__init__( symbol=symbol.c_sym if symbol else None, next=next.c_stack if next else None, prev=prev.c_stack if prev else None, - count=count )