Message ID | 1364256660-14903-1-git-send-email-rth@twiddle.net |
---|---|
State | New |
Headers | show |
On 26.03.2013, at 01:11, Richard Henderson wrote: > The code to load the high 64 bits assumed that the insn used to > load the low 64 bits zero-extended. Enforce that. > > Cc: Alexander Graf <agraf@suse.de> > Signed-off-by: Richard Henderson <rth@twiddle.net> Tested-by: Alexander Graf <agraf@suse.de> Though running an s390x guest on an s390x host gives me this happy error when it wants to enter user space: Inconsistency detected by ld.so: rtld.c: 1091: dl_main: Assertion `main_map != ((void *)0)' failed! The very same s390x guest kernel+initrd run fine on an x86_64 host. Alex > --- > tcg/s390/tcg-target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tcg/s390/tcg-target.c b/tcg/s390/tcg-target.c > index e12a152..0132010 100644 > --- a/tcg/s390/tcg-target.c > +++ b/tcg/s390/tcg-target.c > @@ -770,7 +770,7 @@ static void tcg_out_movi(TCGContext *s, TCGType type, > /* If we get here, both the high and low parts have non-zero bits. */ > > /* Recurse to load the lower 32-bits. */ > - tcg_out_movi(s, TCG_TYPE_I32, ret, sval); > + tcg_out_movi(s, TCG_TYPE_I64, ret, uval & 0xffffffff); > > /* Insert data into the high 32-bits. */ > uval = uval >> 31 >> 1; > -- > 1.8.1.4 >
diff --git a/tcg/s390/tcg-target.c b/tcg/s390/tcg-target.c index e12a152..0132010 100644 --- a/tcg/s390/tcg-target.c +++ b/tcg/s390/tcg-target.c @@ -770,7 +770,7 @@ static void tcg_out_movi(TCGContext *s, TCGType type, /* If we get here, both the high and low parts have non-zero bits. */ /* Recurse to load the lower 32-bits. */ - tcg_out_movi(s, TCG_TYPE_I32, ret, sval); + tcg_out_movi(s, TCG_TYPE_I64, ret, uval & 0xffffffff); /* Insert data into the high 32-bits. */ uval = uval >> 31 >> 1;
The code to load the high 64 bits assumed that the insn used to load the low 64 bits zero-extended. Enforce that. Cc: Alexander Graf <agraf@suse.de> Signed-off-by: Richard Henderson <rth@twiddle.net> --- tcg/s390/tcg-target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)