xref: /OK3568_Linux_fs/u-boot/arch/x86/lib/crt0_x86_64_efi.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * crt0-efi-x86_64.S - x86_64 EFI startup code.
3*4882a593Smuzhiyun * Copyright (C) 1999 Hewlett-Packard Co.
4*4882a593Smuzhiyun * Contributed by David Mosberger <davidm@hpl.hp.com>.
5*4882a593Smuzhiyun * Copyright (C) 2005 Intel Co.
6*4882a593Smuzhiyun * Contributed by Fenghua Yu <fenghua.yu@intel.com>.
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * All rights reserved.
9*4882a593Smuzhiyun * SPDX-License-Identifier:	BSD-3-Clause
10*4882a593Smuzhiyun */
11*4882a593Smuzhiyun	.text
12*4882a593Smuzhiyun	.align 4
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun	.globl _start
15*4882a593Smuzhiyun_start:
16*4882a593Smuzhiyun	subq $8, %rsp
17*4882a593Smuzhiyun	pushq %rcx
18*4882a593Smuzhiyun	pushq %rdx
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun0:
21*4882a593Smuzhiyun	lea image_base(%rip), %rdi
22*4882a593Smuzhiyun	lea _DYNAMIC(%rip), %rsi
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun	popq %rcx
25*4882a593Smuzhiyun	popq %rdx
26*4882a593Smuzhiyun	pushq %rcx
27*4882a593Smuzhiyun	pushq %rdx
28*4882a593Smuzhiyun	call _relocate
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun	popq %rdi
31*4882a593Smuzhiyun	popq %rsi
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	call efi_main
34*4882a593Smuzhiyun	addq $8, %rsp
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun.exit:
37*4882a593Smuzhiyun	ret
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	/*
40*4882a593Smuzhiyun	 * hand-craft a dummy .reloc section so EFI knows it's a relocatable
41*4882a593Smuzhiyun	 * executable:
42*4882a593Smuzhiyun	 */
43*4882a593Smuzhiyun	.data
44*4882a593Smuzhiyundummy:	.long	0
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun#define IMAGE_REL_ABSOLUTE	0
47*4882a593Smuzhiyun	.section .reloc, "a"
48*4882a593Smuzhiyunlabel1:
49*4882a593Smuzhiyun	.long	dummy-label1				/* Page RVA */
50*4882a593Smuzhiyun	.long	10					/* Block Size (2*4+2) */
51*4882a593Smuzhiyun	.word	(IMAGE_REL_ABSOLUTE << 12) +  0		/* reloc for dummy */
52