Use new addLoader() method.

This commit is contained in:
Markus F.X.J. Oberhumer
2006-11-16 20:12:53 +01:00
parent 99374de340
commit 071bb75700
+37 -46
View File
@@ -100,106 +100,97 @@ void PackTos::buildLoader(const Filter *ft)
initLoader(nrv_loader, sizeof(nrv_loader)); initLoader(nrv_loader, sizeof(nrv_loader));
//linker->dumpSymbols(); //linker->dumpSymbols();
addLoader("entry", NULL); addLoader("entry");
assert(symbols.loop1.count || symbols.loop2.count); assert(symbols.loop1.count || symbols.loop2.count);
if (symbols.loop1.count) if (symbols.loop1.count)
{ {
if (symbols.loop1.value <= 127) if (symbols.loop1.value <= 127)
addLoader("loop1_set_count.b", NULL); addLoader("loop1_set_count.b");
else if (symbols.loop1.value <= 65535) else if (symbols.loop1.value <= 65535)
addLoader("loop1_set_count.w", NULL); addLoader("loop1_set_count.w");
else else
addLoader("loop1_set_count.l", NULL); addLoader("loop1_set_count.l");
addLoader("loop1_label", NULL); addLoader("loop1_label");
if (opt->small) addLoader(opt->small ? "loop1.small" : "loop1.fast");
addLoader("loop1.small", NULL);
else
addLoader("loop1.fast", NULL);
if (symbols.loop1.mode == symbols.LOOP_SUBQ_L) if (symbols.loop1.mode == symbols.LOOP_SUBQ_L)
addLoader("loop1_subql", NULL); addLoader("loop1_subql");
else if (symbols.loop1.mode == symbols.LOOP_SUBQ_W) else if (symbols.loop1.mode == symbols.LOOP_SUBQ_W)
addLoader("loop1_subqw", NULL); addLoader("loop1_subqw");
else if (symbols.loop1.mode == symbols.LOOP_DBRA) else if (symbols.loop1.mode == symbols.LOOP_DBRA)
addLoader("loop1_dbra", NULL); addLoader("loop1_dbra");
else else
throwBadLoader(); throwBadLoader();
} }
if (symbols.loop2.count) if (symbols.loop2.count)
{ {
if (opt->small) addLoader(opt->small ? "loop2.small" : "loop2.fast");
addLoader("loop2.small", NULL);
else
addLoader("loop2.fast", NULL);
} }
addLoader("copy_to_stack", NULL); addLoader("copy_to_stack");
if (M_IS_NRV2B(ph.method)) if (M_IS_NRV2B(ph.method))
addLoader("nrv2b.init", NULL); addLoader("nrv2b.init");
else if (M_IS_NRV2D(ph.method)) else if (M_IS_NRV2D(ph.method))
addLoader("nrv2d.init", NULL); addLoader("nrv2d.init");
else if (M_IS_NRV2E(ph.method)) else if (M_IS_NRV2E(ph.method))
addLoader("nrv2e.init", NULL); addLoader("nrv2e.init");
else if (M_IS_LZMA(ph.method)) else if (M_IS_LZMA(ph.method))
addLoader("lzma.init", NULL); addLoader("lzma.init");
else else
throwBadLoader(); throwBadLoader();
addLoader("jmp_decompressor", NULL); addLoader("jmp_decompressor");
addLoader("clear_bss", NULL); addLoader("clear_bss");
addLoader("loop3_label", NULL); addLoader("loop3_label");
if (opt->small) addLoader(opt->small ? "loop3.small" : "loop3.fast");
addLoader("loop3.small", NULL);
else
addLoader("loop3.fast", NULL);
if (symbols.loop3.mode == symbols.LOOP_SUBQ_L) if (symbols.loop3.mode == symbols.LOOP_SUBQ_L)
addLoader("loop3_subql", NULL); addLoader("loop3_subql");
else if (symbols.loop3.mode == symbols.LOOP_SUBQ_W) else if (symbols.loop3.mode == symbols.LOOP_SUBQ_W)
addLoader("loop3_subqw", NULL); addLoader("loop3_subqw");
else if (symbols.loop3.mode == symbols.LOOP_DBRA) else if (symbols.loop3.mode == symbols.LOOP_DBRA)
addLoader("loop3_dbra", NULL); addLoader("loop3_dbra");
else else
throwBadLoader(); throwBadLoader();
addLoader("flush_cache", NULL); addLoader("flush_cache");
addLoader("clear_dirty_stack", NULL); addLoader("clear_dirty_stack");
addLoader("start_program", NULL); addLoader("start_program");
addLoader("IDENTSTR,+40D,UPX1HEAD,CUTPOINT", NULL); addLoader("IDENTSTR,+40D,UPX1HEAD,CUTPOINT");
if (M_IS_NRV2B(ph.method)) { if (M_IS_NRV2B(ph.method)) {
addLoader(opt->small ? "nrv2b_8.small" : "nrv2b_8.fast", NULL); addLoader(opt->small ? "nrv2b_8.small" : "nrv2b_8.fast");
symbols.decompr_offset = 2; // FIXME: do not hardcode this value symbols.decompr_offset = 2; // FIXME: do not hardcode this value
} else if (M_IS_NRV2D(ph.method)) { } else if (M_IS_NRV2D(ph.method)) {
addLoader(opt->small ? "nrv2d_8.small" : "nrv2d_8.fast", NULL); addLoader(opt->small ? "nrv2d_8.small" : "nrv2d_8.fast");
symbols.decompr_offset = 2; // FIXME: do not hardcode this value symbols.decompr_offset = 2; // FIXME: do not hardcode this value
} else if (M_IS_NRV2E(ph.method)) { } else if (M_IS_NRV2E(ph.method)) {
addLoader(opt->small ? "nrv2e_8.small" : "nrv2e_8.fast", NULL); addLoader(opt->small ? "nrv2e_8.small" : "nrv2e_8.fast");
symbols.decompr_offset = 2; // FIXME: do not hardcode this value symbols.decompr_offset = 2; // FIXME: do not hardcode this value
} else if (M_IS_LZMA(ph.method)) { } else if (M_IS_LZMA(ph.method)) {
addLoader("__mulsi3", NULL); addLoader("__mulsi3");
addLoader(opt->small ? "lzma.small" : "lzma.fast", NULL); addLoader(opt->small ? "lzma.small" : "lzma.fast");
symbols.decompr_offset = linker->getSectionSize("__mulsi3"); symbols.decompr_offset = linker->getSectionSize("__mulsi3");
addLoader("lzma.finish", NULL); addLoader("lzma.finish");
} }
else else
throwBadLoader(); throwBadLoader();
if (symbols.need_reloc) if (symbols.need_reloc)
addLoader("reloc", NULL); addLoader("reloc");
assert(symbols.loop3.count); assert(symbols.loop3.count);
if (symbols.loop3.value <= 127) if (symbols.loop3.value <= 127)
addLoader("loop3_set_count.b", NULL); addLoader("loop3_set_count.b");
else if (symbols.loop3.value <= 65535) else if (symbols.loop3.value <= 65535)
addLoader("loop3_set_count.w", NULL); addLoader("loop3_set_count.w");
else else
addLoader("loop3_set_count.l", NULL); addLoader("loop3_set_count.l");
addLoader("jmpstack", NULL); addLoader("jmpstack");
} }