diff options
Diffstat (limited to 'arch/sh/lib')
| -rw-r--r-- | arch/sh/lib/Makefile | 2 | ||||
| -rw-r--r-- | arch/sh/lib/delay.c | 10 | ||||
| -rw-r--r-- | arch/sh/lib/mcount.S | 10 | 
3 files changed, 16 insertions, 6 deletions
diff --git a/arch/sh/lib/Makefile b/arch/sh/lib/Makefile index 7b95f29e317..3baff31e58c 100644 --- a/arch/sh/lib/Makefile +++ b/arch/sh/lib/Makefile @@ -6,7 +6,7 @@ lib-y  = delay.o memmove.o memchr.o \  	 checksum.o strlen.o div64.o div64-generic.o  # Extracted from libgcc -lib-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \ +obj-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \  	 ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o \  	 udiv_qrnnd.o diff --git a/arch/sh/lib/delay.c b/arch/sh/lib/delay.c index faa8f86c0db..0901b2f14e1 100644 --- a/arch/sh/lib/delay.c +++ b/arch/sh/lib/delay.c @@ -10,6 +10,16 @@  void __delay(unsigned long loops)  {  	__asm__ __volatile__( +		/* +		 * ST40-300 appears to have an issue with this code, +		 * normally taking two cycles each loop, as with all +		 * other SH variants. If however the branch and the +		 * delay slot straddle an 8 byte boundary, this increases +		 * to 3 cycles. +		 * This align directive ensures this doesn't occur. +		 */ +		".balign 8\n\t" +  		"tst	%0, %0\n\t"  		"1:\t"  		"bf/s	1b\n\t" diff --git a/arch/sh/lib/mcount.S b/arch/sh/lib/mcount.S index 84a57761f17..52aa2011d75 100644 --- a/arch/sh/lib/mcount.S +++ b/arch/sh/lib/mcount.S @@ -39,7 +39,7 @@   *   * Make sure the stack pointer contains a valid address. Valid   * addresses for kernel stacks are anywhere after the bss - * (after _ebss) and anywhere in init_thread_union (init_stack). + * (after __bss_stop) and anywhere in init_thread_union (init_stack).   */  #define STACK_CHECK()					\  	mov	#(THREAD_SIZE >> 10), r0;		\ @@ -60,7 +60,7 @@  	cmp/hi	r2, r1;					\  	bf	stack_panic;				\  							\ -	/* If sp > _ebss then we're OK. */		\ +	/* If sp > __bss_stop then we're OK. */		\  	mov.l	.L_ebss, r1;				\  	cmp/hi	r1, r15;				\  	bt	1f;					\ @@ -70,7 +70,7 @@  	cmp/hs	r1, r15;				\  	bf	stack_panic;				\  							\ -	/* If sp > init_stack && sp < _ebss, not OK. */	\ +	/* If sp > init_stack && sp < __bss_stop, not OK. */	\  	add	r0, r1;					\  	cmp/hs	r1, r15;				\  	bt	stack_panic;				\ @@ -292,10 +292,10 @@ stack_panic:  	 nop  	.align 2 -.L_ebss: -	.long	_ebss  .L_init_thread_union:  	.long	init_thread_union +.L_ebss: +	.long	__bss_stop  .Lpanic:  	.long	panic  .Lpanic_s:  | 
