Fix: initialize initial state for start proc if no main was found

This commit is contained in:
nemerle 2016-05-10 10:46:23 +02:00
parent db39014e1b
commit 6f7bfbddf8

View File

@ -187,13 +187,16 @@ bool FindMain::execute(CommandContext *ctx) {
} }
/* Check for special settings of initial state, based on idioms of the startup code */ /* Check for special settings of initial state, based on idioms of the startup code */
if(checkStartup(ctx->m_project->m_entry_state)) { if(checkStartup(ctx->m_project->m_entry_state)) {
proj.findByName("start")->markDoNotDecompile(); // we have main, do not decompile the start proc start_func->markDoNotDecompile(); // we have main, do not decompile the start proc
//TODO: main arguments and return values should depend on detected compiler/library //TODO: main arguments and return values should depend on detected compiler/library
FunctionType *main_type = FunctionType::get(Type{TYPE_WORD_SIGN},{ Type{TYPE_WORD_SIGN},Type{TYPE_PTR} },false); FunctionType *main_type = FunctionType::get(Type{TYPE_WORD_SIGN},{ Type{TYPE_WORD_SIGN},Type{TYPE_PTR} },false);
main_type->setCallingConvention(CConv::C); main_type->setCallingConvention(CConv::C);
proj.addCommand(new CreateFunction("main",SegOffAddr {prog.segMain,prog.offMain},main_type)); proj.addCommand(new CreateFunction("main",SegOffAddr {prog.segMain,prog.offMain},main_type));
proj.addCommand(new LoadPatternLibrary()); proj.addCommand(new LoadPatternLibrary());
} else {
start_func->state = proj.m_entry_state; // just in case we fail to find main, initialize 'state' for start func
} }
return true; return true;
} }
@ -217,7 +220,6 @@ bool CreateFunction::execute(CommandContext *ctx) {
if(m_name=="start") { if(m_name=="start") {
proj.addCommand(new MachineStateInitialization); proj.addCommand(new MachineStateInitialization);
proj.addCommand(new FindMain); proj.addCommand(new FindMain);
func->state = proj.m_entry_state; // just in case we fail to find main, initialize 'state'
} }
// proj.addCommand(new ProcessFunction); // proj.addCommand(new ProcessFunction);