Exemple #1
0
        /// <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());
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
 /// <summary>
 /// 指定の実行開始点の一覧にこの再配置可能モジュールの実行開始点を登録します。
 /// </summary>
 /// <param name="entryPointTable">
 /// この再配置可能モジュールの実行開始点を登録する実行開始点の一覧です。
 /// </param>
 internal void RegisterEntryPointTo(EntryPointTable entryPointTable)
 {
     m_entryPoint.ResolveExecStartAddress(m_labelTable);
     entryPointTable.Register(m_entryPoint);
 }
Exemple #4
0
 private static ItemSelectableCollection <RelocatableModule> ResolveLabelReferences(
     this ItemSelectableCollection <RelocatableModule> relModules, EntryPointTable entryPointTable)
 {
     relModules.ForEach((relModule) => relModule.ResolveLabelReferences(entryPointTable));
     return(relModules);
 }
Exemple #5
0
 private static ItemSelectableCollection <RelocatableModule> RegisterEntryPoints(
     this ItemSelectableCollection <RelocatableModule> relModules, EntryPointTable entryPointTable)
 {
     relModules.ForEach((relModule) => relModule.RegisterEntryPointTo(entryPointTable));
     return(relModules);
 }
Exemple #6
0
 internal LabelAddressResolver(LabelTable lblTable, EntryPointTable entryPointTable)
 {
     m_labelTable      = lblTable;
     m_entryPointTable = entryPointTable;
 }