public IEnumerable <KeyValuePair <string, ulong> > GetSavedRegisters() { var layout = _Provider.GetThreadLayout(_Evaluator); var sp = _Evaluator.EvaluateIntegralExpression(GetFieldExpression("sp")) ?? 0; var lr = _Evaluator.EvaluateIntegralExpression(GetFieldExpression("stack_frame")) ?? 0; if (sp == 0 || lr == 0) { return(new KeyValuePair <string, ulong> [0]); } StackLayoutBuilder builder = new StackLayoutBuilder(); builder.AddRegisters("r", 4, 11); if ((lr & 0x10) == 0) { builder.AddRegisters("s", 16, 31); } builder.AddRegisters("r", 0, 3); builder.AddRegisters("r12", "lr", "pc"); builder.Skip(4); return(builder.FetchValues(sp, _Evaluator)); }
public IEnumerable <KeyValuePair <string, ulong> > GetSaved64BitRegisters() { StackLayoutBuilder builder = new StackLayoutBuilder(8); var tmpBlock = _Evaluator.ReadMemoryBlock($"0x{_SavedSP:x8}", 16); builder.Skip(16); if (BitConverter.ToUInt64(tmpBlock, 0) != 0) { builder.AddZigZagRegisterSequence("q", 31, 0); } builder.AddSingleRegister("pc"); builder.Skip(); builder.AddZigZagRegisterSequence("x", 31, 0); builder.VerifyPosition(0x120); return(builder.FetchValues(_SavedSP, _Evaluator)); }