Skip to content

Commit

Permalink
[ARM] VFP: fix section mismatch error
Browse files Browse the repository at this point in the history
Fix a real section mismatch issue; the test code is thrown away after
initialisation, but if we do not detect the VFP hardware, it is left
hooked into the exception handler.  Any VFP instructions which are
subsequently executed risk calling the discarded exception handler.

Introduce a new "null" handler which returns to the "unrecognised
fault" return address.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King authored and Russell King committed Jun 10, 2007
1 parent 845a2fd commit 5d4cae5
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
4 changes: 4 additions & 0 deletions arch/arm/vfp/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ do_vfp:
add r10, r10, #TI_VFPSTATE @ r10 = workspace
ldr pc, [r4] @ call VFP entry point

ENTRY(vfp_null_entry)
mov pc, lr
ENDPROC(vfp_null_entry)

.LCvfp:
.word vfp_vector

Expand Down
5 changes: 4 additions & 1 deletion arch/arm/vfp/vfpmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@
*/
void vfp_testing_entry(void);
void vfp_support_entry(void);
void vfp_null_entry(void);

void (*vfp_vector)(void) = vfp_testing_entry;
void (*vfp_vector)(void) = vfp_null_entry;
union vfp_state *last_VFP_context[NR_CPUS];

/*
Expand Down Expand Up @@ -321,8 +322,10 @@ static int __init vfp_init(void)
* The handler is already setup to just log calls, so
* we just need to read the VFPSID register.
*/
vfp_vector = vfp_testing_entry;
vfpsid = fmrx(FPSID);
barrier();
vfp_vector = vfp_null_entry;

printk(KERN_INFO "VFP support v0.3: ");
if (VFP_arch) {
Expand Down
4 changes: 4 additions & 0 deletions include/asm-arm/linkage.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@
#define __ALIGN .align 0
#define __ALIGN_STR ".align 0"

#define ENDPROC(name) \
.type name, %function; \
END(name)

#endif

0 comments on commit 5d4cae5

Please sign in to comment.