Exemplo n.º 1
0
        void LineComplete(ParserElementBase aElement)
        {
            ParserLine       line      = (ParserLine)aElement;
            TUserContextType tableType = (TUserContextType)line.Tag;
            UserContextTable table     = CrashDebugger.UserContextTableManager[tableType];

            // Each line should have a known number of entries stored within it's field collection.
            int expectedCount = UserContextTable.EntryCount * 2; // 2 fields per table entry
            int actualCount   = line.Count;

            if (expectedCount == actualCount)
            {
                for (int i = 0; i < expectedCount; i += 2)
                {
                    ParserField fieldType  = line[i + 0];
                    ParserField fieldValue = line[i + 1];
                    //
                    if (fieldType.IsUint && fieldValue.IsUint)
                    {
                        UserContextTable.TArmRegisterIndex reg = (UserContextTable.TArmRegisterIndex)(i / 2);
                        UserContextTableEntry entry            = table[reg];
                        //
                        UserContextTableEntry.TType type = (UserContextTableEntry.TType)fieldType.AsUint;
                        byte value = (byte)fieldValue.AsUint;
                        //
                        entry.Type   = type;
                        entry.Offset = value;
                    }
                }
            }
            else
            {
                throw new Exception("User Context Table Corruption");
            }
        }
Exemplo n.º 2
0
        public UserContextTableManager()
        {
            Array vals = Enum.GetValues(typeof(TUserContextType));

            foreach (object val in vals)
            {
                TUserContextType value = (TUserContextType)val;
                iTables.Add(new UserContextTable(value));
            }
        }
Exemplo n.º 3
0
        public void Dump()
        {
            int i = 0;

            foreach (UserContextTable table in iTables)
            {
                TUserContextType type = (TUserContextType)i;
                string           text = table.ToString();
                System.Diagnostics.Debug.WriteLine(string.Format("Table[{0:d2}] = {1} {2}", i, text, type));
                i++;
            }
        }
Exemplo n.º 4
0
        public UserContextTable(TUserContextType aType)
        {
            iType = aType;
            //
            List <UserContextTableEntry> entries = new List <UserContextTableEntry>();
            int count = EntryCount;

            for (int i = 0; i < count; i++)
            {
                UserContextTableEntry entry = new UserContextTableEntry();
                entries.Add(entry);
            }
            //
            iEntries = entries.ToArray();
        }
Exemplo n.º 5
0
 public UserContextTable this[TUserContextType aType]
 {
     get
     {
         UserContextTable ret = null;
         //
         foreach (UserContextTable table in iTables)
         {
             if (table.Type == aType)
             {
                 ret = table;
                 break;
             }
         }
         //
         if (ret == null)
         {
             throw new ArgumentException();
         }
         //
         return(ret);
     }
 }