/// <summary> /// 指定の再配置可能モジュールを結合し実行可能モジュールを生成します。 /// </summary> /// <param name="relModules">結合する再配置可能モジュールです。</param> /// <returns>生成した実行可能モジュールを返します。</returns> internal static ExecutableModule Link(this ItemSelectableCollection <RelocatableModule> relModules) { EntryPointTable entryPointTable = new EntryPointTable(); m_entryPointTableForUnitTest = entryPointTable; return(relModules.AssignLabelAddress() .RegisterEntryPoints(entryPointTable) .ResolveLabelReferences(entryPointTable) .MakeExecutableModule()); }
/// <summary> /// ラベルを参照する語のラベルのアドレスを解決し、語の値をそのアドレスに置き換えます。 /// </summary> /// <param name="entryPointTable"> /// それぞれのプログラムで定義された実行開始点の一覧です。 /// </param> internal void ResolveLabelReferences(EntryPointTable entryPointTable) { LabelAddressResolver labelAddrResolver = new LabelAddressResolver(m_labelTable, entryPointTable); m_labelRefs.ForEach((labelRef) => labelRef.ResolveReferringAddress(labelAddrResolver, m_words)); }
/// <summary> /// 指定の実行開始点の一覧にこの再配置可能モジュールの実行開始点を登録します。 /// </summary> /// <param name="entryPointTable"> /// この再配置可能モジュールの実行開始点を登録する実行開始点の一覧です。 /// </param> internal void RegisterEntryPointTo(EntryPointTable entryPointTable) { m_entryPoint.ResolveExecStartAddress(m_labelTable); entryPointTable.Register(m_entryPoint); }
private static ItemSelectableCollection <RelocatableModule> ResolveLabelReferences( this ItemSelectableCollection <RelocatableModule> relModules, EntryPointTable entryPointTable) { relModules.ForEach((relModule) => relModule.ResolveLabelReferences(entryPointTable)); return(relModules); }
private static ItemSelectableCollection <RelocatableModule> RegisterEntryPoints( this ItemSelectableCollection <RelocatableModule> relModules, EntryPointTable entryPointTable) { relModules.ForEach((relModule) => relModule.RegisterEntryPointTo(entryPointTable)); return(relModules); }
internal LabelAddressResolver(LabelTable lblTable, EntryPointTable entryPointTable) { m_labelTable = lblTable; m_entryPointTable = entryPointTable; }