On Tue, May 02, 2017 at 20:36:52 -0700, Richard Henderson wrote:
On 05/02/2017 12:22 PM, Richard Henderson wrote:
Changes since v5:
...
* Alpha frontend patch rewritten; the former patch appears to
drop clock interrupts, not exiting the kernel's idle loop.
I never *really* figured out why, since both patches seem
to annotate the same TBs in the same way.
There's definitely something odd going on.
With a rebuild from scratch, the same symptoms have re-appeared for Alpha.
So it really had nothing to do with the original patch. I'm at a bit of a
loss...
I can reliably reproduce a freeze upon booting.
Not sure this can help much (this is the first time I run an Alpha
guest), but here are some findings.
In my testing, if I disable the lookup for JMP/JSR/ret, I can boot OK.
This works:
+++ b/target/alpha/translate.c
@@ -2435,12 +2435,16 @@ static ExitStatus translate_one(DisasContext *ctx,
uint32_t insn)
if (ra != 31) {
tcg_gen_movi_i64(ctx->ir[ra], ctx->pc);
}
+#if 0
if (use_exit_tb(ctx)) {
ret = EXIT_PC_UPDATED;
} else {
tcg_gen_lookup_and_goto_ptr(cpu_pc);
ret = EXIT_GOTO_TB;
}
+#else
+ ret = EXIT_PC_UPDATED;
+#endif
break;
However, this doesn't tell us much, since these jumps are pretty common.