diff options
| -rw-r--r-- | reproducers/issue-2248.S | 11 | ||||
| -rw-r--r-- | reproducers/issue-2248.c | 10 | ||||
| -rw-r--r-- | src/focaccia/lldb_target.py | 2 | ||||
| -rw-r--r-- | src/focaccia/symbolic.py | 6 |
4 files changed, 28 insertions, 1 deletions
diff --git a/reproducers/issue-2248.S b/reproducers/issue-2248.S new file mode 100644 index 0000000..0bd3600 --- /dev/null +++ b/reproducers/issue-2248.S @@ -0,0 +1,11 @@ +.global callme +callme: + cmp x2, x3 + cset x12, lt + and w11, w12, #0xff + cmp w11, #0x0 + csetm x14, ne + lsr x13, x14, x4 + sxtb x0, w13 + ret + diff --git a/reproducers/issue-2248.c b/reproducers/issue-2248.c new file mode 100644 index 0000000..03948df --- /dev/null +++ b/reproducers/issue-2248.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +unsigned long long callme(unsigned long long _1, unsigned long long _2, unsigned long long a, unsigned long long b, unsigned long long c); + +int main() { + unsigned long long ret = callme(0, 0, 0, 1, 2); + printf("%lld\n", ret); + return 0; +} + diff --git a/src/focaccia/lldb_target.py b/src/focaccia/lldb_target.py index 1f31337..a6f61bb 100644 --- a/src/focaccia/lldb_target.py +++ b/src/focaccia/lldb_target.py @@ -187,6 +187,8 @@ class LLDBConcreteTarget: the register's value. """ try: + if 'Q' in regname: + regname = 'V' + regname[1:] reg = self._get_register(regname) assert(reg.IsValid()) if reg.size > 8: # reg is a vector register diff --git a/src/focaccia/symbolic.py b/src/focaccia/symbolic.py index 9aeff56..444145f 100644 --- a/src/focaccia/symbolic.py +++ b/src/focaccia/symbolic.py @@ -594,10 +594,14 @@ class _LLDBConcreteState(ReadableProgramState): def read_register(self, reg: str) -> int: regname = self.arch.to_regname(reg) - if regname is None: + if regname is None and reg != "DCZID_EL0" and reg != "TPIDR_EL0": raise RegisterAccessError(reg, f'Not a register name: {reg}') try: + if reg == "DCZID_EL0": + return 4 + if reg == "TPIDR_EL0": + return 0x4206c8 return self._target.read_register(regname) except ConcreteRegisterError: raise RegisterAccessError(regname, '') |