diff --git a/ChangeLog b/ChangeLog index e2670c5e6..6a9dda97f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-12-17 Vladimir Serbinenko + + Add explicit thumb interwork bx in asm files. + + Shouldn't matter for armv >= 5 but let's be safe. + 2013-12-17 Vladimir Serbinenko Implement Truecrypt ISO loader. diff --git a/grub-core/kern/arm/cache.S b/grub-core/kern/arm/cache.S index 2ad774d90..3763b7800 100644 --- a/grub-core/kern/arm/cache.S +++ b/grub-core/kern/arm/cache.S @@ -95,7 +95,8 @@ FUNCTION(grub_arch_sync_caches_armv7) bl clean_dcache_range pop {r0, r1} bl invalidate_icache_range - pop {r2, pc} + pop {r2, lr} + bx lr #ifdef ARMV6 FUNCTION(grub_arm_disable_caches_mmu_armv6) @@ -137,5 +138,6 @@ FUNCTION(grub_arm_disable_caches_mmu_armv7) DSB ISB - pop {r4, pc} + pop {r4, lr} + bx lr diff --git a/grub-core/kern/arm/cache_armv7.S b/grub-core/kern/arm/cache_armv7.S index aa42fad81..1ef2754af 100644 --- a/grub-core/kern/arm/cache_armv7.S +++ b/grub-core/kern/arm/cache_armv7.S @@ -120,6 +120,7 @@ clean_invalidate_dcache: @ return 6: DSB ISB - pop {r4-r12, pc} + pop {r4-r12, lr} + bx lr #include "cache.S" \ No newline at end of file diff --git a/grub-core/kern/arm/uboot/startup.S b/grub-core/kern/arm/uboot/startup.S index 3e1c1f2d6..0c4a5f670 100644 --- a/grub-core/kern/arm/uboot/startup.S +++ b/grub-core/kern/arm/uboot/startup.S @@ -135,14 +135,17 @@ FUNCTION(grub_uboot_syscall) ldr r8, gd_backup ldr r9, gd_backup + 4 - mov lr, pc - ldr pc, grub_uboot_syscall_ptr + bl do_syscall ldr r8, transition_space ldr lr, transition_space + 4 ldr r9, transition_space + 8 bx lr +do_syscall: + + ldr ip, grub_uboot_syscall_ptr + bx ip FUNCTION(grub_uboot_return) adr sp, entry_state_end