private bool IsFloatingPointEmulatorFixup(Fixup fixup) { ExternalSymbol symbol = fixup.Target.Referent as ExternalSymbol; if (symbol == null) { return(false); } switch (symbol.Name) { case "FIARQQ": case "FICRQQ": case "FIDRQQ": case "FIERQQ": case "FISRQQ": case "FIWRQQ": case "FJARQQ": case "FJCRQQ": case "FJSRQQ": return(true); default: return(false); } }
/// <summary> /// Returns null if LibraryEnd record is encountered before /// MODEND or MODEND32 record is encountered. /// </summary> /// <param name="reader"></param> /// <returns></returns> private static ObjectModule LoadObject(FileFormats.Omf.Records.RecordContext context) { ObjectModule module = new ObjectModule(); Dictionary<object, object> objectMap = new Dictionary<object, object>(); // Convert meta-data. module.Name = context.ObjectName; module.SourceName = context.SourceName; // Convert segments. foreach (SegmentDefinition def in context.Segments) { LogicalSegment segment = ConvertSegmentDefinition(def, objectMap, module); objectMap[def] = segment; module.Segments.Add(segment); } // Convert segment groups. foreach (GroupDefinition def in context.Groups) { SegmentGroup group = ConvertGroupDefinition(def, objectMap); module.Groups.Add(group); objectMap[def] = group; } // Convert external names. foreach (ExternalNameDefinition def in context.ExternalNames) { ExternalSymbol symbol = new ExternalSymbol { Name = def.Name, TypeIndex = def.TypeIndex, }; module.ExternalNames.Add(symbol); objectMap[def] = symbol; } // Convert aliases. foreach (AliasDefinition def in context.Aliases) { module.Aliases.Add(new SymbolAlias { AliasName = def.AliasName, SubstituteName = def.SubstituteName }); } // Convert public names. foreach (PublicNameDefinition def in context.PublicNames) { module.DefinedNames.Add(ConvertPublicNameDefinition(def, objectMap)); } // Convert fixups. foreach (SegmentDefinition def in context.Segments) { LogicalSegment segment = (LogicalSegment)objectMap[def]; foreach (FixupDefinition f in def.Fixups) { segment.Fixups.Add(ConvertFixupDefinition(f, objectMap)); } } return module; }
/// <summary> /// Returns null if LibraryEnd record is encountered before /// MODEND or MODEND32 record is encountered. /// </summary> /// <param name="reader"></param> /// <returns></returns> private static ObjectModule LoadObject(FileFormats.Omf.Records.RecordContext context) { ObjectModule module = new ObjectModule(); Dictionary <object, object> objectMap = new Dictionary <object, object>(); // Convert meta-data. module.Name = context.ObjectName; module.SourceName = context.SourceName; // Convert segments. foreach (SegmentDefinition def in context.Segments) { LogicalSegment segment = ConvertSegmentDefinition(def, objectMap, module); objectMap[def] = segment; module.Segments.Add(segment); } // Convert segment groups. foreach (GroupDefinition def in context.Groups) { SegmentGroup group = ConvertGroupDefinition(def, objectMap); module.Groups.Add(group); objectMap[def] = group; } // Convert external names. foreach (ExternalNameDefinition def in context.ExternalNames) { ExternalSymbol symbol = new ExternalSymbol { Name = def.Name, TypeIndex = def.TypeIndex, }; module.ExternalNames.Add(symbol); objectMap[def] = symbol; } // Convert aliases. foreach (AliasDefinition def in context.Aliases) { module.Aliases.Add(new SymbolAlias { AliasName = def.AliasName, SubstituteName = def.SubstituteName }); } // Convert public names. foreach (PublicNameDefinition def in context.PublicNames) { module.DefinedNames.Add(ConvertPublicNameDefinition(def, objectMap)); } // Convert fixups. foreach (SegmentDefinition def in context.Segments) { LogicalSegment segment = (LogicalSegment)objectMap[def]; foreach (FixupDefinition f in def.Fixups) { segment.Fixups.Add(ConvertFixupDefinition(f, objectMap)); } } return(module); }