calling.h (29a6d7964d6853f5bcd84dfb92c074fb41d00563) calling.h (946c191161cef10c667b5ee3179db1714fa5b7c0)
1#include <linux/jump_label.h>
2
3/*
4
5 x86 function call convention, 64-bit:
6 -------------------------------------
7 arguments | callee-saved | extra caller-saved | return
8 [callee-clobbered] | | [callee-clobbered] |

--- 178 unchanged lines hidden (view full) ---

187 .macro REMOVE_PT_GPREGS_FROM_STACK addskip=0
188 subq $-(15*8+\addskip), %rsp
189 .endm
190
191 .macro icebp
192 .byte 0xf1
193 .endm
194
1#include <linux/jump_label.h>
2
3/*
4
5 x86 function call convention, 64-bit:
6 -------------------------------------
7 arguments | callee-saved | extra caller-saved | return
8 [callee-clobbered] | | [callee-clobbered] |

--- 178 unchanged lines hidden (view full) ---

187 .macro REMOVE_PT_GPREGS_FROM_STACK addskip=0
188 subq $-(15*8+\addskip), %rsp
189 .endm
190
191 .macro icebp
192 .byte 0xf1
193 .endm
194
195/*
196 * This is a sneaky trick to help the unwinder find pt_regs on the stack. The
197 * frame pointer is replaced with an encoded pointer to pt_regs. The encoding
198 * is just setting the LSB, which makes it an invalid stack address and is also
199 * a signal to the unwinder that it's a pt_regs pointer in disguise.
200 *
201 * NOTE: This macro must be used *after* SAVE_EXTRA_REGS because it corrupts
202 * the original rbp.
203 */
204.macro ENCODE_FRAME_POINTER ptregs_offset=0
205#ifdef CONFIG_FRAME_POINTER
206 .if \ptregs_offset
207 leaq \ptregs_offset(%rsp), %rbp
208 .else
209 mov %rsp, %rbp
210 .endif
211 orq $0x1, %rbp
212#endif
213.endm
214
195#endif /* CONFIG_X86_64 */
196
197/*
198 * This does 'call enter_from_user_mode' unless we can avoid it based on
199 * kernel config or using the static jump infrastructure.
200 */
201.macro CALL_enter_from_user_mode
202#ifdef CONFIG_CONTEXT_TRACKING
203#ifdef HAVE_JUMP_LABEL
204 STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0
205#endif
206 call enter_from_user_mode
207.Lafter_call_\@:
208#endif
209.endm
215#endif /* CONFIG_X86_64 */
216
217/*
218 * This does 'call enter_from_user_mode' unless we can avoid it based on
219 * kernel config or using the static jump infrastructure.
220 */
221.macro CALL_enter_from_user_mode
222#ifdef CONFIG_CONTEXT_TRACKING
223#ifdef HAVE_JUMP_LABEL
224 STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0
225#endif
226 call enter_from_user_mode
227.Lafter_call_\@:
228#endif
229.endm