78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-only */
 | |
| /*
 | |
|  * Early IDT handler entry points
 | |
|  *
 | |
|  * Copyright (C) 2019 SUSE
 | |
|  *
 | |
|  * Author: Joerg Roedel <jroedel@suse.de>
 | |
|  */
 | |
| 
 | |
| #include <asm/segment.h>
 | |
| 
 | |
| /* For ORIG_RAX */
 | |
| #include "../../entry/calling.h"
 | |
| 
 | |
| .macro EXCEPTION_HANDLER name function error_code=0
 | |
| SYM_FUNC_START(\name)
 | |
| 
 | |
| 	/* Build pt_regs */
 | |
| 	.if \error_code == 0
 | |
| 	pushq   $0
 | |
| 	.endif
 | |
| 
 | |
| 	pushq   %rdi
 | |
| 	pushq   %rsi
 | |
| 	pushq   %rdx
 | |
| 	pushq   %rcx
 | |
| 	pushq   %rax
 | |
| 	pushq   %r8
 | |
| 	pushq   %r9
 | |
| 	pushq   %r10
 | |
| 	pushq   %r11
 | |
| 	pushq   %rbx
 | |
| 	pushq   %rbp
 | |
| 	pushq   %r12
 | |
| 	pushq   %r13
 | |
| 	pushq   %r14
 | |
| 	pushq   %r15
 | |
| 
 | |
| 	/* Call handler with pt_regs */
 | |
| 	movq    %rsp, %rdi
 | |
| 	/* Error code is second parameter */
 | |
| 	movq	ORIG_RAX(%rsp), %rsi
 | |
| 	call    \function
 | |
| 
 | |
| 	/* Restore regs */
 | |
| 	popq    %r15
 | |
| 	popq    %r14
 | |
| 	popq    %r13
 | |
| 	popq    %r12
 | |
| 	popq    %rbp
 | |
| 	popq    %rbx
 | |
| 	popq    %r11
 | |
| 	popq    %r10
 | |
| 	popq    %r9
 | |
| 	popq    %r8
 | |
| 	popq    %rax
 | |
| 	popq    %rcx
 | |
| 	popq    %rdx
 | |
| 	popq    %rsi
 | |
| 	popq    %rdi
 | |
| 
 | |
| 	/* Remove error code and return */
 | |
| 	addq    $8, %rsp
 | |
| 
 | |
| 	iretq
 | |
| SYM_FUNC_END(\name)
 | |
| 	.endm
 | |
| 
 | |
| 	.text
 | |
| 	.code64
 | |
| 
 | |
| EXCEPTION_HANDLER	boot_page_fault do_boot_page_fault error_code=1
 | |
| 
 | |
| #ifdef CONFIG_AMD_MEM_ENCRYPT
 | |
| EXCEPTION_HANDLER	boot_stage1_vc do_vc_no_ghcb		error_code=1
 | |
| EXCEPTION_HANDLER	boot_stage2_vc do_boot_stage2_vc	error_code=1
 | |
| #endif
 |