diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-17 19:38:06 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-17 19:38:06 -0500 |
| commit | dbfc985195410dad803c845743c63cd73bd1fe32 (patch) | |
| tree | 6bf6dbecb92539285ebb89948e63e691a0947941 /arch/mips/include/asm/ftrace.h | |
| parent | 7c508e50be47737b9a72d0f15c3ef1146925e2d2 (diff) | |
| parent | 606d62fa02cf1da43c6e21521650fff07a2e56d1 (diff) | |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (71 commits)
MIPS: Lasat: Fix botched changes to sysctl code.
RTC: rtc-cmos.c: Fix warning on MIPS
MIPS: Cleanup random differences beween lmo and Linus' kernel.
MIPS: No longer hardwire CONFIG_EMBEDDED to y
MIPS: Fix and enhance built-in kernel command line
MIPS: eXcite: Remove platform.
MIPS: Loongson: Cleanups of serial port support
MIPS: Lemote 2F: Suspend CS5536 MFGPT Timer
MIPS: Excite: move iodev_remove to .devexit.text
MIPS: Lasat: Convert to proc_fops / seq_file
MIPS: Cleanup signal code initialization
MIPS: Modularize COP2 handling
MIPS: Move EARLY_PRINTK to Kconfig.debug
MIPS: Yeeloong 2F: Cleanup reset logic using the new ec_write function
MIPS: Yeeloong 2F: Add LID open event as the wakeup event
MIPS: Yeeloong 2F: Add basic EC operations
MIPS: Move several variables from .bss to .init.data
MIPS: Tracing: Make function graph tracer work with -mmcount-ra-address
MIPS: Tracing: Reserve $12(t0) for mcount-ra-address of gcc 4.5
MIPS: Tracing: Make ftrace for MIPS work without -fno-omit-frame-pointer
...
Diffstat (limited to 'arch/mips/include/asm/ftrace.h')
| -rw-r--r-- | arch/mips/include/asm/ftrace.h | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/arch/mips/include/asm/ftrace.h b/arch/mips/include/asm/ftrace.h index 40a8c178f10d..3986cd8704f3 100644 --- a/arch/mips/include/asm/ftrace.h +++ b/arch/mips/include/asm/ftrace.h | |||
| @@ -1 +1,90 @@ | |||
| 1 | /* empty */ | 1 | /* |
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive for | ||
| 4 | * more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2009 DSLab, Lanzhou University, China | ||
| 7 | * Author: Wu Zhangjin <wuzj@lemote.com> | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef _ASM_MIPS_FTRACE_H | ||
| 11 | #define _ASM_MIPS_FTRACE_H | ||
| 12 | |||
| 13 | #ifdef CONFIG_FUNCTION_TRACER | ||
| 14 | |||
| 15 | #define MCOUNT_ADDR ((unsigned long)(_mcount)) | ||
| 16 | #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ | ||
| 17 | |||
| 18 | #ifndef __ASSEMBLY__ | ||
| 19 | extern void _mcount(void); | ||
| 20 | #define mcount _mcount | ||
| 21 | |||
| 22 | #define safe_load(load, src, dst, error) \ | ||
| 23 | do { \ | ||
| 24 | asm volatile ( \ | ||
| 25 | "1: " load " %[" STR(dst) "], 0(%[" STR(src) "])\n"\ | ||
| 26 | " li %[" STR(error) "], 0\n" \ | ||
| 27 | "2:\n" \ | ||
| 28 | \ | ||
| 29 | ".section .fixup, \"ax\"\n" \ | ||
| 30 | "3: li %[" STR(error) "], 1\n" \ | ||
| 31 | " j 2b\n" \ | ||
| 32 | ".previous\n" \ | ||
| 33 | \ | ||
| 34 | ".section\t__ex_table,\"a\"\n\t" \ | ||
| 35 | STR(PTR) "\t1b, 3b\n\t" \ | ||
| 36 | ".previous\n" \ | ||
| 37 | \ | ||
| 38 | : [dst] "=&r" (dst), [error] "=r" (error)\ | ||
| 39 | : [src] "r" (src) \ | ||
| 40 | : "memory" \ | ||
| 41 | ); \ | ||
| 42 | } while (0) | ||
| 43 | |||
| 44 | #define safe_store(store, src, dst, error) \ | ||
| 45 | do { \ | ||
| 46 | asm volatile ( \ | ||
| 47 | "1: " store " %[" STR(src) "], 0(%[" STR(dst) "])\n"\ | ||
| 48 | " li %[" STR(error) "], 0\n" \ | ||
| 49 | "2:\n" \ | ||
| 50 | \ | ||
| 51 | ".section .fixup, \"ax\"\n" \ | ||
| 52 | "3: li %[" STR(error) "], 1\n" \ | ||
| 53 | " j 2b\n" \ | ||
| 54 | ".previous\n" \ | ||
| 55 | \ | ||
| 56 | ".section\t__ex_table,\"a\"\n\t"\ | ||
| 57 | STR(PTR) "\t1b, 3b\n\t" \ | ||
| 58 | ".previous\n" \ | ||
| 59 | \ | ||
| 60 | : [error] "=r" (error) \ | ||
| 61 | : [dst] "r" (dst), [src] "r" (src)\ | ||
| 62 | : "memory" \ | ||
| 63 | ); \ | ||
| 64 | } while (0) | ||
| 65 | |||
| 66 | #define safe_load_code(dst, src, error) \ | ||
| 67 | safe_load(STR(lw), src, dst, error) | ||
| 68 | #define safe_store_code(src, dst, error) \ | ||
| 69 | safe_store(STR(sw), src, dst, error) | ||
| 70 | |||
| 71 | #define safe_load_stack(dst, src, error) \ | ||
| 72 | safe_load(STR(PTR_L), src, dst, error) | ||
| 73 | |||
| 74 | #define safe_store_stack(src, dst, error) \ | ||
| 75 | safe_store(STR(PTR_S), src, dst, error) | ||
| 76 | |||
| 77 | |||
| 78 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 79 | static inline unsigned long ftrace_call_adjust(unsigned long addr) | ||
| 80 | { | ||
| 81 | return addr; | ||
| 82 | } | ||
| 83 | |||
| 84 | struct dyn_arch_ftrace { | ||
| 85 | }; | ||
| 86 | |||
| 87 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
| 88 | #endif /* __ASSEMBLY__ */ | ||
| 89 | #endif /* CONFIG_FUNCTION_TRACER */ | ||
| 90 | #endif /* _ASM_MIPS_FTRACE_H */ | ||
