diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:21:10 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:21:10 -0500 |
commit | b0f4b285d7ed174804658539129a834270f4829a (patch) | |
tree | be7f8dca58075aba2c6a137fcfd4d44c5c333efc /arch/x86/kernel/entry_64.S | |
parent | be9c5ae4eeec2e85527e95647348b8ea4eb25128 (diff) | |
parent | 5250d329e38cdf7580faeb9c53c17d3588d7d19c (diff) |
Merge branch 'tracing-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'tracing-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (241 commits)
sched, trace: update trace_sched_wakeup()
tracing/ftrace: don't trace on early stage of a secondary cpu boot, v3
Revert "x86: disable X86_PTRACE_BTS"
ring-buffer: prevent false positive warning
ring-buffer: fix dangling commit race
ftrace: enable format arguments checking
x86, bts: memory accounting
x86, bts: add fork and exit handling
ftrace: introduce tracing_reset_online_cpus() helper
tracing: fix warnings in kernel/trace/trace_sched_switch.c
tracing: fix warning in kernel/trace/trace.c
tracing/ring-buffer: remove unused ring_buffer size
trace: fix task state printout
ftrace: add not to regex on filtering functions
trace: better use of stack_trace_enabled for boot up code
trace: add a way to enable or disable the stack tracer
x86: entry_64 - introduce FTRACE_ frame macro v2
tracing/ftrace: add the printk-msg-only option
tracing/ftrace: use preempt_enable_no_resched_notrace in ring_buffer_time_stamp()
x86, bts: correctly report invalid bts records
...
Fixed up trivial conflict in scripts/recordmcount.pl due to SH bits
being already partly merged by the SH merge.
Diffstat (limited to 'arch/x86/kernel/entry_64.S')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 98 |
1 files changed, 69 insertions, 29 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 3194636a4293..e28c7a987793 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -67,16 +67,10 @@ ENTRY(mcount) | |||
67 | END(mcount) | 67 | END(mcount) |
68 | 68 | ||
69 | ENTRY(ftrace_caller) | 69 | ENTRY(ftrace_caller) |
70 | cmpl $0, function_trace_stop | ||
71 | jne ftrace_stub | ||
70 | 72 | ||
71 | /* taken from glibc */ | 73 | MCOUNT_SAVE_FRAME |
72 | subq $0x38, %rsp | ||
73 | movq %rax, (%rsp) | ||
74 | movq %rcx, 8(%rsp) | ||
75 | movq %rdx, 16(%rsp) | ||
76 | movq %rsi, 24(%rsp) | ||
77 | movq %rdi, 32(%rsp) | ||
78 | movq %r8, 40(%rsp) | ||
79 | movq %r9, 48(%rsp) | ||
80 | 74 | ||
81 | movq 0x38(%rsp), %rdi | 75 | movq 0x38(%rsp), %rdi |
82 | movq 8(%rbp), %rsi | 76 | movq 8(%rbp), %rsi |
@@ -86,14 +80,13 @@ ENTRY(ftrace_caller) | |||
86 | ftrace_call: | 80 | ftrace_call: |
87 | call ftrace_stub | 81 | call ftrace_stub |
88 | 82 | ||
89 | movq 48(%rsp), %r9 | 83 | MCOUNT_RESTORE_FRAME |
90 | movq 40(%rsp), %r8 | 84 | |
91 | movq 32(%rsp), %rdi | 85 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
92 | movq 24(%rsp), %rsi | 86 | .globl ftrace_graph_call |
93 | movq 16(%rsp), %rdx | 87 | ftrace_graph_call: |
94 | movq 8(%rsp), %rcx | 88 | jmp ftrace_stub |
95 | movq (%rsp), %rax | 89 | #endif |
96 | addq $0x38, %rsp | ||
97 | 90 | ||
98 | .globl ftrace_stub | 91 | .globl ftrace_stub |
99 | ftrace_stub: | 92 | ftrace_stub: |
@@ -102,15 +95,63 @@ END(ftrace_caller) | |||
102 | 95 | ||
103 | #else /* ! CONFIG_DYNAMIC_FTRACE */ | 96 | #else /* ! CONFIG_DYNAMIC_FTRACE */ |
104 | ENTRY(mcount) | 97 | ENTRY(mcount) |
98 | cmpl $0, function_trace_stop | ||
99 | jne ftrace_stub | ||
100 | |||
105 | cmpq $ftrace_stub, ftrace_trace_function | 101 | cmpq $ftrace_stub, ftrace_trace_function |
106 | jnz trace | 102 | jnz trace |
103 | |||
104 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
105 | cmpq $ftrace_stub, ftrace_graph_return | ||
106 | jnz ftrace_graph_caller | ||
107 | |||
108 | cmpq $ftrace_graph_entry_stub, ftrace_graph_entry | ||
109 | jnz ftrace_graph_caller | ||
110 | #endif | ||
111 | |||
107 | .globl ftrace_stub | 112 | .globl ftrace_stub |
108 | ftrace_stub: | 113 | ftrace_stub: |
109 | retq | 114 | retq |
110 | 115 | ||
111 | trace: | 116 | trace: |
112 | /* taken from glibc */ | 117 | MCOUNT_SAVE_FRAME |
113 | subq $0x38, %rsp | 118 | |
119 | movq 0x38(%rsp), %rdi | ||
120 | movq 8(%rbp), %rsi | ||
121 | subq $MCOUNT_INSN_SIZE, %rdi | ||
122 | |||
123 | call *ftrace_trace_function | ||
124 | |||
125 | MCOUNT_RESTORE_FRAME | ||
126 | |||
127 | jmp ftrace_stub | ||
128 | END(mcount) | ||
129 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
130 | #endif /* CONFIG_FUNCTION_TRACER */ | ||
131 | |||
132 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
133 | ENTRY(ftrace_graph_caller) | ||
134 | cmpl $0, function_trace_stop | ||
135 | jne ftrace_stub | ||
136 | |||
137 | MCOUNT_SAVE_FRAME | ||
138 | |||
139 | leaq 8(%rbp), %rdi | ||
140 | movq 0x38(%rsp), %rsi | ||
141 | subq $MCOUNT_INSN_SIZE, %rsi | ||
142 | |||
143 | call prepare_ftrace_return | ||
144 | |||
145 | MCOUNT_RESTORE_FRAME | ||
146 | |||
147 | retq | ||
148 | END(ftrace_graph_caller) | ||
149 | |||
150 | |||
151 | .globl return_to_handler | ||
152 | return_to_handler: | ||
153 | subq $80, %rsp | ||
154 | |||
114 | movq %rax, (%rsp) | 155 | movq %rax, (%rsp) |
115 | movq %rcx, 8(%rsp) | 156 | movq %rcx, 8(%rsp) |
116 | movq %rdx, 16(%rsp) | 157 | movq %rdx, 16(%rsp) |
@@ -118,13 +159,14 @@ trace: | |||
118 | movq %rdi, 32(%rsp) | 159 | movq %rdi, 32(%rsp) |
119 | movq %r8, 40(%rsp) | 160 | movq %r8, 40(%rsp) |
120 | movq %r9, 48(%rsp) | 161 | movq %r9, 48(%rsp) |
162 | movq %r10, 56(%rsp) | ||
163 | movq %r11, 64(%rsp) | ||
121 | 164 | ||
122 | movq 0x38(%rsp), %rdi | 165 | call ftrace_return_to_handler |
123 | movq 8(%rbp), %rsi | ||
124 | subq $MCOUNT_INSN_SIZE, %rdi | ||
125 | |||
126 | call *ftrace_trace_function | ||
127 | 166 | ||
167 | movq %rax, 72(%rsp) | ||
168 | movq 64(%rsp), %r11 | ||
169 | movq 56(%rsp), %r10 | ||
128 | movq 48(%rsp), %r9 | 170 | movq 48(%rsp), %r9 |
129 | movq 40(%rsp), %r8 | 171 | movq 40(%rsp), %r8 |
130 | movq 32(%rsp), %rdi | 172 | movq 32(%rsp), %rdi |
@@ -132,12 +174,10 @@ trace: | |||
132 | movq 16(%rsp), %rdx | 174 | movq 16(%rsp), %rdx |
133 | movq 8(%rsp), %rcx | 175 | movq 8(%rsp), %rcx |
134 | movq (%rsp), %rax | 176 | movq (%rsp), %rax |
135 | addq $0x38, %rsp | 177 | addq $72, %rsp |
178 | retq | ||
179 | #endif | ||
136 | 180 | ||
137 | jmp ftrace_stub | ||
138 | END(mcount) | ||
139 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
140 | #endif /* CONFIG_FUNCTION_TRACER */ | ||
141 | 181 | ||
142 | #ifndef CONFIG_PREEMPT | 182 | #ifndef CONFIG_PREEMPT |
143 | #define retint_kernel retint_restore_args | 183 | #define retint_kernel retint_restore_args |