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); } } }
// 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); }