Blackfin arch: ensure that speculative loads of bad pointers don't cause us to do bad things.
Fix/change formatting of a few more things. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
This commit is contained in:
parent
15b3ad6a4b
commit
9f336a5326
|
@ -129,4 +129,18 @@ ENTRY(_atomic_xor32)
|
|||
rts;
|
||||
ENDPROC (_atomic_ior32)
|
||||
|
||||
.align 16
|
||||
/*
|
||||
* safe_user_instruction
|
||||
* Four NOPS are enough to allow the pipeline to speculativily load
|
||||
* execute anything it wants. After that, things have gone bad, and
|
||||
* we are stuck - so panic. Since we might be in user space, we can't
|
||||
* call panic, so just cause a unhandled exception, this should cause
|
||||
* a dump of the trace buffer so we can tell were we are, and a reboot
|
||||
*/
|
||||
ENTRY(_safe_user_instruction)
|
||||
NOP; NOP; NOP; NOP;
|
||||
EXCPT 0x4;
|
||||
ENDPROC(_safe_user_instruction)
|
||||
|
||||
ENTRY(_fixed_code_end)
|
||||
|
|
|
@ -431,6 +431,8 @@ void __init setup_arch(char **cmdline_p)
|
|||
!= ATOMIC_AND32 - FIXED_CODE_START);
|
||||
BUG_ON((char *)&atomic_xor32 - (char *)&fixed_code_start
|
||||
!= ATOMIC_XOR32 - FIXED_CODE_START);
|
||||
BUG_ON((char *)&safe_user_instruction - (char *)&fixed_code_start
|
||||
!= SAFE_USER_INSTRUCTION - FIXED_CODE_START);
|
||||
|
||||
init_exception_vectors();
|
||||
bf53x_cache_init();
|
||||
|
|
|
@ -917,7 +917,7 @@ ENTRY(_ex_table)
|
|||
.long _ex_soft_bp /* 0x01 - User Defined - Software breakpoint */
|
||||
.long _ex_replaceable /* 0x02 - User Defined */
|
||||
.long _ex_trap_c /* 0x03 - User Defined - userspace stack overflow */
|
||||
.long _ex_replaceable /* 0x04 - User Defined */
|
||||
.long _ex_trap_c /* 0x04 - User Defined - dump trace buffer */
|
||||
.long _ex_replaceable /* 0x05 - User Defined */
|
||||
.long _ex_replaceable /* 0x06 - User Defined */
|
||||
.long _ex_replaceable /* 0x07 - User Defined */
|
||||
|
|
|
@ -80,6 +80,7 @@ extern int atomic_sub32(void);
|
|||
extern int atomic_ior32(void);
|
||||
extern int atomic_and32(void);
|
||||
extern int atomic_xor32(void);
|
||||
extern void safe_user_instruction(void);
|
||||
extern void sigreturn_stub(void);
|
||||
|
||||
extern void *l1_data_A_sram_alloc(size_t);
|
||||
|
|
|
@ -17,4 +17,6 @@
|
|||
|
||||
#define ATOMIC_SEQS_END 0x480
|
||||
|
||||
#define FIXED_CODE_END 0x480
|
||||
#define SAFE_USER_INSTRUCTION 0x480
|
||||
|
||||
#define FIXED_CODE_END 0x490
|
||||
|
|
Loading…
Reference in a new issue