|
From: Mark W. <ma...@kl...> - 2020-02-14 13:25:21
|
Hi,
On Thu, 2020-02-13 at 14:22 -0800, Carl Love wrote:
> The fix is actually in a PPC64 specific file. The error occurs
> because
> PPC64 checks that the structure is aligned properly. Not sure if other
> architectures check the alignment or not. If they do, then they could
> see the same issue. The structure is defined on a per architecture
> basis which means other architectures would need to implement a similar
> fix in their architecture specific file.
>
> The patch talked about 64-bit architectures specifically amd64 arm64.
> Hence I was thinking architecture independent as I was writing the
> email and forgot that the actual fix was in a ppc64 specific file. I
> guess I forgot that detail while working on the second patch.
I don't believe any other architecture has a check that the structure
is aligned correctly. So it isn't causing immediate problems on other
architectures. I cannot tell whether they should or shouldn't have such
a check though.
For ppc64 and ppc64le I tested both patches and they seem to work
nicely.
Fedora release 30 (Thirty)
Linux 5.2.9-200.fc30.ppc64le #1 SMP Fri Aug 16 21:03:00 UTC 2019
GNU C Library (GNU libc) stable release version 2.29.
g++ 9.1.1 and binutils 2.31.1
Fedora release 28 (Twenty Eight)
Linux 5.0.16-100.fc28.ppc64 #1 SMP Tue May 14 17:55:15 UTC 2019
GNU C Library (GNU libc) stable release version 2.27.
g++ 8.3.1 and binutils 2.29.1
I have also backported the first patch to fedora (since that already
had the original patch by Eugene backported) and it seems to resolve
all issues (the second patch isn't needed because grail hasn't been
backported).
On ppc64[be] I do see an issue with the vbit-test:
*** Incorrect result for operator Iop_Or1
opnd 0: vbits = 00000001 value = 00
opnd 1: vbits = 00000000 value = 01
result: vbits = 00000001 value = 00
expect: vbits = 00000000
*** Incorrect result for operator Iop_Or1
opnd 0: vbits = 00000000 value = 01
opnd 1: vbits = 00000001 value = 01
result: vbits = 00000001 value = 00
expect: vbits = 00000000
*** Incorrect result for operator Iop_Or1
opnd 0: vbits = 00000001 value = 01
opnd 1: vbits = 00000000 value = 00
result: vbits = 00000001 value = 00
expect: vbits = 00000000
*** Incorrect result for operator Iop_Or1
opnd 0: vbits = 00000000 value = 00
opnd 1: vbits = 00000001 value = 00
result: vbits = 00000001 value = 00
expect: vbits = 00000000
|