mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	x86/asm: Make some functions local
There are a couple of assembly functions which are invoked only locally
in the file they are defined. In C, they are marked "static". In
assembly, annotate them using SYM_{FUNC,CODE}_START_LOCAL (and switch
their ENDPROC to SYM_{FUNC,CODE}_END too). Whether FUNC or CODE is used,
depends on whether ENDPROC or END was used for a particular function
before.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Andy Shevchenko <andy@infradead.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-efi <linux-efi@vger.kernel.org>
Cc: linux-efi@vger.kernel.org
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: platform-driver-x86@vger.kernel.org
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: x86-ml <x86@kernel.org>
Cc: xen-devel@lists.xenproject.org
Link: https://lkml.kernel.org/r/20191011115108.12392-21-jslaby@suse.cz
			
			
This commit is contained in:
		
							parent
							
								
									b4edca1501
								
							
						
					
					
						commit
						ef1e03152c
					
				
					 7 changed files with 35 additions and 34 deletions
				
			
		| 
						 | 
					@ -99,12 +99,12 @@ ENTRY(efi64_thunk)
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(efi64_thunk)
 | 
					ENDPROC(efi64_thunk)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(efi_exit32)
 | 
					SYM_FUNC_START_LOCAL(efi_exit32)
 | 
				
			||||||
	movq	func_rt_ptr(%rip), %rax
 | 
						movq	func_rt_ptr(%rip), %rax
 | 
				
			||||||
	push	%rax
 | 
						push	%rax
 | 
				
			||||||
	mov	%rdi, %rax
 | 
						mov	%rdi, %rax
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(efi_exit32)
 | 
					SYM_FUNC_END(efi_exit32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.code32
 | 
						.code32
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ ENDPROC(efi_exit32)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The stack should represent the 32-bit calling convention.
 | 
					 * The stack should represent the 32-bit calling convention.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(efi_enter32)
 | 
					SYM_FUNC_START_LOCAL(efi_enter32)
 | 
				
			||||||
	movl	$__KERNEL_DS, %eax
 | 
						movl	$__KERNEL_DS, %eax
 | 
				
			||||||
	movl	%eax, %ds
 | 
						movl	%eax, %ds
 | 
				
			||||||
	movl	%eax, %es
 | 
						movl	%eax, %es
 | 
				
			||||||
| 
						 | 
					@ -172,7 +172,7 @@ ENTRY(efi_enter32)
 | 
				
			||||||
	btsl	$X86_CR0_PG_BIT, %eax
 | 
						btsl	$X86_CR0_PG_BIT, %eax
 | 
				
			||||||
	movl	%eax, %cr0
 | 
						movl	%eax, %cr0
 | 
				
			||||||
	lret
 | 
						lret
 | 
				
			||||||
ENDPROC(efi_enter32)
 | 
					SYM_FUNC_END(efi_enter32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.data
 | 
						.data
 | 
				
			||||||
	.balign	8
 | 
						.balign	8
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1101,7 +1101,8 @@ idtentry hypervisor_callback xen_do_hypervisor_callback has_error_code=0
 | 
				
			||||||
 * existing activation in its critical region -- if so, we pop the current
 | 
					 * existing activation in its critical region -- if so, we pop the current
 | 
				
			||||||
 * activation and restart the handler using the previous one.
 | 
					 * activation and restart the handler using the previous one.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(xen_do_hypervisor_callback)		/* do_hypervisor_callback(struct *pt_regs) */
 | 
					/* do_hypervisor_callback(struct *pt_regs) */
 | 
				
			||||||
 | 
					SYM_CODE_START_LOCAL(xen_do_hypervisor_callback)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Since we don't modify %rdi, evtchn_do_upall(struct *pt_regs) will
 | 
					 * Since we don't modify %rdi, evtchn_do_upall(struct *pt_regs) will
 | 
				
			||||||
| 
						 | 
					@ -1119,7 +1120,7 @@ ENTRY(xen_do_hypervisor_callback)		/* do_hypervisor_callback(struct *pt_regs) */
 | 
				
			||||||
	call	xen_maybe_preempt_hcall
 | 
						call	xen_maybe_preempt_hcall
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	jmp	error_exit
 | 
						jmp	error_exit
 | 
				
			||||||
END(xen_do_hypervisor_callback)
 | 
					SYM_CODE_END(xen_do_hypervisor_callback)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Hypervisor uses this for application faults while it executes.
 | 
					 * Hypervisor uses this for application faults while it executes.
 | 
				
			||||||
| 
						 | 
					@ -1214,7 +1215,7 @@ idtentry machine_check		do_mce			has_error_code=0	paranoid=1
 | 
				
			||||||
 * Use slow, but surefire "are we in kernel?" check.
 | 
					 * Use slow, but surefire "are we in kernel?" check.
 | 
				
			||||||
 * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
 | 
					 * Return: ebx=0: need swapgs on exit, ebx=1: otherwise
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(paranoid_entry)
 | 
					SYM_CODE_START_LOCAL(paranoid_entry)
 | 
				
			||||||
	UNWIND_HINT_FUNC
 | 
						UNWIND_HINT_FUNC
 | 
				
			||||||
	cld
 | 
						cld
 | 
				
			||||||
	PUSH_AND_CLEAR_REGS save_ret=1
 | 
						PUSH_AND_CLEAR_REGS save_ret=1
 | 
				
			||||||
| 
						 | 
					@ -1248,7 +1249,7 @@ ENTRY(paranoid_entry)
 | 
				
			||||||
	FENCE_SWAPGS_KERNEL_ENTRY
 | 
						FENCE_SWAPGS_KERNEL_ENTRY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
END(paranoid_entry)
 | 
					SYM_CODE_END(paranoid_entry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * "Paranoid" exit path from exception stack.  This is invoked
 | 
					 * "Paranoid" exit path from exception stack.  This is invoked
 | 
				
			||||||
| 
						 | 
					@ -1262,7 +1263,7 @@ END(paranoid_entry)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it)
 | 
					 * On entry, ebx is "no swapgs" flag (1: don't need swapgs, 0: need it)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(paranoid_exit)
 | 
					SYM_CODE_START_LOCAL(paranoid_exit)
 | 
				
			||||||
	UNWIND_HINT_REGS
 | 
						UNWIND_HINT_REGS
 | 
				
			||||||
	DISABLE_INTERRUPTS(CLBR_ANY)
 | 
						DISABLE_INTERRUPTS(CLBR_ANY)
 | 
				
			||||||
	TRACE_IRQS_OFF_DEBUG
 | 
						TRACE_IRQS_OFF_DEBUG
 | 
				
			||||||
| 
						 | 
					@ -1279,12 +1280,12 @@ ENTRY(paranoid_exit)
 | 
				
			||||||
	RESTORE_CR3	scratch_reg=%rbx save_reg=%r14
 | 
						RESTORE_CR3	scratch_reg=%rbx save_reg=%r14
 | 
				
			||||||
.Lparanoid_exit_restore:
 | 
					.Lparanoid_exit_restore:
 | 
				
			||||||
	jmp restore_regs_and_return_to_kernel
 | 
						jmp restore_regs_and_return_to_kernel
 | 
				
			||||||
END(paranoid_exit)
 | 
					SYM_CODE_END(paranoid_exit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Save all registers in pt_regs, and switch GS if needed.
 | 
					 * Save all registers in pt_regs, and switch GS if needed.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(error_entry)
 | 
					SYM_CODE_START_LOCAL(error_entry)
 | 
				
			||||||
	UNWIND_HINT_FUNC
 | 
						UNWIND_HINT_FUNC
 | 
				
			||||||
	cld
 | 
						cld
 | 
				
			||||||
	PUSH_AND_CLEAR_REGS save_ret=1
 | 
						PUSH_AND_CLEAR_REGS save_ret=1
 | 
				
			||||||
| 
						 | 
					@ -1364,16 +1365,16 @@ ENTRY(error_entry)
 | 
				
			||||||
	call	fixup_bad_iret
 | 
						call	fixup_bad_iret
 | 
				
			||||||
	mov	%rax, %rsp
 | 
						mov	%rax, %rsp
 | 
				
			||||||
	jmp	.Lerror_entry_from_usermode_after_swapgs
 | 
						jmp	.Lerror_entry_from_usermode_after_swapgs
 | 
				
			||||||
END(error_entry)
 | 
					SYM_CODE_END(error_entry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(error_exit)
 | 
					SYM_CODE_START_LOCAL(error_exit)
 | 
				
			||||||
	UNWIND_HINT_REGS
 | 
						UNWIND_HINT_REGS
 | 
				
			||||||
	DISABLE_INTERRUPTS(CLBR_ANY)
 | 
						DISABLE_INTERRUPTS(CLBR_ANY)
 | 
				
			||||||
	TRACE_IRQS_OFF
 | 
						TRACE_IRQS_OFF
 | 
				
			||||||
	testb	$3, CS(%rsp)
 | 
						testb	$3, CS(%rsp)
 | 
				
			||||||
	jz	retint_kernel
 | 
						jz	retint_kernel
 | 
				
			||||||
	jmp	.Lretint_user
 | 
						jmp	.Lretint_user
 | 
				
			||||||
END(error_exit)
 | 
					SYM_CODE_END(error_exit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Runs on exception stack.  Xen PV does not go through this path at all,
 | 
					 * Runs on exception stack.  Xen PV does not go through this path at all,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ ENTRY(copy_page)
 | 
				
			||||||
ENDPROC(copy_page)
 | 
					ENDPROC(copy_page)
 | 
				
			||||||
EXPORT_SYMBOL(copy_page)
 | 
					EXPORT_SYMBOL(copy_page)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(copy_page_regs)
 | 
					SYM_FUNC_START_LOCAL(copy_page_regs)
 | 
				
			||||||
	subq	$2*8,	%rsp
 | 
						subq	$2*8,	%rsp
 | 
				
			||||||
	movq	%rbx,	(%rsp)
 | 
						movq	%rbx,	(%rsp)
 | 
				
			||||||
	movq	%r12,	1*8(%rsp)
 | 
						movq	%r12,	1*8(%rsp)
 | 
				
			||||||
| 
						 | 
					@ -86,4 +86,4 @@ ENTRY(copy_page_regs)
 | 
				
			||||||
	movq	1*8(%rsp), %r12
 | 
						movq	1*8(%rsp), %r12
 | 
				
			||||||
	addq	$2*8, %rsp
 | 
						addq	$2*8, %rsp
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(copy_page_regs)
 | 
					SYM_FUNC_END(copy_page_regs)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@
 | 
				
			||||||
 * rax original destination
 | 
					 * rax original destination
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
SYM_FUNC_START_ALIAS(__memcpy)
 | 
					SYM_FUNC_START_ALIAS(__memcpy)
 | 
				
			||||||
ENTRY(memcpy)
 | 
					SYM_FUNC_START_LOCAL(memcpy)
 | 
				
			||||||
	ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
 | 
						ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
 | 
				
			||||||
		      "jmp memcpy_erms", X86_FEATURE_ERMS
 | 
							      "jmp memcpy_erms", X86_FEATURE_ERMS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@ ENTRY(memcpy)
 | 
				
			||||||
	movl %edx, %ecx
 | 
						movl %edx, %ecx
 | 
				
			||||||
	rep movsb
 | 
						rep movsb
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(memcpy)
 | 
					SYM_FUNC_END(memcpy)
 | 
				
			||||||
SYM_FUNC_END_ALIAS(__memcpy)
 | 
					SYM_FUNC_END_ALIAS(__memcpy)
 | 
				
			||||||
EXPORT_SYMBOL(memcpy)
 | 
					EXPORT_SYMBOL(memcpy)
 | 
				
			||||||
EXPORT_SYMBOL(__memcpy)
 | 
					EXPORT_SYMBOL(__memcpy)
 | 
				
			||||||
| 
						 | 
					@ -50,14 +50,14 @@ EXPORT_SYMBOL(__memcpy)
 | 
				
			||||||
 * memcpy_erms() - enhanced fast string memcpy. This is faster and
 | 
					 * memcpy_erms() - enhanced fast string memcpy. This is faster and
 | 
				
			||||||
 * simpler than memcpy. Use memcpy_erms when possible.
 | 
					 * simpler than memcpy. Use memcpy_erms when possible.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(memcpy_erms)
 | 
					SYM_FUNC_START_LOCAL(memcpy_erms)
 | 
				
			||||||
	movq %rdi, %rax
 | 
						movq %rdi, %rax
 | 
				
			||||||
	movq %rdx, %rcx
 | 
						movq %rdx, %rcx
 | 
				
			||||||
	rep movsb
 | 
						rep movsb
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(memcpy_erms)
 | 
					SYM_FUNC_END(memcpy_erms)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(memcpy_orig)
 | 
					SYM_FUNC_START_LOCAL(memcpy_orig)
 | 
				
			||||||
	movq %rdi, %rax
 | 
						movq %rdi, %rax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmpq $0x20, %rdx
 | 
						cmpq $0x20, %rdx
 | 
				
			||||||
| 
						 | 
					@ -182,7 +182,7 @@ ENTRY(memcpy_orig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.Lend:
 | 
					.Lend:
 | 
				
			||||||
	retq
 | 
						retq
 | 
				
			||||||
ENDPROC(memcpy_orig)
 | 
					SYM_FUNC_END(memcpy_orig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef CONFIG_UML
 | 
					#ifndef CONFIG_UML
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,16 +59,16 @@ EXPORT_SYMBOL(__memset)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * rax   original destination
 | 
					 * rax   original destination
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(memset_erms)
 | 
					SYM_FUNC_START_LOCAL(memset_erms)
 | 
				
			||||||
	movq %rdi,%r9
 | 
						movq %rdi,%r9
 | 
				
			||||||
	movb %sil,%al
 | 
						movb %sil,%al
 | 
				
			||||||
	movq %rdx,%rcx
 | 
						movq %rdx,%rcx
 | 
				
			||||||
	rep stosb
 | 
						rep stosb
 | 
				
			||||||
	movq %r9,%rax
 | 
						movq %r9,%rax
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(memset_erms)
 | 
					SYM_FUNC_END(memset_erms)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(memset_orig)
 | 
					SYM_FUNC_START_LOCAL(memset_orig)
 | 
				
			||||||
	movq %rdi,%r10
 | 
						movq %rdi,%r10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* expand byte value  */
 | 
						/* expand byte value  */
 | 
				
			||||||
| 
						 | 
					@ -139,4 +139,4 @@ ENTRY(memset_orig)
 | 
				
			||||||
	subq %r8,%rdx
 | 
						subq %r8,%rdx
 | 
				
			||||||
	jmp .Lafter_bad_alignment
 | 
						jmp .Lafter_bad_alignment
 | 
				
			||||||
.Lfinal:
 | 
					.Lfinal:
 | 
				
			||||||
ENDPROC(memset_orig)
 | 
					SYM_FUNC_END(memset_orig)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ ENDPROC(efi64_thunk)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This function must be invoked with a 1:1 mapped stack.
 | 
					 * This function must be invoked with a 1:1 mapped stack.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(__efi64_thunk)
 | 
					SYM_FUNC_START_LOCAL(__efi64_thunk)
 | 
				
			||||||
	movl	%ds, %eax
 | 
						movl	%ds, %eax
 | 
				
			||||||
	push	%rax
 | 
						push	%rax
 | 
				
			||||||
	movl	%es, %eax
 | 
						movl	%es, %eax
 | 
				
			||||||
| 
						 | 
					@ -114,14 +114,14 @@ ENTRY(__efi64_thunk)
 | 
				
			||||||
	or	%rcx, %rax
 | 
						or	%rcx, %rax
 | 
				
			||||||
1:
 | 
					1:
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(__efi64_thunk)
 | 
					SYM_FUNC_END(__efi64_thunk)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(efi_exit32)
 | 
					SYM_FUNC_START_LOCAL(efi_exit32)
 | 
				
			||||||
	movq	func_rt_ptr(%rip), %rax
 | 
						movq	func_rt_ptr(%rip), %rax
 | 
				
			||||||
	push	%rax
 | 
						push	%rax
 | 
				
			||||||
	mov	%rdi, %rax
 | 
						mov	%rdi, %rax
 | 
				
			||||||
	ret
 | 
						ret
 | 
				
			||||||
ENDPROC(efi_exit32)
 | 
					SYM_FUNC_END(efi_exit32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.code32
 | 
						.code32
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -129,7 +129,7 @@ ENDPROC(efi_exit32)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The stack should represent the 32-bit calling convention.
 | 
					 * The stack should represent the 32-bit calling convention.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ENTRY(efi_enter32)
 | 
					SYM_FUNC_START_LOCAL(efi_enter32)
 | 
				
			||||||
	movl	$__KERNEL_DS, %eax
 | 
						movl	$__KERNEL_DS, %eax
 | 
				
			||||||
	movl	%eax, %ds
 | 
						movl	%eax, %ds
 | 
				
			||||||
	movl	%eax, %es
 | 
						movl	%eax, %es
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ ENTRY(efi_enter32)
 | 
				
			||||||
	pushl	%eax
 | 
						pushl	%eax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lret
 | 
						lret
 | 
				
			||||||
ENDPROC(efi_enter32)
 | 
					SYM_FUNC_END(efi_enter32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.data
 | 
						.data
 | 
				
			||||||
	.balign	8
 | 
						.balign	8
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,7 @@
 | 
				
			||||||
#define PVH_DS_SEL		(PVH_GDT_ENTRY_DS * 8)
 | 
					#define PVH_DS_SEL		(PVH_GDT_ENTRY_DS * 8)
 | 
				
			||||||
#define PVH_CANARY_SEL		(PVH_GDT_ENTRY_CANARY * 8)
 | 
					#define PVH_CANARY_SEL		(PVH_GDT_ENTRY_CANARY * 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENTRY(pvh_start_xen)
 | 
					SYM_CODE_START_LOCAL(pvh_start_xen)
 | 
				
			||||||
	cld
 | 
						cld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lgdt (_pa(gdt))
 | 
						lgdt (_pa(gdt))
 | 
				
			||||||
| 
						 | 
					@ -146,7 +146,7 @@ ENTRY(pvh_start_xen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ljmp $PVH_CS_SEL, $_pa(startup_32)
 | 
						ljmp $PVH_CS_SEL, $_pa(startup_32)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
END(pvh_start_xen)
 | 
					SYM_CODE_END(pvh_start_xen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.section ".init.data","aw"
 | 
						.section ".init.data","aw"
 | 
				
			||||||
	.balign 8
 | 
						.balign 8
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue