diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-10-25 21:48:18 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-10-25 21:48:18 -0400 |
commit | 6253195b671b98a4e5da5d39c2df9f8f257bcea1 (patch) | |
tree | 3b7ca1d8ef5d9c50a77abf1d1cf5b2b5aa243284 /arch/sh | |
parent | 15893fb565921507da80e500d85bb2575989bb57 (diff) | |
parent | 60339fad5c68c9c533cd14e67194ff8f727c41d9 (diff) |
Merge branch 'sh/stable-updates'
Conflicts:
arch/sh/kernel/dwarf.c
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/kernel/dwarf.c | 22 | ||||
-rw-r--r-- | arch/sh/kernel/irq.c | 3 | ||||
-rw-r--r-- | arch/sh/kernel/sh_ksyms_32.c | 14 |
3 files changed, 38 insertions, 1 deletions
diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 4d8c7bd149df..6c9d0c10f2be 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/mempool.h> | 21 | #include <linux/mempool.h> |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/elf.h> | 23 | #include <linux/elf.h> |
24 | #include <linux/ftrace.h> | ||
24 | #include <asm/dwarf.h> | 25 | #include <asm/dwarf.h> |
25 | #include <asm/unwinder.h> | 26 | #include <asm/unwinder.h> |
26 | #include <asm/sections.h> | 27 | #include <asm/sections.h> |
@@ -569,6 +570,27 @@ struct dwarf_frame * dwarf_unwind_stack(unsigned long pc, | |||
569 | if (!pc && !prev) | 570 | if (!pc && !prev) |
570 | pc = (unsigned long)current_text_addr(); | 571 | pc = (unsigned long)current_text_addr(); |
571 | 572 | ||
573 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
574 | /* | ||
575 | * If our stack has been patched by the function graph tracer | ||
576 | * then we might see the address of return_to_handler() where we | ||
577 | * expected to find the real return address. | ||
578 | */ | ||
579 | if (pc == (unsigned long)&return_to_handler) { | ||
580 | int index = current->curr_ret_stack; | ||
581 | |||
582 | /* | ||
583 | * We currently have no way of tracking how many | ||
584 | * return_to_handler()'s we've seen. If there is more | ||
585 | * than one patched return address on our stack, | ||
586 | * complain loudly. | ||
587 | */ | ||
588 | WARN_ON(index > 0); | ||
589 | |||
590 | pc = current->ret_stack[index].ret; | ||
591 | } | ||
592 | #endif | ||
593 | |||
572 | frame = mempool_alloc(dwarf_frame_pool, GFP_ATOMIC); | 594 | frame = mempool_alloc(dwarf_frame_pool, GFP_ATOMIC); |
573 | if (!frame) { | 595 | if (!frame) { |
574 | printk(KERN_ERR "Unable to allocate a dwarf frame\n"); | 596 | printk(KERN_ERR "Unable to allocate a dwarf frame\n"); |
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 11c289ecc090..7aa89fac1f81 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/kernel_stat.h> | 12 | #include <linux/kernel_stat.h> |
13 | #include <linux/seq_file.h> | 13 | #include <linux/seq_file.h> |
14 | #include <linux/ftrace.h> | ||
14 | #include <asm/processor.h> | 15 | #include <asm/processor.h> |
15 | #include <asm/machvec.h> | 16 | #include <asm/machvec.h> |
16 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
@@ -114,7 +115,7 @@ static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly; | |||
114 | static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; | 115 | static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; |
115 | #endif | 116 | #endif |
116 | 117 | ||
117 | asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) | 118 | asmlinkage __irq_entry int do_IRQ(unsigned int irq, struct pt_regs *regs) |
118 | { | 119 | { |
119 | struct pt_regs *old_regs = set_irq_regs(regs); | 120 | struct pt_regs *old_regs = set_irq_regs(regs); |
120 | #ifdef CONFIG_IRQSTACKS | 121 | #ifdef CONFIG_IRQSTACKS |
diff --git a/arch/sh/kernel/sh_ksyms_32.c b/arch/sh/kernel/sh_ksyms_32.c index 8663c7a49ac7..509830da6f30 100644 --- a/arch/sh/kernel/sh_ksyms_32.c +++ b/arch/sh/kernel/sh_ksyms_32.c | |||
@@ -85,6 +85,20 @@ DECLARE_EXPORT(__movstr_i4_even); | |||
85 | DECLARE_EXPORT(__movstr_i4_odd); | 85 | DECLARE_EXPORT(__movstr_i4_odd); |
86 | DECLARE_EXPORT(__movstrSI12_i4); | 86 | DECLARE_EXPORT(__movstrSI12_i4); |
87 | DECLARE_EXPORT(__movmem); | 87 | DECLARE_EXPORT(__movmem); |
88 | DECLARE_EXPORT(__movmemSI8); | ||
89 | DECLARE_EXPORT(__movmemSI12); | ||
90 | DECLARE_EXPORT(__movmemSI16); | ||
91 | DECLARE_EXPORT(__movmemSI20); | ||
92 | DECLARE_EXPORT(__movmemSI24); | ||
93 | DECLARE_EXPORT(__movmemSI28); | ||
94 | DECLARE_EXPORT(__movmemSI32); | ||
95 | DECLARE_EXPORT(__movmemSI36); | ||
96 | DECLARE_EXPORT(__movmemSI40); | ||
97 | DECLARE_EXPORT(__movmemSI44); | ||
98 | DECLARE_EXPORT(__movmemSI48); | ||
99 | DECLARE_EXPORT(__movmemSI52); | ||
100 | DECLARE_EXPORT(__movmemSI56); | ||
101 | DECLARE_EXPORT(__movmemSI60); | ||
88 | DECLARE_EXPORT(__movmem_i4_even); | 102 | DECLARE_EXPORT(__movmem_i4_even); |
89 | DECLARE_EXPORT(__movmem_i4_odd); | 103 | DECLARE_EXPORT(__movmem_i4_odd); |
90 | DECLARE_EXPORT(__movmemSI12_i4); | 104 | DECLARE_EXPORT(__movmemSI12_i4); |