crt0-efi-x86_64.S revision 1.1.1.1 1 1.1 jakllsch /* $NetBSD: crt0-efi-x86_64.S,v 1.1.1.1 2014/04/01 16:16:08 jakllsch Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch /* crt0-efi-x86_64.S - x86_64 EFI startup code.
4 1.1 jakllsch Copyright (C) 1999 Hewlett-Packard Co.
5 1.1 jakllsch Contributed by David Mosberger <davidm (at) hpl.hp.com>.
6 1.1 jakllsch Copyright (C) 2005 Intel Co.
7 1.1 jakllsch Contributed by Fenghua Yu <fenghua.yu (at) intel.com>.
8 1.1 jakllsch
9 1.1 jakllsch All rights reserved.
10 1.1 jakllsch
11 1.1 jakllsch Redistribution and use in source and binary forms, with or without
12 1.1 jakllsch modification, are permitted provided that the following conditions
13 1.1 jakllsch are met:
14 1.1 jakllsch
15 1.1 jakllsch * Redistributions of source code must retain the above copyright
16 1.1 jakllsch notice, this list of conditions and the following disclaimer.
17 1.1 jakllsch * Redistributions in binary form must reproduce the above
18 1.1 jakllsch copyright notice, this list of conditions and the following
19 1.1 jakllsch disclaimer in the documentation and/or other materials
20 1.1 jakllsch provided with the distribution.
21 1.1 jakllsch * Neither the name of Hewlett-Packard Co. nor the names of its
22 1.1 jakllsch contributors may be used to endorse or promote products derived
23 1.1 jakllsch from this software without specific prior written permission.
24 1.1 jakllsch
25 1.1 jakllsch THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
26 1.1 jakllsch CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
27 1.1 jakllsch INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28 1.1 jakllsch MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29 1.1 jakllsch DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
30 1.1 jakllsch BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
31 1.1 jakllsch OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 1.1 jakllsch PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 1.1 jakllsch PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 1.1 jakllsch THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
35 1.1 jakllsch TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
36 1.1 jakllsch THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 1.1 jakllsch SUCH DAMAGE.
38 1.1 jakllsch */
39 1.1 jakllsch .text
40 1.1 jakllsch .align 4
41 1.1 jakllsch
42 1.1 jakllsch .globl _start
43 1.1 jakllsch _start:
44 1.1 jakllsch subq $8, %rsp
45 1.1 jakllsch pushq %rcx
46 1.1 jakllsch pushq %rdx
47 1.1 jakllsch
48 1.1 jakllsch 0:
49 1.1 jakllsch lea ImageBase(%rip), %rdi
50 1.1 jakllsch lea _DYNAMIC(%rip), %rsi
51 1.1 jakllsch
52 1.1 jakllsch popq %rcx
53 1.1 jakllsch popq %rdx
54 1.1 jakllsch pushq %rcx
55 1.1 jakllsch pushq %rdx
56 1.1 jakllsch call _relocate
57 1.1 jakllsch
58 1.1 jakllsch popq %rdi
59 1.1 jakllsch popq %rsi
60 1.1 jakllsch
61 1.1 jakllsch call efi_main
62 1.1 jakllsch addq $8, %rsp
63 1.1 jakllsch
64 1.1 jakllsch .exit:
65 1.1 jakllsch ret
66 1.1 jakllsch
67 1.1 jakllsch // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:
68 1.1 jakllsch
69 1.1 jakllsch .data
70 1.1 jakllsch dummy: .long 0
71 1.1 jakllsch
72 1.1 jakllsch #define IMAGE_REL_ABSOLUTE 0
73 1.1 jakllsch .section .reloc, "a"
74 1.1 jakllsch label1:
75 1.1 jakllsch .long dummy-label1 // Page RVA
76 1.1 jakllsch .long 10 // Block Size (2*4+2)
77 1.1 jakllsch .word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
78 1.1 jakllsch
79