On 4/26/23 01:41, Taylor Simpson wrote:
+#ifndef CONFIG_HEXAGON_IDEF_PARSER +/* frame = ((LR << 32) | FP) ^ (FRAMEKEY << 32)) */ +static void gen_frame_scramble(TCGv_i64 result) +{ + TCGv_i64 framekey = tcg_temp_new_i64(); + tcg_gen_extu_i32_i64(framekey, hex_gpr[HEX_REG_FRAMEKEY]); + tcg_gen_shli_i64(framekey, framekey, 32); + tcg_gen_concat_i32_i64(result, hex_gpr[HEX_REG_FP], hex_gpr[HEX_REG_LR]); + tcg_gen_xor_i64(result, result, framekey); +} +#endif
Better as tmp = tcg_temp_new_i32(); tcg_gen_xor_i32(tmp, hex_gpr[HEX_REG_LR], hex_gpr[HEX_REG_FRAMEKEY]); tcg_gen_concat_i32_i64(result, hex_gpr[HEX_REG_FRAMEKEY], tmp);
+#ifndef CONFIG_HEXAGON_IDEF_PARSER +/* Stack overflow check */ +static void gen_framecheck(TCGv EA, int framesize) +{ + /* Not modelled in linux-user mode */ + /* Placeholder for system mode */ +}
g_assert_not_reached();
+ TCGv_i64 frame = tcg_temp_new_i64(); + tcg_gen_addi_tl(r30, r29, -8); + gen_frame_scramble(frame);
Perhaps better as TCGv_i64 frame = gen_frame_scramble(); with the allocation inside the subroutine. Otherwise, Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~