start.S revision 1.2
11.2Snonaka/* $NetBSD: start.S,v 1.2 2017/04/29 00:05:35 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.2Snonaka#include <sys/bootblock.h> 331.1Snonaka 341.1Snonaka .text 351.1Snonaka .align 16 361.1Snonaka 371.1Snonaka/* 381.1Snonaka * EFI entry point. 391.1Snonaka * _start(EFI_IMAGE image_handle, EFI_SYSTEM_TABLE *system_table); 401.1Snonaka * 411.1Snonaka * We calculate the base address along with _DYNAMIC, relocate us and finally 421.1Snonaka * pass control to efi_main. 431.1Snonaka */ 441.1Snonaka 451.1SnonakaENTRY(_start) 461.1Snonaka pushl %ebp 471.1Snonaka movl %esp, %ebp 481.1Snonaka 491.1Snonaka pushl 12(%ebp) /* image_handle */ 501.1Snonaka pushl 8(%ebp) /* system_table */ 511.1Snonaka call 0f 521.1Snonaka0: popl %eax 531.1Snonaka movl %eax, %ebx 541.1Snonaka addl $ImageBase-0b, %eax 551.1Snonaka addl $_DYNAMIC-0b, %ebx 561.1Snonaka pushl %ebx /* dynamic */ 571.1Snonaka pushl %eax /* ImageBase */ 581.1Snonaka call _C_LABEL(self_reloc) 591.1Snonaka popl %ebx /* remove ImageBase from the stack */ 601.1Snonaka popl %ebx /* remove dynamic from the stack */ 611.1Snonaka call _C_LABEL(efi_main) 621.1Snonaka1: leave 631.1Snonaka ret 641.1SnonakaEND(_start) 651.1Snonaka 661.1Snonaka /* 671.1Snonaka * hand-craft a dummy .reloc section so EFI knows it's a relocatable 681.1Snonaka * executable: 691.1Snonaka */ 701.1Snonaka 711.1Snonaka .data 721.1Snonaka .section .reloc, "a" 731.1Snonaka .long 0 741.1Snonaka .long 10 751.1Snonaka .word 0 761.2Snonaka 771.2Snonaka /* boot parameters */ 781.2Snonaka .text 791.2Snonaka .code16 801.2Snonaka .align 512 811.2Snonaka.Lfake_bootxx: 821.2Snonaka jmp 1f 831.2Snonaka .balign 4 841.2Snonaka .long X86_BOOT_MAGIC_EFI /* checked by installboot */ 851.2Snonaka .globl _C_LABEL(boot_params) 861.2Snonaka_C_LABEL(boot_params): /* space for patchable variables */ 871.2Snonaka .long 1f - boot_params /* length of this data area */ 881.2Snonaka#include <boot_params.S> 891.2Snonaka . = .Lfake_bootxx + 0x80 /* Space for patching unknown params */ 901.2Snonaka1: 91