Example #1
0
        private void CheckEntryPoint(Label expectedExecStartLabel, Label expectedEntryLabel, String message)
        {
            EntryPoint expected = new EntryPoint(expectedExecStartLabel, expectedEntryLabel);
            EntryPoint actual   = m_relModule.EntryPoint;

            EntryPointTest.Check(expected, actual, message);
        }
        public void ResolveAddressFor()
        {
            Label           definedLabel        = new Label("DEF");
            MemoryAddress   definedLabelAddress = new MemoryAddress(0x1234);
            LabelDefinition labelDef            =
                LabelDefinition.MakeForUnitTest(definedLabel, MemoryOffset.Zero, definedLabelAddress);

            m_labelTable.RegisterForUnitTest(labelDef);
            CheckResolveAddressFor(
                definedLabel, true, definedLabelAddress,
                "プログラム内で定義されたラベル => 成功、そのラベルのアドレスが返される");

            EntryPoint entryPoint = EntryPointTest.Make("EXESTRT", "ENTRY", 0xfedc);

            m_entryPointTable.Register(entryPoint);
            CheckResolveAddressFor(
                entryPoint.EntryLabel, true, entryPoint.ExecStartAddress,
                "プログラムの入口名 => 成功、そのプログラムの実行開始アドレスが返される");

            Label         undefinedLabel = new Label("UNDEF");
            MemoryAddress DontCare       = MemoryAddress.Zero;

            CheckResolveAddressFor(
                undefinedLabel, false, DontCare,
                "未定義のラベル => 例外");
        }
        public void Register()
        {
            EntryPoint entryPoint = EntryPointTest.Make("EXESTRT", "ENTRY");

            CheckRegister(entryPoint, true, "まだ登録されていない入口名 => OK、登録できる");
            CheckRegister(entryPoint, false, "すでに登録された入口名 => 例外");
        }
        public void Find()
        {
            EntryPoint registered   = EntryPointTest.Make("START1", "REGED");
            EntryPoint unregistered = EntryPointTest.Make("START2", "UNREGED");

            m_entryPointTable.Register(registered);

            CheckFind(
                registered.EntryLabel, registered,
                "登録された入口名 => その入口名の実行開始点が返される");
            CheckFind(
                unregistered.EntryLabel, null,
                "登録されていない入口名 => null が返される");
        }
Example #5
0
        public void Link_RegisterEntryPoints()
        {
            ExecutableModule notUsed = Linker.Link(m_relModules);

            EntryPoint[] expected = TestUtils.MakeArray(
                EntryPointTest.Make("ADD1234", "SUB", ADD1234_Address),
                EntryPointTest.Make("MAIN", "MAIN", MAIN_Address));
            EntryPointTable          entryPointTable = Linker.EntryPointTableForUnitTest;
            IEnumerable <EntryPoint> actual          = entryPointTable.EntryPoints;

            TestUtils.CheckEnumerable(
                expected, actual, EntryPointTest.Check,
                "各再配置可能モジュールの EntryPoint にアドレスが設定され、EntryPointTable に登録される");
        }