Fix memory constraints in the inline-assembly stub that calls into secure
authorpatrick <patrick@openbsd.org>
Fri, 28 Apr 2023 10:19:07 +0000 (10:19 +0000)
committerpatrick <patrick@openbsd.org>
Fri, 28 Apr 2023 10:19:07 +0000 (10:19 +0000)
mode.  Without this change the compiler doesn't realize that the memory
behind the array that contains the return values might have changed and
optimizes the access away.  With this change it properly access the array
to retrieve the returned values.

ok drahn@

sys/dev/fdt/qcscm.c

index 3509635..4c59086 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: qcscm.c,v 1.2 2023/01/21 10:34:49 kettenis Exp $ */
+/* $OpenBSD: qcscm.c,v 1.3 2023/04/28 10:19:07 patrick Exp $ */
 /*
  * Copyright (c) 2022 Patrick Wildt <patrick@blueri.se>
  *
@@ -189,20 +189,19 @@ void
 qcscm_smc_exec(uint64_t *in, uint64_t *out)
 {
        __asm(
-           "ldp x0, x1, [%0, %2]\n"
-           "ldp x2, x3, [%0, %3]\n"
-           "ldp x4, x5, [%0, %4]\n"
-           "ldp x6, x7, [%0, %5]\n"
+           "ldp x0, x1, [%0, #0]\n"
+           "ldp x2, x3, [%0, #16]\n"
+           "ldp x4, x5, [%0, #32]\n"
+           "ldp x6, x7, [%0, #48]\n"
            "smc #0\n"
-           "stp x0, x1, [%1, %2]\n"
-           "stp x2, x3, [%1, %3]\n"
-           "stp x4, x5, [%1, %4]\n"
-           "stp x6, x7, [%1, %5]\n" ::
-           "r" (in), "r" (out),
-           "i"(0), "i"(16), "i"(32), "i"(48),
-           "m" (*in), "m" (*out) :
+           "stp x0, x1, [%1, #0]\n"
+           "stp x2, x3, [%1, #16]\n"
+           "stp x4, x5, [%1, #32]\n"
+           "stp x6, x7, [%1, #48]\n" ::
+           "r" (in), "r" (out) :
            "x0", "x1", "x2", "x3",
-           "x4", "x5", "x6", "x7");
+           "x4", "x5", "x6", "x7",
+           "memory");
 }
 
 int