动态翻译器执行时如果出现异常,可如何确定异常位置对应的目标位置呢?
首先,执行语句:
tb = tb_find_pc(pc);
其中pc表示异常出现时宿主PC值,如果返回的tb不为NULL,则说明异常发生在动态翻译代码执行时。
为了恢复目标CPU的状态,需要使用cpu_restore_state函数。它与函数cpu_gen_code类似,但两者生成中间码时调用函数分别是gen_intermediate_code与gen_intermediate_code_pc:
void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb)
{
gen_intermediate_code_internal(tb, 0, env);
}
void gen_intermediate_code_pc(CPUSPARCState * env, TranslationBlock * tb)