Пример #1
0
        static void Main(string[] args)
        {
            bool            trace = false;
            ArmElfLibReader t     = null;

            foreach (string s in args)
            {
                if (s == "/t")
                {
                    trace = true;
                    continue;
                }
                try {
                    if (t == null)
                    {
                        t = new ArmElfLibReader(s, trace);
                    }
                    else
                    {
                        string     name;
                        FileStream lib = t.GetLibraryFile(s, out name);
                        if (name == null)
                        {
                            name = "<<null>>";
                        }
                        Console.WriteLine("-- Looked up {0}, returned {1}", s, name);
                    }
                } catch (Exception e) {
                    Console.WriteLine("Caught exception:\n\t{0}", e);
                }
            }
        }
Пример #2
0
        // searches the library for unresolved symbols
        // the result is true if new symbols were added
        private bool searchLibrary(string currFileName)
        {
            if (AssemblerErrors.ErrorReports.Count > 0)
            {
                return(false); // don't bother searching if there were errors
            }
            bool result = false;

            using (ArmElfLibReader archive = new ArmElfLibReader(currFileName))
            {
                IList <ArmFileInfo> newLibMembers = new List <ArmFileInfo>();
                bool progress = true;
                while (progress)
                {
                    progress = false;
                    IList <string> defined = new List <string>();
                    // copy the list of externals so that we can modify it inside the loop
                    string[] externs = new string[externSymbols.Keys.Count];
                    externSymbols.Keys.CopyTo(externs, 0);
                    foreach (string sy in externs)
                    {
                        if (globalSymbols.ContainsKey(sy))
                        {
                            defined.Add(sy);
                            continue;
                        }
                        string     fn;
                        FileStream member = archive.GetLibraryFile(sy, out fn);
                        if (member == null)
                        {
                            continue;
                        }
                        defined.Add(sy);
                        ArmFileInfo fileInfo = new ObjFileInfo(member, currFileName, fn, globalSymbols, externSymbols);
                        newLibMembers.Add(fileInfo);
                        fileInfo.Pass = pass;
                        fileInfo.StartPass(); // this call might change externSymbols
                        progress = true;
                        result   = true;
                    }
                    foreach (string sy in defined)
                    {
                        externSymbols.Remove(sy);
                    }
                }
                foreach (ArmFileInfo af in newLibMembers)
                {
                    FileInfoTable.Add(af);
                    fileList.Add(af.FileName);
                }
            }
            return(result);
        }