mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-18 21:27:56 +00:00
rump: Remove deprecated ARM instruction
Substitute 'swpb' (swap byte) instruction with 'ldrexb/strexb', because 'swpb' needs to be enabled explicitly by the kernel, which is done by neither HW or FOC. When disabled, 'swpb' will cause an undefined instruction exception. Issue #1048
This commit is contained in:
parent
aa1082bed7
commit
64d60bbc7f
@ -1,5 +1,5 @@
|
||||
diff --git a/buildrump.sh b/buildrump.sh
|
||||
index f600b6a..e394b47 100755
|
||||
index f600b6a..f6bb302 100755
|
||||
--- a/buildrump.sh
|
||||
+++ b/buildrump.sh
|
||||
@@ -570,6 +570,16 @@ evaltools ()
|
||||
@ -55,3 +55,12 @@ index f600b6a..e394b47 100755
|
||||
TOOLABI=''
|
||||
case ${MACH_ARCH} in
|
||||
"amd64"|"x86_64")
|
||||
@@ -918,6 +910,8 @@ evaltarget ()
|
||||
MACHINE="evbarm"
|
||||
MACH_ARCH="arm"
|
||||
TOOLABI="elf"
|
||||
+ EXTRA_CFLAGS='-march=armv7-a'
|
||||
+ EXTRA_AFLAGS='-march=armv7-a'
|
||||
probearm
|
||||
;;
|
||||
"sparc")
|
||||
|
20
dde_rump/patches/lock.patch
Normal file
20
dde_rump/patches/lock.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff --git a/src/sys/arch/arm/include/lock.h b/sys/arch/arm/include/lock.h
|
||||
index c52a44f..3b4ba93 100644
|
||||
--- a/src/sys/arch/arm/include/lock.h
|
||||
+++ b/src/sys/arch/arm/include/lock.h
|
||||
@@ -119,8 +119,13 @@ __swp(__cpu_simple_lock_t __val, volatile __cpu_simple_lock_t *__ptr)
|
||||
return __rv;
|
||||
#else
|
||||
uint32_t __val32;
|
||||
- __asm volatile("swpb %0, %1, [%2]"
|
||||
- : "=&r" (__val32) : "r" (__val), "r" (__ptr) : "memory");
|
||||
+ __asm volatile(" 1: \n"
|
||||
+ " ldrexb %0, [%2] \n"
|
||||
+ " strexb r0, %1, [%2]\n"
|
||||
+ " teqeq r0, #0 \n"
|
||||
+ " bne 1b \n"
|
||||
+ : "=&r" (__val32) : "r" (__val), "r" (__ptr)
|
||||
+ : "memory", "r0");
|
||||
return __val32;
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue
Block a user