calling.h (597473720f4dc69749542bfcfed4a927a43d935e) calling.h (55aedddb6149ab71bec9f050846855113977b033)
1/* SPDX-License-Identifier: GPL-2.0 */
2#include <linux/jump_label.h>
3#include <asm/unwind_hints.h>
4#include <asm/cpufeatures.h>
5#include <asm/page_types.h>
6#include <asm/percpu.h>
7#include <asm/asm-offsets.h>
8#include <asm/processor-flags.h>

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

167 .endif
168 popq %rdx
169 popq %rsi
170 .if \pop_rdi
171 popq %rdi
172 .endif
173.endm
174
1/* SPDX-License-Identifier: GPL-2.0 */
2#include <linux/jump_label.h>
3#include <asm/unwind_hints.h>
4#include <asm/cpufeatures.h>
5#include <asm/page_types.h>
6#include <asm/percpu.h>
7#include <asm/asm-offsets.h>
8#include <asm/processor-flags.h>

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

167 .endif
168 popq %rdx
169 popq %rsi
170 .if \pop_rdi
171 popq %rdi
172 .endif
173.endm
174
175/*
176 * This is a sneaky trick to help the unwinder find pt_regs on the stack. The
177 * frame pointer is replaced with an encoded pointer to pt_regs. The encoding
178 * is just setting the LSB, which makes it an invalid stack address and is also
179 * a signal to the unwinder that it's a pt_regs pointer in disguise.
180 *
181 * NOTE: This macro must be used *after* PUSH_AND_CLEAR_REGS because it corrupts
182 * the original rbp.
183 */
184.macro ENCODE_FRAME_POINTER ptregs_offset=0
185#ifdef CONFIG_FRAME_POINTER
186 leaq 1+\ptregs_offset(%rsp), %rbp
187#endif
188.endm
189
190#ifdef CONFIG_PAGE_TABLE_ISOLATION
191
192/*
193 * PAGE_TABLE_ISOLATION PGDs are 8k. Flip bit 12 to switch between the two
194 * halves:
195 */
196#define PTI_USER_PGTABLE_BIT PAGE_SHIFT
197#define PTI_USER_PGTABLE_MASK (1 << PTI_USER_PGTABLE_BIT)

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

353#ifdef CONFIG_CONTEXT_TRACKING
354#ifdef CONFIG_JUMP_LABEL
355 STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0
356#endif
357 call enter_from_user_mode
358.Lafter_call_\@:
359#endif
360.endm
175#ifdef CONFIG_PAGE_TABLE_ISOLATION
176
177/*
178 * PAGE_TABLE_ISOLATION PGDs are 8k. Flip bit 12 to switch between the two
179 * halves:
180 */
181#define PTI_USER_PGTABLE_BIT PAGE_SHIFT
182#define PTI_USER_PGTABLE_MASK (1 << PTI_USER_PGTABLE_BIT)

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

338#ifdef CONFIG_CONTEXT_TRACKING
339#ifdef CONFIG_JUMP_LABEL
340 STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0
341#endif
342 call enter_from_user_mode
343.Lafter_call_\@:
344#endif
345.endm
346
347#ifdef CONFIG_PARAVIRT_XXL
348#define GET_CR2_INTO(reg) GET_CR2_INTO_AX ; _ASM_MOV %_ASM_AX, reg
349#else
350#define GET_CR2_INTO(reg) _ASM_MOV %cr2, reg
351#endif