コード例 #1
0
 public T32(T32_Info_type info, Dictionary <string, RelocableType> reloc)
 {
     t32          = new T32API();
     T32_type     = info;
     T32_reloc    = reloc;
     this.cpuType = getCPUType(info.subSystem);
 }
コード例 #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            //clear up
            targetLabel.Text = "";
            if (CrashFiles != null && CrashFiles.Count > 0)
            {
                CrashFiles.Clear();
            }
            //end clear
            char[] slashesToTrim = new char[] { '\\', '/' };
            this.txtDump.Text = this.txtDump.Text.Trim().TrimEnd(slashesToTrim);
            this.txtElf.Text  = this.txtElf.Text.Trim().TrimEnd(slashesToTrim);
            T32_Info_type info = new T32_Info_type();

            info.subSystem = "modem";
            info.CPU_name  = "HexagonV55";
            ProcessSubD(this.txtDump.Text, this.txtElf.Text, ref info);
            Cursor.Current = Cursors.Default;
            this.Refresh();
            Thread simulatorThread = new Thread(
                new ThreadStart(delegate()
            {
                T32 tModem;
                if (cf == null)
                {
                    MessageBox.Show("OCIMEM not found");
                    tModem = new LeEcoDebugger.T32(info);
                }
                else
                {
                    tModem = new LeEcoDebugger.T32(info, cf.reloc);
                }
                tModem.loadRamDump();
            }
                                ));

            simulatorThread.Start();
            Cursor.Current = Cursors.WaitCursor;
            simulatorThread.Join();
            this.Close();
        }
コード例 #3
0
        //update t_type
        private void ProcessSubD(string dumpPath, string elfPath, ref T32_Info_type t_type)
        {
            t_type.elfPath  = elfPath;
            t_type.dumpPath = dumpPath;
            Dictionary <string, string> elfName = new Dictionary <string, string>();

            var elfN = Directory.GetFiles(elfPath, "*.elf", SearchOption.AllDirectories);

            foreach (var elf in elfN)
            {
                //modem
                if (elf.Contains("orig_MODEM_PROC"))
                {
                    t_type.elfPath = Path.Combine(elfPath, elf);
                    break;
                }
            }
            List <string> items = new List <string>();

            string[] supportedExtensions = new string[] { ".bin", ".cmm" };
            var      files = Directory.GetFiles(dumpPath, "*.*", SearchOption.AllDirectories);

            foreach (var fl in files)
            {
                if (supportedExtensions.Contains(Path.GetExtension(fl).ToLower()))
                {
                    items.Add(fl);
                }
            }
            //parse OCIMEM
            //PorcessOCIMEM(dumpPath, )
            string cmm = Path.Combine(dumpPath, "load.cmm");

            if (!items.Contains(cmm))
            {
                MessageBox.Show("load.cmm not found! Pls check");
                return;
            }
            //parse load.cmm
            FileStream   stream = null;
            StreamReader reader = null;

            try
            {
                if (Util.fileExists(cmm))
                {
                    FileInfo f = new FileInfo(cmm);
                    stream = File.Open(cmm, FileMode.Open, FileAccess.Read, FileShare.Read);
                    reader = new StreamReader(stream);
                    string filename   = string.Empty;
                    uint   offset     = 0;
                    uint   skipOffset = 0;
                    while (!reader.EndOfStream)
                    {
                        string   line  = reader.ReadLine().Trim();
                        string[] parts = line.Split(' ');
                        //parse target
                        if (parts.Length == 4 && string.IsNullOrEmpty(targetLabel.Text))
                        {
                            if (parts[3].Contains("8976"))
                            {
                                targetLabel.Text  = string.Format("Current Target - MSM8976");
                                t_type.targetName = "MSM8976";
                                t_type.needBinary = "DDRCS1";
                                offset            = 0x59FFFFF;
                                skipOffset        = 0x0;
                            }
                            else if (parts[3].Contains("8996"))
                            {
                                t_type.targetName = "MSM8996";
                                targetLabel.Text  = string.Format("Current Target - MSM8996");
                                t_type.needBinary = "DDRCS0";
                            }
                        }
                        if (parts.Length > 2 && parts[1].Contains("OCIMEM") && parts[2].Substring(0, 2) == "0x")
                        {
                            filename = Path.Combine(dumpPath, parts[1]);
                            UInt64 memAddr = UInt64.Parse(parts[2].Substring(2), System.Globalization.NumberStyles.HexNumber);
                            if (Util.fileExists(filename))
                            {
                                //CrashFile OC_CF = new CrashFile(filename, memAddr, "OCIMEM");
                                cf = new CrashFile(filename, memAddr, "OCIMEM");
                                CrashFiles.Add(cf);
                                if (cf.MemStart == 0x8600000)
                                {
                                    ocOffset = 0;
                                }
                                PorcessOCIMEM(dumpPath, ref cf);
                            }
                        }
                        if (parts.Length >= 3 && parts[0].Equals("d.load.binary", StringComparison.InvariantCultureIgnoreCase) && parts[1].Contains(t_type.needBinary) && parts[2].Substring(0, 2) == "0x")
                        {
                            //common
                            filename = Path.Combine(dumpPath, parts[1]);
                            UInt64 memAddr = UInt64.Parse(parts[2].Substring(2), System.Globalization.NumberStyles.HexNumber);
                            if (Util.fileExists(filename))
                            {
                                CrashFiles.Add(new CrashFile(filename, memAddr));
                            }
                            //--- just for parse modem and need to optimize later
                            //verify binary is present or not
                            if (!Util.fileExists(dumpPath + "\\" + parts[1].ToString()))
                            {
                                return;
                            }
                            //8976

                            if (cf.reloc.ContainsKey("modem"))
                            {
                                parts[2]   = "0x" + (cf.reloc["modem"].startAddr).ToString("X");
                                offset     = cf.reloc["modem"].size - 1;
                                skipOffset = cf.reloc["modem"].startAddr - (uint)memAddr;
                            }
                            else
                            {
                                parts[2] = (0x86800000).ToString();
                            }

                            t_type.loadBinaryCommand = parts[0] + " " + Path.Combine(dumpPath, parts[1]) + " " + parts[2] + "++0x" + offset.ToString("X") + " " + "/SKIP " + "0x" + skipOffset.ToString("X");
                            //find
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                return;
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (stream != null)
                {
                    stream.Close();
                }
            }

            switch (t_type.subSystem)
            {
            case "modem":
                //need to have DDRCS0.BIN | load.cmm
                if (string.IsNullOrEmpty(t_type.loadBinaryCommand))
                {
                    return;
                }
                // verify elf
                if (string.IsNullOrEmpty(elfPath))
                {
                    return;
                }
                if (string.IsNullOrEmpty(t_type.elfPath))
                {
                    return;
                }
                break;

            default:
                break;
            }
            //verify dump and elf
        }
コード例 #4
0
 public T32(T32_Info_type info)
 {
     t32          = new T32API();
     T32_type     = info;
     this.cpuType = getCPUType(info.subSystem);
 }