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 が返される"); }
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 に登録される"); }