about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-23 10:37:38 +0000
committerTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-11-06 17:20:13 +0000
commite3679a8e54c00579b62180ac57b612c5ad8a30eb (patch)
tree95d30c62cde6256590b50aeeac75a734050ca7d2 /src
parent438c12d725b9f35d7d2008e2ef51294a514f2876 (diff)
downloadfocaccia-e3679a8e54c00579b62180ac57b612c5ad8a30eb.tar.gz
focaccia-e3679a8e54c00579b62180ac57b612c5ad8a30eb.zip
Update LLDB target to include retry lists for some register names (useful because GDB stubs differ in how they expose the same register)
Diffstat (limited to 'src')
-rw-r--r--src/focaccia/lldb_target.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py
index b0d7dd6..2edc2cc 100644
--- a/src/focaccia/lldb_target.py
+++ b/src/focaccia/lldb_target.py
@@ -44,6 +44,13 @@ class LLDBConcreteTarget:
         x86.archname: x86.decompose_rflags,
     }
 
+    register_retries = {
+        aarch64.archname: {},
+        x86.archname: {
+            "rflags": ["eflags"]
+        }
+    }
+
     def __init__(self,
                  debugger: lldb.SBDebugger,
                  target: lldb.SBTarget,
@@ -146,11 +153,17 @@ class LLDBConcreteTarget:
                                       can be found.
         """
         frame = self.process.GetThreadAtIndex(0).GetFrameAtIndex(0)
-        reg = frame.FindRegister(regname)
+
+        retry_list = self.register_retries[self.archname].get(regname, [])
+        error_msg = f'[In LLDBConcreteTarget._get_register]: Register {regname} not found'
+
+        reg = None
+        for name in [regname, *retry_list]:
+            reg = frame.FindRegister(name)
+            if reg.IsValid():
+                break
         if not reg.IsValid():
-            raise ConcreteRegisterError(
-                f'[In LLDBConcreteTarget._get_register]: Register {regname}'
-                f' not found.')
+            raise ConcreteRegisterError(error_msg)
         return reg
 
     def read_flags(self) -> dict[str, int | bool]: