xref: /freebsd/stand/i386/libi386/multiboot_tramp.S (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1*ca987d46SWarner Losh/*-
2*ca987d46SWarner Losh * Copyright (c) 2014  Roger Pau Monné <royger@FreeBSD.org>
3*ca987d46SWarner Losh * All rights reserved.
4*ca987d46SWarner Losh *
5*ca987d46SWarner Losh * Redistribution and use in source and binary forms, with or without
6*ca987d46SWarner Losh * modification, are permitted provided that the following conditions
7*ca987d46SWarner Losh * are met:
8*ca987d46SWarner Losh * 1. Redistributions of source code must retain the above copyright
9*ca987d46SWarner Losh *    notice, this list of conditions and the following disclaimer.
10*ca987d46SWarner Losh * 2. Redistributions in binary form must reproduce the above copyright
11*ca987d46SWarner Losh *    notice, this list of conditions and the following disclaimer in the
12*ca987d46SWarner Losh *    documentation and/or other materials provided with the distribution.
13*ca987d46SWarner Losh *
14*ca987d46SWarner Losh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*ca987d46SWarner Losh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*ca987d46SWarner Losh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*ca987d46SWarner Losh * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*ca987d46SWarner Losh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*ca987d46SWarner Losh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*ca987d46SWarner Losh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*ca987d46SWarner Losh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*ca987d46SWarner Losh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*ca987d46SWarner Losh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*ca987d46SWarner Losh * SUCH DAMAGE.
25*ca987d46SWarner Losh */
26*ca987d46SWarner Losh
27*ca987d46SWarner Losh#define ASM_FILE
28*ca987d46SWarner Losh#include "multiboot.h"
29*ca987d46SWarner Losh
30*ca987d46SWarner Losh/*
31*ca987d46SWarner Losh * The multiboot specification requires the executable to be launched
32*ca987d46SWarner Losh * with %cs set to a flat read/execute segment with offset 0 and limit
33*ca987d46SWarner Losh * 0xFFFFFFFF, and the rest of the segment registers (%ds, %es, %fs,
34*ca987d46SWarner Losh * %gs, %ss) to flat read/write segments with the same offset and limit.
35*ca987d46SWarner Losh * This is already done by the BTX code before calling multiboot_tramp,
36*ca987d46SWarner Losh * so there is no need to do anything here.
37*ca987d46SWarner Losh */
38*ca987d46SWarner Losh
39*ca987d46SWarner Losh	.globl	multiboot_tramp
40*ca987d46SWarner Loshmultiboot_tramp:
41*ca987d46SWarner Losh	/* Be sure that interrupts are disabled. */
42*ca987d46SWarner Losh	cli
43*ca987d46SWarner Losh
44*ca987d46SWarner Losh	movl    $MULTIBOOT_BOOTLOADER_MAGIC, %eax
45*ca987d46SWarner Losh	/* Get the entry point and address of the multiboot_info parameter. */
46*ca987d46SWarner Losh	movl	8(%esp), %ebx
47*ca987d46SWarner Losh	movl	4(%esp), %ecx
48*ca987d46SWarner Losh
49*ca987d46SWarner Losh	call    *%ecx
50