target/s390x: Fix relative long instructions with large offsets
The expression "imm * 2" in gen_ri2() can wrap around if imm is large enough. Fix by casting imm to int64_t, like it's done in disas_jdest(). Fixes: e8ecdfeb30f0 ("Fix EXECUTE of relative branches") Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Message-Id: <20230704081506.276055-8-iii@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
b0ef81062d
commit
349372ff9e
@ -5794,7 +5794,7 @@ static TCGv gen_ri2(DisasContext *s)
|
|||||||
|
|
||||||
disas_jdest(s, i2, is_imm, imm, ri2);
|
disas_jdest(s, i2, is_imm, imm, ri2);
|
||||||
if (is_imm) {
|
if (is_imm) {
|
||||||
ri2 = tcg_constant_i64(s->base.pc_next + imm * 2);
|
ri2 = tcg_constant_i64(s->base.pc_next + (int64_t)imm * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ri2;
|
return ri2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user