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