crt0-efi-x86_64.S revision 1.1       1  1.1  jakllsch /*	$NetBSD: crt0-efi-x86_64.S,v 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