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