Esempio n. 1
0
        private void CheckRequiredRegistersAvailable()
        {
            ArmRegisterCollection regs = CPU.Registers;

            // We need SP, LR, PC, CPSR
            bool sp   = regs.Contains(TArmRegisterType.EArmReg_SP);
            bool lr   = regs.Contains(TArmRegisterType.EArmReg_LR);
            bool pc   = regs.Contains(TArmRegisterType.EArmReg_PC);
            bool cpsr = regs.Contains(TArmRegisterType.EArmReg_CPSR);
            //
            bool available = (sp && lr && pc && cpsr);

            if (!available)
            {
                SymbianUtils.SymDebug.SymDebugger.Break();
                throw new ArgumentException("One or more registers is unavailable");
            }
        }
Esempio n. 2
0
        private bool AddLRAndPC()
        {
            bool addedLRandPC = false;
            //
            ArmRegisterCollection regs = base.Engine.Registers;

            // If we're inside the stack address range, then poke in the PC and LR values
            if (regs.Count > 0)
            {
                // Working bottom up, so LR should go on the stack first
                if (regs.Contains(TArmRegisterType.EArmReg_LR))
                {
                    ArmRegister regLR = regs[TArmRegisterType.EArmReg_LR];

                    StackOutputEntry entryLR = new StackOutputEntry(0, regLR.Value, base.DebugEngineView);
                    entryLR.IsRegisterBasedEntry       = true;
                    entryLR.IsOutsideCurrentStackRange = true;
                    entryLR.AssociatedRegister         = regLR.RegType;
                    EmitElement(entryLR);
                }

                // Then the PC...
                if (regs.Contains(TArmRegisterType.EArmReg_PC))
                {
                    ArmRegister regPC = regs[TArmRegisterType.EArmReg_PC];

                    StackOutputEntry entryPC = new StackOutputEntry(0, regPC.Value, base.DebugEngineView);
                    entryPC.IsRegisterBasedEntry       = true;
                    entryPC.IsOutsideCurrentStackRange = true;
                    entryPC.AssociatedRegister         = regPC.RegType;
                    EmitElement(entryPC);
                }

                // Even if they weren't added, we at least attempted to addd them
                addedLRandPC = true;
            }

            return(addedLRandPC);
        }