On 2/13/20 2:51 PM, Alex Bennée wrote: > Pointer authentication isn't perfect so measure the percentage of > failed checks. As we want to vary the pointer that is authenticated we > recurse down the stack. >
You're no longer recursing. > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > --- > tests/tcg/aarch64/pauth-4.c | 54 +++++++++++++++++++++++++------------ > 1 file changed, 37 insertions(+), 17 deletions(-) > > diff --git a/tests/tcg/aarch64/pauth-4.c b/tests/tcg/aarch64/pauth-4.c > index 1040e92aec3..24a639e36ca 100644 > --- a/tests/tcg/aarch64/pauth-4.c > +++ b/tests/tcg/aarch64/pauth-4.c > @@ -1,25 +1,45 @@ > #include <stdint.h> > #include <assert.h> > +#include <stdio.h> > +#include <stdlib.h> > + > +#define TESTS 1000 > > int main() > { > - uintptr_t x, y; > + int i, count = 0; > + float perc; > + void *base = malloc(TESTS); > + > + for (i = 0; i < TESTS; i++) { > + uintptr_t in, x, y; > + > + in = i + (uintptr_t) base; There's no reason all of these couldn't be char* or void* instead of casting to uintptr_t. Nothing else would have to change. > + > + asm("mov %0, %[in]\n\t" > + "pacia %0, sp\n\t" /* sigill if pauth not supported */ > + "eor %0, %0, #4\n\t" /* corrupt single bit */ > + "mov %1, %0\n\t" > + "autia %1, sp\n\t" /* validate corrupted pointer */ > + "xpaci %0\n\t" /* strip pac from corrupted pointer */ > + : /* out */ "=r"(x), "=r"(y) > + : /* in */ [in] "r" (in) It's weird to have some arguments named and some not. Why not just use %2, since this is simple enough? Otherwise, Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~