//---------------------------------------------------------------------- static uval_t find_ret_purged(const func_t *pfn) { uval_t argsize = 0; ea_t ea = pfn->startEA; while ( ea < pfn->endEA ) { decode_insn(ea); if ( cmd.itype == H8500_rtd || cmd.itype == H8500_prtd ) { argsize = cmd.Op1.value; break; } ea = nextthat(ea, pfn->endEA, f_isCode, NULL); } // could not find any ret instructions // but the function ends with a jump if ( ea >= pfn->endEA && (cmd.itype == H8500_jmp || cmd.itype == H8500_pjmp) ) { ea_t target = calc_mem(cmd.Op1); pfn = get_func(target); if ( pfn != NULL ) argsize = pfn->argsize; } return argsize; }
//---------------------------------------------------------------------- static void apply_symbols(void) { free_mappings(); if ( dataseg != BADADDR ) { for ( int i=0; i < numports; i++ ) { ea_t ea = calc_data_mem(ports[i].address); segment_t *s = getseg(ea); if ( s == NULL || s->type != SEG_IMEM ) continue; doByte(ea, 1); const char *name = ports[i].name; if ( !set_name(ea, name, SN_NOWARN) ) set_cmt(ea, name, 0); } ea_t ea = dataseg; segment_t *d = getseg(dataseg); if ( d != NULL ) { ea_t dataend = d->endEA; while ( 1 ) { ea = next_unknown(ea, dataend); if ( ea == BADADDR ) break; ea_t end = nextthat(ea, dataend, f_isHead, NULL); if ( end == BADADDR ) end = dataend; doByte(ea, end-ea); } create_mappings(); } } }
ea_t GetBlockEnd(ea_t address) { while(address=nextthat(address,BADADDR,f_isCode,NULL)) { if(address==BADADDR) break; ea_t fcref=get_first_fcref_to(address); if(fcref!=BADADDR) break; } return address; }
//---------------------------------------------------------------------- static void destroy_if_unnamed_array(ea_t ea) { flags_t F = get_flags_novalue(ea); if ( isTail(F) && segtype(ea) == SEG_IMEM ) { ea_t head = prev_not_tail(ea); if ( !has_user_name(get_flags_novalue(head)) ) { do_unknown(head, DOUNK_SIMPLE); doByte(head, ea-head); ea_t end = nextthat(ea, inf.maxEA, f_isHead, NULL); if ( end == BADADDR ) end = getseg(ea)->endEA; doByte(ea+1, end-ea-1); } } }