From 9c44308b0c320adc3b66be82351552c00e284d33 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Mon, 27 Dec 2021 20:03:27 +0100 Subject: [PATCH] Unbreak retq breakpoint code --- gdb-port/parser-name-instrumentation-gdb.py | 43 +++++++++++---------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/gdb-port/parser-name-instrumentation-gdb.py b/gdb-port/parser-name-instrumentation-gdb.py index 85d53e1..4770e26 100644 --- a/gdb-port/parser-name-instrumentation-gdb.py +++ b/gdb-port/parser-name-instrumentation-gdb.py @@ -429,23 +429,6 @@ class HArenaMallocRawBreakpoint(gdb.Breakpoint): hammer_retq_breakpoints = [] -class PDFMainBreakpoint(gdb.Breakpoint): - def stop(self): - breakpoints = self.set_hammer_retq_breakpoints() - hammer_retq_breakpoints = breakpoints - - return True - - def set_hammer_retq_breakpoints(self): - breakpoints = [] - plp_retq = locate_perform_lowlevel_parse_retq() - perform_lowlevel_parse_ret = PerformLowLevelParseRetBreakpoint("*" + hex(plp_retq)) - breakpoints.append(perform_lowlevel_parse_ret) - hpp_retq = locate_h_packrat_parse_retq() - h_packrat_parse_ret = HPackratParseRetBreakpoint("*" + hex(hpp_retq)) - breakpoints.append(h_packrat_parse_ret) - return breakpoints - class BreakpointManager(): def __init__(self): self.hammer_retq_breakpoints = [] @@ -489,11 +472,29 @@ class BreakpointManager(): self.parse_whitespace = None self.parse_xor = None - def set_h_rule_breakpoints() + def set_h_rule_breakpoints(): for func in H_RULE_FUNCTIONS: - func_retq = locate_retq(func[0], func[1]) - self.h_rule_breakpoints[func] = HRuleBreakpoint("*" + hex(func_retq)) + func_retq = locate_retq(func[0], func[1]) + self.h_rule_breakpoints[func] = HRuleBreakpoint("*" + hex(func_retq)) +breakpoint_manager = BreakpointManager() + +class PDFMainBreakpoint(gdb.Breakpoint): + def stop(self): + breakpoints = self.set_hammer_retq_breakpoints() + breakpoint_manager.hammer_retq_breakpoints = breakpoints + + return True + + def set_hammer_retq_breakpoints(self): + breakpoints = [] + plp_retq = locate_perform_lowlevel_parse_retq() + perform_lowlevel_parse_ret = PerformLowLevelParseRetBreakpoint("*" + hex(plp_retq)) + breakpoints.append(perform_lowlevel_parse_ret) + hpp_retq = locate_h_packrat_parse_retq() + h_packrat_parse_ret = HPackratParseRetBreakpoint("*" + hex(hpp_retq)) + breakpoints.append(h_packrat_parse_ret) + return breakpoints # GDB parameters # TODO: hammer parameter prefix @@ -697,7 +698,7 @@ def del_hammer_retq_breakpoints(breakpoints): def exit_handler(event): #breakpoints = [ perform_lowlevel_parse_ret, h_packrat_parse_ret ] #del_hammer_retq_breakpoints(breakpoints) - del_hammer_retq_breakpoints(hammer_retq_breakpoints) + del_hammer_retq_breakpoints(breakpoint_manager.hammer_retq_breakpoints) gdb.events.exited.connect(exit_handler) -- GitLab