From f2c7e4befc5e258b560cfd2befa657f169be1bc8 Mon Sep 17 00:00:00 2001 From: "lijindong (C)" <2220386943@qq.com> Date: Fri, 5 Dec 2025 10:07:51 +0800 Subject: [PATCH] =?UTF-8?q?go=EF=BC=8Cpython=E5=A2=9E=E5=8A=A0mntPoint?= =?UTF-8?q?=EF=BC=8C=E8=B5=84=E6=96=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/C_C++_API.md | 3 +- docs/Go_API.md | 2 ++ docs/Python_API.md | 4 +-- go/src/libkperf/kperf/kperf.go | 3 +- go/src/libkperf/sym/sym.go | 2 ++ python/modules/_libkperf/Symbol.py | 53 ++++++++++++------------------ python/modules/ksym/symbol.py | 8 ++--- 7 files changed, 33 insertions(+), 42 deletions(-) diff --git a/docs/C_C++_API.md b/docs/C_C++_API.md index 892ae8d..82bd6bf 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 d989f20..be9a7bb 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 6a2760e..a822acd 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 bd67a8b..8dd4886 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 0e83268..1001661 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 97819f1..979cb67 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 dfc34fc..406aa11 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 ) -- Gitee