aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Anderson <sean.anderson@seco.com>2022-08-30 16:32:27 -0400
committerTom Rini <trini@konsulko.com>2022-08-31 12:16:01 -0400
commite7950e9702480b86f4dd67274c5b93a5628e16f7 (patch)
tree682c915d732c07d017a00278ae76fdea6f00b003
parenta95a245a6130e0d743dedabaf703f70f887760f8 (diff)
downloadu-boot-WIP/2022-08-31-assorted-fixes.zip
u-boot-WIP/2022-08-31-assorted-fixes.tar.gz
u-boot-WIP/2022-08-31-assorted-fixes.tar.bz2
arm: smh: Fix uninitialized parameters with newer GCCsWIP/2022-08-31-assorted-fixes
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>
-rw-r--r--arch/arm/lib/semihosting.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
index dbea2b0..01d652a 100644
--- a/arch/arm/lib/semihosting.c
+++ b/arch/arm/lib/semihosting.c
@@ -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;
}