diff options
| -rw-r--r-- | arch/arm/kernel/fiq.c | 4 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-feroceon.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v3.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v4mc.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v4wb.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-v4wt.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-xsc3.c | 2 | ||||
| -rw-r--r-- | arch/arm/mm/copypage-xscale.c | 2 | ||||
| -rw-r--r-- | include/linux/compiler-gcc.h | 10 | 
9 files changed, 18 insertions, 10 deletions
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c index 36f81d96797..6ff7919613d 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c @@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length)   * disable irqs for the duration.  Note - these functions are almost   * entirely coded in assembly.   */ -void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs) +void __naked set_fiq_regs(struct pt_regs *regs)  {  	register unsigned long tmp;  	asm volatile ( @@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)  	: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));  } -void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs) +void __naked get_fiq_regs(struct pt_regs *regs)  {  	register unsigned long tmp;  	asm volatile ( diff --git a/arch/arm/mm/copypage-feroceon.c b/arch/arm/mm/copypage-feroceon.c index c3ba6a94da0..70997d5bee2 100644 --- a/arch/arm/mm/copypage-feroceon.c +++ b/arch/arm/mm/copypage-feroceon.c @@ -13,7 +13,7 @@  #include <linux/init.h>  #include <linux/highmem.h> -static void __attribute__((naked)) +static void __naked  feroceon_copy_user_page(void *kto, const void *kfrom)  {  	asm("\ diff --git a/arch/arm/mm/copypage-v3.c b/arch/arm/mm/copypage-v3.c index 70ed96c8af8..de9c06854ad 100644 --- a/arch/arm/mm/copypage-v3.c +++ b/arch/arm/mm/copypage-v3.c @@ -15,7 +15,7 @@   *   * FIXME: do we need to handle cache stuff...   */ -static void __attribute__((naked)) +static void __naked  v3_copy_user_page(void *kto, const void *kfrom)  {  	asm("\n\ diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c index 1601698b980..7370a7142b0 100644 --- a/arch/arm/mm/copypage-v4mc.c +++ b/arch/arm/mm/copypage-v4mc.c @@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock);   * instruction.  If your processor does not supply this, you have to write your   * own copy_user_highpage that does the right thing.   */ -static void __attribute__((naked)) +static void __naked  mc_copy_user_page(void *from, void *to)  {  	asm volatile( diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c index 3ec93dab765..9ab09841422 100644 --- a/arch/arm/mm/copypage-v4wb.c +++ b/arch/arm/mm/copypage-v4wb.c @@ -22,7 +22,7 @@   * instruction.  If your processor does not supply this, you have to write your   * own copy_user_highpage that does the right thing.   */ -static void __attribute__((naked)) +static void __naked  v4wb_copy_user_page(void *kto, const void *kfrom)  {  	asm("\ diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c index 0f1188efae4..300efafd664 100644 --- a/arch/arm/mm/copypage-v4wt.c +++ b/arch/arm/mm/copypage-v4wt.c @@ -20,7 +20,7 @@   * dirty data in the cache.  However, we do have to ensure that   * subsequent reads are up to date.   */ -static void __attribute__((naked)) +static void __naked  v4wt_copy_user_page(void *kto, const void *kfrom)  {  	asm("\ diff --git a/arch/arm/mm/copypage-xsc3.c b/arch/arm/mm/copypage-xsc3.c index 39a994542ca..bc4525f5ab2 100644 --- a/arch/arm/mm/copypage-xsc3.c +++ b/arch/arm/mm/copypage-xsc3.c @@ -29,7 +29,7 @@   * if we eventually end up using our copied page.   *   */ -static void __attribute__((naked)) +static void __naked  xsc3_mc_copy_user_page(void *kto, const void *kfrom)  {  	asm("\ diff --git a/arch/arm/mm/copypage-xscale.c b/arch/arm/mm/copypage-xscale.c index d18f2397ee2..76824d3e966 100644 --- a/arch/arm/mm/copypage-xscale.c +++ b/arch/arm/mm/copypage-xscale.c @@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock);   * Dcache aliasing issue.  The writes will be forwarded to the write buffer,   * and merged as appropriate.   */ -static void __attribute__((naked)) +static void __naked  mc_copy_user_page(void *from, void *to)  {  	/* diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 1514d534dee..a3ed7cb8ca3 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h @@ -52,7 +52,15 @@  #define __deprecated			__attribute__((deprecated))  #define __packed			__attribute__((packed))  #define __weak				__attribute__((weak)) -#define __naked				__attribute__((naked)) + +/* + * it doesn't make sense on ARM (currently the only user of __naked) to trace + * naked functions because then mcount is called without stack and frame pointer + * being set up and there is no chance to restore the lr register to the value + * before mcount was called. + */ +#define __naked				__attribute__((naked)) notrace +  #define __noreturn			__attribute__((noreturn))  /*  |