On Thu, May 6, 2021 at 9:01 AM Sean Christopherson <seanjc@xxxxxxxxxx> wrote: > > Please use [kvm-unit-tests PATCH ...] for the subject, it took me a depressingly > long time to figure out which code base this applied to (though admittedly there > was a non-zero amount of PEBKAC going on). > > On Wed, May 05, 2021, Jacob Xu wrote: > > When compiled with clang, the following statement gets converted into a > > movaps instructions. > > mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8; > > > > Since mem is an unaligned pointer to a union of an sse, we get a GP when > > running. > > > > All we want is to make the values between mem and v different for this > > testcase, so let's just memset the pointer at mem, and convert to > > uint8_t pointer. Then the compiler will not assume the pointer is > > aligned to 128 bits. > > > > Fixes: e5e76263b5 ("x86: add additional test cases for sse exceptions to > > emulator.c") > > > > Signed-off-by: Jacob Xu <jacobhxu@xxxxxxxxxx> > > --- > > x86/emulator.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/x86/emulator.c b/x86/emulator.c > > index 9705073..672bfda 100644 > > --- a/x86/emulator.c > > +++ b/x86/emulator.c > > @@ -716,12 +716,12 @@ static __attribute__((target("sse2"))) void test_sse_exceptions(void *cross_mem) > > > > // test unaligned access for movups, movupd and movaps > > v.u[0] = 1; v.u[1] = 2; v.u[2] = 3; v.u[3] = 4; > > - mem->u[0] = 5; mem->u[1] = 6; mem->u[2] = 7; mem->u[3] = 8; > > + memset((uint8_t *)mem, 0, 128); > > Shouldn't this be '16', as in 16 bytes / 128 bits? And would it makes sense to > use a pattern other than '0', if only for giggles? Or possibly sizeof(*mem)?