1*2dcd4e9eSSimon Glass/* 2*2dcd4e9eSSimon Glass * crt0-efi-ia32.S - x86 EFI startup code. 3*2dcd4e9eSSimon Glass * 4*2dcd4e9eSSimon Glass * Copyright (C) 1999 Hewlett-Packard Co. 5*2dcd4e9eSSimon Glass * Contributed by David Mosberger <davidm@hpl.hp.com>. 6*2dcd4e9eSSimon Glass * All rights reserved. 7*2dcd4e9eSSimon Glass * 8*2dcd4e9eSSimon Glass * SPDX-License-Identifier: BSD-3-Clause 9*2dcd4e9eSSimon Glass */ 10*2dcd4e9eSSimon Glass 11*2dcd4e9eSSimon Glass .text 12*2dcd4e9eSSimon Glass .align 4 13*2dcd4e9eSSimon Glass 14*2dcd4e9eSSimon Glass .globl _start 15*2dcd4e9eSSimon Glass_start: 16*2dcd4e9eSSimon Glass pushl %ebp 17*2dcd4e9eSSimon Glass movl %esp,%ebp 18*2dcd4e9eSSimon Glass 19*2dcd4e9eSSimon Glass pushl 12(%ebp) # copy "image" argument 20*2dcd4e9eSSimon Glass pushl 8(%ebp) # copy "systab" argument 21*2dcd4e9eSSimon Glass 22*2dcd4e9eSSimon Glass call 0f 23*2dcd4e9eSSimon Glass0: popl %eax 24*2dcd4e9eSSimon Glass movl %eax,%ebx 25*2dcd4e9eSSimon Glass 26*2dcd4e9eSSimon Glass addl $image_base-0b,%eax # %eax = ldbase 27*2dcd4e9eSSimon Glass addl $_DYNAMIC-0b,%ebx # %ebx = _DYNAMIC 28*2dcd4e9eSSimon Glass 29*2dcd4e9eSSimon Glass pushl %ebx # pass _DYNAMIC as second argument 30*2dcd4e9eSSimon Glass pushl %eax # pass ldbase as first argument 31*2dcd4e9eSSimon Glass call _relocate 32*2dcd4e9eSSimon Glass popl %ebx 33*2dcd4e9eSSimon Glass popl %ebx 34*2dcd4e9eSSimon Glass testl %eax,%eax 35*2dcd4e9eSSimon Glass jne .exit 36*2dcd4e9eSSimon Glass call efi_main # call app with "image" and "systab" argument 37*2dcd4e9eSSimon Glass 38*2dcd4e9eSSimon Glass.exit: leave 39*2dcd4e9eSSimon Glass ret 40*2dcd4e9eSSimon Glass 41*2dcd4e9eSSimon Glass /* 42*2dcd4e9eSSimon Glass * hand-craft a dummy .reloc section so EFI knows it's a relocatable 43*2dcd4e9eSSimon Glass * executable: 44*2dcd4e9eSSimon Glass */ 45*2dcd4e9eSSimon Glass .data 46*2dcd4e9eSSimon Glassdummy: .long 0 47*2dcd4e9eSSimon Glass 48*2dcd4e9eSSimon Glass#define IMAGE_REL_ABSOLUTE 0 49*2dcd4e9eSSimon Glass .section .reloc 50*2dcd4e9eSSimon Glass .long dummy /* Page RVA */ 51*2dcd4e9eSSimon Glass .long 10 /* Block Size (2*4+2) */ 52*2dcd4e9eSSimon Glass .word (IMAGE_REL_ABSOLUTE << 12) + 0 /* reloc for dummy */ 53