Thumb-2: Correctly handle undefined instructions in the kernel
VFP instructions in the kernel may trigger undefined exceptions if VFP hardware is not present. This patch corrects the loading of such Thumb-2 instructions. It also marks the "no_fp" label as a function so that the linker generate a Thumb address. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
74109b8913
commit
83e686ea02
|
@ -272,7 +272,15 @@ __und_svc:
|
||||||
@
|
@
|
||||||
@ r0 - instruction
|
@ r0 - instruction
|
||||||
@
|
@
|
||||||
|
#ifndef CONFIG_THUMB2_KERNEL
|
||||||
ldr r0, [r2, #-4]
|
ldr r0, [r2, #-4]
|
||||||
|
#else
|
||||||
|
ldrh r0, [r2, #-2] @ Thumb instruction at LR - 2
|
||||||
|
and r9, r0, #0xf800
|
||||||
|
cmp r9, #0xe800 @ 32-bit instruction if xx >= 0
|
||||||
|
ldrhhs r9, [r2] @ bottom 16 bits
|
||||||
|
orrhs r0, r9, r0, lsl #16
|
||||||
|
#endif
|
||||||
adr r9, BSYM(1f)
|
adr r9, BSYM(1f)
|
||||||
bl call_fpe
|
bl call_fpe
|
||||||
|
|
||||||
|
@ -678,7 +686,9 @@ ENTRY(fp_enter)
|
||||||
.word no_fp
|
.word no_fp
|
||||||
.previous
|
.previous
|
||||||
|
|
||||||
no_fp: mov pc, lr
|
ENTRY(no_fp)
|
||||||
|
mov pc, lr
|
||||||
|
ENDPROC(no_fp)
|
||||||
|
|
||||||
__und_usr_unknown:
|
__und_usr_unknown:
|
||||||
enable_irq
|
enable_irq
|
||||||
|
|
Reference in New Issue