1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Early IDT handler entry points 4 * 5 * Copyright (C) 2019 SUSE 6 * 7 * Author: Joerg Roedel <jroedel@suse.de> 8 */ 9 10 #include <asm/segment.h> 11 12 /* For ORIG_RAX */ 13 #include "../../entry/calling.h" 14 15 .macro EXCEPTION_HANDLER name function error_code=0 16 SYM_FUNC_START(\name) 17 18 /* Build pt_regs */ 19 .if \error_code == 0 20 pushq $0 21 .endif 22 23 pushq %rdi 24 pushq %rsi 25 pushq %rdx 26 pushq %rcx 27 pushq %rax 28 pushq %r8 29 pushq %r9 30 pushq %r10 31 pushq %r11 32 pushq %rbx 33 pushq %rbp 34 pushq %r12 35 pushq %r13 36 pushq %r14 37 pushq %r15 38 39 /* Call handler with pt_regs */ 40 movq %rsp, %rdi 41 /* Error code is second parameter */ 42 movq ORIG_RAX(%rsp), %rsi 43 call \function 44 45 /* Restore regs */ 46 popq %r15 47 popq %r14 48 popq %r13 49 popq %r12 50 popq %rbp 51 popq %rbx 52 popq %r11 53 popq %r10 54 popq %r9 55 popq %r8 56 popq %rax 57 popq %rcx 58 popq %rdx 59 popq %rsi 60 popq %rdi 61 62 /* Remove error code and return */ 63 addq $8, %rsp 64 65 iretq 66 SYM_FUNC_END(\name) 67 .endm 68 69 .text 70 .code64 71 72 EXCEPTION_HANDLER boot_page_fault do_boot_page_fault error_code=1 73 EXCEPTION_HANDLER boot_nmi_trap do_boot_nmi_trap error_code=0 74 75 #ifdef CONFIG_AMD_MEM_ENCRYPT 76 EXCEPTION_HANDLER boot_stage1_vc do_vc_no_ghcb error_code=1 77 EXCEPTION_HANDLER boot_stage2_vc do_boot_stage2_vc error_code=1 78 #endif
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.