]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: smh: Fix uninitialized parameters with newer GCCs
authorSean Anderson <sean.anderson@seco.com>
Tue, 30 Aug 2022 20:32:27 +0000 (16:32 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 31 Aug 2022 16:21:47 +0000 (12:21 -0400)
Newer versions of GCC won't initialize parts of structures which don't
appear to be used. This results in uninitialized semihosting parameters
passed via R1. Fix this by marking the inline assembly as clobbering
memory.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
arch/arm/lib/semihosting.c

index dbea2b06fb27271579f2dc0f1ddd7291f0d65474..01d652a6b83c2d0950da6c982cb0b54273d9fb4b 100644 (file)
@@ -32,12 +32,12 @@ static noinline long smh_trap(unsigned int sysnum, void *addr)
 {
        register long result asm("r0");
 #if defined(CONFIG_ARM64)
-       asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), "r"(addr));
+       asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), "r"(addr) : "memory");
 #elif defined(CONFIG_CPU_V7M)
-       asm volatile ("bkpt #0xAB" : "=r" (result) : "0"(sysnum), "r"(addr));
+       asm volatile ("bkpt #0xAB" : "=r" (result) : "0"(sysnum), "r"(addr) : "memory");
 #else
        /* Note - untested placeholder */
-       asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), "r"(addr));
+       asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), "r"(addr) : "memory");
 #endif
        return result;
 }