From 31310c781be5ca037878e7cb6ca4044b6c9598e7 Mon Sep 17 00:00:00 2001
From: pompolic <pompolic@special-circumstanc.es>
Date: Wed, 13 Apr 2022 21:06:55 +0200
Subject: [PATCH] Remove duplicated code

Fix breakpoint_manager not using its own retq finding function
---
 gdb-port/breakpoint-manager.py              |  2 +-
 gdb-port/parser-name-instrumentation-gdb.py | 29 ---------------------
 2 files changed, 1 insertion(+), 30 deletions(-)

diff --git a/gdb-port/breakpoint-manager.py b/gdb-port/breakpoint-manager.py
index d94bd46..82abe9e 100644
--- a/gdb-port/breakpoint-manager.py
+++ b/gdb-port/breakpoint-manager.py
@@ -51,7 +51,7 @@ class BreakpointManager:
 		plp_retq = self.locate_perform_lowlevel_parse_retq()
 		perform_lowlevel_parse_ret = PerformLowLevelParseRetBreakpoint("*" + hex(plp_retq))
 		self.hammer_retq_breakpoints.append(perform_lowlevel_parse_ret)
-		hpp_retq = locate_h_packrat_parse_retq()
+		hpp_retq = self.locate_h_packrat_parse_retq()
 		h_packrat_parse_ret = HPackratParseRetBreakpoint("*" + hex(hpp_retq))
 		self.hammer_retq_breakpoints.append(h_packrat_parse_ret)
 		return self.hammer_retq_breakpoints
diff --git a/gdb-port/parser-name-instrumentation-gdb.py b/gdb-port/parser-name-instrumentation-gdb.py
index 250f250..97bd0fd 100644
--- a/gdb-port/parser-name-instrumentation-gdb.py
+++ b/gdb-port/parser-name-instrumentation-gdb.py
@@ -556,35 +556,6 @@ class HammerParserCurrentEnv(gdb.Command):
 
 HammerParserCurrentEnv()
 
-#TODO: move all this to BreakpointManager?
-# Call when execution stopped at breakpoint in main
-def locate_perform_lowlevel_parse_retq():
-	arch = gdb.selected_frame().architecture()
-	p_l_p_sym = gdb.lookup_symbol("perform_lowlevel_parse")[0]
-	p_l_p_address = int(p_l_p_sym.value().address)
-	# The choice of disassembling only 400 instructions from the start is arbitrary. (This function is 310 bytes long on this particular machine.) There is probably a way to find out where a function ends.
-	instructions = arch.disassemble(p_l_p_address, p_l_p_address+400)
-	results = [ ins["addr"] for ins in instructions if ins["asm"].startswith("ret") ]
-	return results[0]
-
-def locate_h_packrat_parse_retq():
-	arch = gdb.selected_frame().architecture()
-	h_p_p_sym = gdb.lookup_symbol("h_packrat_parse")[0]
-	h_p_p_address = int(h_p_p_sym.value().address)
-	# Same as with perform_lowlevel_parse, +450 is arbitrary
-	instructions = arch.disassemble(h_p_p_address, h_p_p_address+450)
-	results = [ ins["addr"] for ins in instructions if ins["asm"].startswith("ret") ]
-	return results[0]
-
-def locate_init_parser_retq():
-	arch = gdb.selected_frame().architecture()
-	i_p_sym = gdb.lookup_symbol("init_parser")[0]
-	i_p_address = int(i_p_sym.value().address)
-	# Same as with perform_lowlevel_parse, +16000 is arbitrary
-	instructions = arch.disassemble(i_p_address, i_p_address+16000)
-	results = [ ins["addr"] for ins in instructions if ins["asm"].startswith("ret") ]
-	return results[0]
-
 def locate_retqs(symbol, length):
 	arch = gdb.selected_frame().architecture()
 	sym = gdb.lookup_symbol(symbol)[0]
-- 
GitLab