Use new addLoader() method.
This commit is contained in:
+37
-46
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user