Message ID | 1560806698-26651-1-git-send-email-gromero@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 8d0f1e05ab16c4bd628ddaefd20b94ffb36d799c |
Headers | show |
Series | selftests/powerpc: Fix earlyclobber in tm-vmxcopy | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch next (e610a466d16a086e321f0bd421e2fc75cff28605) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
On Mon, Jun 17, 2019 at 05:24:58PM -0400, Gustavo Romero wrote: > In some cases, compiler can allocate the same register for operand 'res' > and 'vecoutptr', resulting in segfault at 'stxvd2x 40,0,%[vecoutptr]' > because base register will contain 1, yielding a false-positive. > > This is because output 'res' must be marked as an earlyclobber operand so > it may not overlap an input operand ('vecoutptr'). > > Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org> Segher > --- > tools/testing/selftests/powerpc/tm/tm-vmxcopy.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c b/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c > index 147c6dc..c1e788a 100644 > --- a/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c > +++ b/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c > @@ -79,7 +79,7 @@ int test_vmxcopy() > > "5:;" > "stxvd2x 40,0,%[vecoutptr];" > - : [res]"=r"(aborted) > + : [res]"=&r"(aborted) > : [vecinptr]"r"(&vecin), > [vecoutptr]"r"(&vecout), > [map]"r"(a) > -- > 2.7.4
diff --git a/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c b/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c index 147c6dc..c1e788a 100644 --- a/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c +++ b/tools/testing/selftests/powerpc/tm/tm-vmxcopy.c @@ -79,7 +79,7 @@ int test_vmxcopy() "5:;" "stxvd2x 40,0,%[vecoutptr];" - : [res]"=r"(aborted) + : [res]"=&r"(aborted) : [vecinptr]"r"(&vecin), [vecoutptr]"r"(&vecout), [map]"r"(a)
In some cases, compiler can allocate the same register for operand 'res' and 'vecoutptr', resulting in segfault at 'stxvd2x 40,0,%[vecoutptr]' because base register will contain 1, yielding a false-positive. This is because output 'res' must be marked as an earlyclobber operand so it may not overlap an input operand ('vecoutptr'). Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com> --- tools/testing/selftests/powerpc/tm/tm-vmxcopy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)