blob: 47ed5af9722841722d089b53b511db9f66c7f731 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: BSD-3-Clause */
Simon Glassce62a252015-08-04 12:33:56 -06002/*
3 * crt0-efi-x86_64.S - x86_64 EFI startup code.
4 * Copyright (C) 1999 Hewlett-Packard Co.
5 * Contributed by David Mosberger <davidm@hpl.hp.com>.
Ivan Gorinov41236622018-06-13 17:27:39 -07006 * Copyright (C) 2005 Intel Corporation
Simon Glassce62a252015-08-04 12:33:56 -06007 * Contributed by Fenghua Yu <fenghua.yu@intel.com>.
8 *
9 * All rights reserved.
Simon Glassce62a252015-08-04 12:33:56 -060010 */
11 .text
12 .align 4
13
14 .globl _start
15_start:
16 subq $8, %rsp
Ivan Gorinov41236622018-06-13 17:27:39 -070017
Simon Glassce62a252015-08-04 12:33:56 -060018 pushq %rcx
19 pushq %rdx
20
Ivan Gorinov41236622018-06-13 17:27:39 -070021 lea image_base(%rip), %rcx
22 lea _DYNAMIC(%rip), %rdx
23
Simon Glassce62a252015-08-04 12:33:56 -060024 call _relocate
25
Ivan Gorinov41236622018-06-13 17:27:39 -070026 popq %rdx
27 popq %rcx
28
29 testq %rax, %rax
30 jnz .exit
Simon Glassce62a252015-08-04 12:33:56 -060031
32 call efi_main
Ivan Gorinov41236622018-06-13 17:27:39 -070033.exit:
Simon Glassce62a252015-08-04 12:33:56 -060034 addq $8, %rsp
35
Simon Glassce62a252015-08-04 12:33:56 -060036 ret
37
38 /*
39 * hand-craft a dummy .reloc section so EFI knows it's a relocatable
40 * executable:
41 */
42 .data
43dummy: .long 0
44
45#define IMAGE_REL_ABSOLUTE 0
46 .section .reloc, "a"
47label1:
48 .long dummy-label1 /* Page RVA */
49 .long 10 /* Block Size (2*4+2) */
50 .word (IMAGE_REL_ABSOLUTE << 12) + 0 /* reloc for dummy */