start.S revision 1.1
11.1Snonaka/* $NetBSD: start.S,v 1.1 2017/01/24 11:09:14 nonaka Exp $ */ 21.1Snonaka 31.1Snonaka/*- 41.1Snonaka * Copyright (c) 2008-2010 Rui Paulo <rpaulo@FreeBSD.org> 51.1Snonaka * All rights reserved. 61.1Snonaka * 71.1Snonaka * Redistribution and use in source and binary forms, with or without 81.1Snonaka * modification, are permitted provided that the following conditions 91.1Snonaka * are met: 101.1Snonaka * 1. Redistributions of source code must retain the above copyright 111.1Snonaka * notice, this list of conditions and the following disclaimer. 121.1Snonaka * 2. Redistributions in binary form must reproduce the above copyright 131.1Snonaka * notice, this list of conditions and the following disclaimer in the 141.1Snonaka * documentation and/or other materials provided with the distribution. 151.1Snonaka * 161.1Snonaka * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 171.1Snonaka * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 181.1Snonaka * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 191.1Snonaka * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 201.1Snonaka * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 211.1Snonaka * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 221.1Snonaka * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 231.1Snonaka * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 241.1Snonaka * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 251.1Snonaka * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261.1Snonaka * SUCH DAMAGE. 271.1Snonaka * 281.1Snonaka * $FreeBSD: head/sys/boot/efi/loader/arch/i386/start.S 282728 2015-05-10 13:30:21Z ian $ 291.1Snonaka */ 301.1Snonaka 311.1Snonaka#include <machine/asm.h> 321.1Snonaka 331.1Snonaka .text 341.1Snonaka .align 16 351.1Snonaka 361.1Snonaka/* 371.1Snonaka * EFI entry point. 381.1Snonaka * _start(EFI_IMAGE image_handle, EFI_SYSTEM_TABLE *system_table); 391.1Snonaka * 401.1Snonaka * We calculate the base address along with _DYNAMIC, relocate us and finally 411.1Snonaka * pass control to efi_main. 421.1Snonaka */ 431.1Snonaka 441.1SnonakaENTRY(_start) 451.1Snonaka pushl %ebp 461.1Snonaka movl %esp, %ebp 471.1Snonaka 481.1Snonaka pushl 12(%ebp) /* image_handle */ 491.1Snonaka pushl 8(%ebp) /* system_table */ 501.1Snonaka call 0f 511.1Snonaka0: popl %eax 521.1Snonaka movl %eax, %ebx 531.1Snonaka addl $ImageBase-0b, %eax 541.1Snonaka addl $_DYNAMIC-0b, %ebx 551.1Snonaka pushl %ebx /* dynamic */ 561.1Snonaka pushl %eax /* ImageBase */ 571.1Snonaka call _C_LABEL(self_reloc) 581.1Snonaka popl %ebx /* remove ImageBase from the stack */ 591.1Snonaka popl %ebx /* remove dynamic from the stack */ 601.1Snonaka call _C_LABEL(efi_main) 611.1Snonaka1: leave 621.1Snonaka ret 631.1SnonakaEND(_start) 641.1Snonaka 651.1Snonaka /* 661.1Snonaka * hand-craft a dummy .reloc section so EFI knows it's a relocatable 671.1Snonaka * executable: 681.1Snonaka */ 691.1Snonaka 701.1Snonaka .data 711.1Snonaka .section .reloc, "a" 721.1Snonaka .long 0 731.1Snonaka .long 10 741.1Snonaka .word 0 75