1
0

proj/test-interrupts: Output well-formatted report

This commit is contained in:
2025-05-06 15:49:50 +02:00
parent f16a901207
commit b29e8fb7d9
5 changed files with 217 additions and 148 deletions

View File

@@ -26,6 +26,40 @@ StructMsgHdr = TypedDict('StructMsgHdr', {})
RET_ADDR_RE = re.compile(r': *((0x)?[0-9a-fA-Fx]+) *\((.+?)\+(.+?)(, *([^:]+?))?(, *(([^:]+?):([0-9]+)))?\)$')
class FunctionCallId:
func_name: str
ret_addr: int
obj_path: str
rel_ret_addr: int
sym_name: Optional[str]
src_file_name: Optional[str]
src_line_num: Optional[int]
@property
def obj_name(self) -> str:
return self.obj_path.split('/')[-1]
@property
def discriminator(self) -> str:
discr = [f'{self.obj_name}+0x{self.rel_ret_addr:x}']
if self.sym_name:
discr.append(self.sym_name)
if self.src_file_name and self.src_line_num:
discr.append(f'{self.src_file_name}:{self.src_line_num}')
return ', '.join(discr)
def __eq__(self, other) -> bool:
if not isinstance(other, FunctionCallId):
return False
return (self.func_name, self.obj_path, self.rel_ret_addr) == (other.func_name, other.obj_path, other.rel_ret_addr)
def __hash__(self) -> int:
return hash((self.func_name, self.obj_path, self.rel_ret_addr))
def __str__(self) -> str:
return self.func_name + ', ' + self.discriminator
class ThreadedUnixStreamServer(ThreadingMixIn, UnixStreamServer):
pass
@@ -51,6 +85,17 @@ class Parser:
self.pid = None
self.path = None
def get_call_id(self, func_name: str) -> FunctionCallId:
call_id = FunctionCallId()
call_id.func_name = func_name
call_id.ret_addr = self.ret_addr
call_id.obj_path = self.dli_file_name
call_id.rel_ret_addr = self.rel_ret_addr
call_id.sym_name = self.dli_sym_name
call_id.src_file_name = self.src_file_name
call_id.src_line_num = self.src_line_num
return call_id
def before(self) -> None: pass
def after(self) -> None: pass
def before_fallback(self, func_name: str, *args) -> str: pass