diff options
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
-rw-r--r-- | arch/powerpc/kernel/entry_64.S | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index c0db5b769e55..2f511a969d2c 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/bug.h> | 31 | #include <asm/bug.h> |
32 | #include <asm/ptrace.h> | 32 | #include <asm/ptrace.h> |
33 | #include <asm/irqflags.h> | 33 | #include <asm/irqflags.h> |
34 | #include <asm/ftrace.h> | ||
34 | 35 | ||
35 | /* | 36 | /* |
36 | * System calls. | 37 | * System calls. |
@@ -870,3 +871,67 @@ _GLOBAL(enter_prom) | |||
870 | ld r0,16(r1) | 871 | ld r0,16(r1) |
871 | mtlr r0 | 872 | mtlr r0 |
872 | blr | 873 | blr |
874 | |||
875 | #ifdef CONFIG_FTRACE | ||
876 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
877 | _GLOBAL(mcount) | ||
878 | _GLOBAL(_mcount) | ||
879 | /* Taken from output of objdump from lib64/glibc */ | ||
880 | mflr r3 | ||
881 | stdu r1, -112(r1) | ||
882 | std r3, 128(r1) | ||
883 | subi r3, r3, MCOUNT_INSN_SIZE | ||
884 | .globl mcount_call | ||
885 | mcount_call: | ||
886 | bl ftrace_stub | ||
887 | nop | ||
888 | ld r0, 128(r1) | ||
889 | mtlr r0 | ||
890 | addi r1, r1, 112 | ||
891 | blr | ||
892 | |||
893 | _GLOBAL(ftrace_caller) | ||
894 | /* Taken from output of objdump from lib64/glibc */ | ||
895 | mflr r3 | ||
896 | ld r11, 0(r1) | ||
897 | stdu r1, -112(r1) | ||
898 | std r3, 128(r1) | ||
899 | ld r4, 16(r11) | ||
900 | subi r3, r3, MCOUNT_INSN_SIZE | ||
901 | .globl ftrace_call | ||
902 | ftrace_call: | ||
903 | bl ftrace_stub | ||
904 | nop | ||
905 | ld r0, 128(r1) | ||
906 | mtlr r0 | ||
907 | addi r1, r1, 112 | ||
908 | _GLOBAL(ftrace_stub) | ||
909 | blr | ||
910 | #else | ||
911 | _GLOBAL(mcount) | ||
912 | blr | ||
913 | |||
914 | _GLOBAL(_mcount) | ||
915 | /* Taken from output of objdump from lib64/glibc */ | ||
916 | mflr r3 | ||
917 | ld r11, 0(r1) | ||
918 | stdu r1, -112(r1) | ||
919 | std r3, 128(r1) | ||
920 | ld r4, 16(r11) | ||
921 | |||
922 | subi r3, r3, MCOUNT_INSN_SIZE | ||
923 | LOAD_REG_ADDR(r5,ftrace_trace_function) | ||
924 | ld r5,0(r5) | ||
925 | ld r5,0(r5) | ||
926 | mtctr r5 | ||
927 | bctrl | ||
928 | |||
929 | nop | ||
930 | ld r0, 128(r1) | ||
931 | mtlr r0 | ||
932 | addi r1, r1, 112 | ||
933 | _GLOBAL(ftrace_stub) | ||
934 | blr | ||
935 | |||
936 | #endif | ||
937 | #endif | ||