2N/A/*
2N/A * GRUB -- GRand Unified Bootloader
2N/A * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc.
2N/A *
2N/A * GRUB is free software: you can redistribute it and/or modify
2N/A * it under the terms of the GNU General Public License as published by
2N/A * the Free Software Foundation, either version 3 of the License, or
2N/A * (at your option) any later version.
2N/A *
2N/A * GRUB is distributed in the hope that it will be useful,
2N/A * but WITHOUT ANY WARRANTY; without even the implied warranty of
2N/A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2N/A * GNU General Public License for more details.
2N/A *
2N/A * You should have received a copy of the GNU General Public License
2N/A * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
2N/A */
2N/A
2N/A#include <grub/symbol.h>
2N/A/* For stack parameters. */
2N/A#include <grub/i386/pc/memory.h>
2N/A#include <grub/machine/memory.h>
2N/A#include <grub/cpu/linux.h>
2N/A#include <grub/offsets.h>
2N/A#include <multiboot.h>
2N/A#include <multiboot2.h>
2N/A
2N/A/*
2N/A * Note: GRUB is compiled with the options -mrtd and -mregparm=3.
2N/A * So the first three arguments are passed in %eax, %edx, and %ecx,
2N/A * respectively, and if a function has a fixed number of arguments
2N/A * and the number if greater than three, the function must return
2N/A * with "ret $N" where N is ((the number of arguments) - 3) * 4.
2N/A */
2N/A
2N/A .file "startup.S"
2N/A .text
2N/A .globl start, _start
2N/Astart:
2N/A_start:
2N/A#ifdef GRUB_MACHINE_MULTIBOOT
2N/A cmpl $MULTIBOOT_BOOTLOADER_MAGIC, %eax
2N/A jne 0f
2N/A movl %ebx, EXT_C(startup_multiboot_info)
2N/A0:
2N/A#endif
2N/A
2N/A /* initialize the stack */
2N/A movl $GRUB_MEMORY_MACHINE_PROT_STACK, %esp
2N/A
2N/A /* jump to the main body of C code */
2N/A jmp EXT_C(grub_main)
2N/A
2N/A/*
2N/A * Support for booting GRUB from a Multiboot boot loader (e.g. GRUB itself).
2N/A */
2N/A .p2align 2 /* force 4-byte alignment */
2N/Amultiboot_header:
2N/A /* magic */
2N/A .long 0x1BADB002
2N/A /* flags */
2N/A .long MULTIBOOT_MEMORY_INFO
2N/A /* checksum */
2N/A .long -0x1BADB002 - MULTIBOOT_MEMORY_INFO
2N/A
2N/A/*
2N/A * prot_to_real and associated structures (but NOT real_to_prot, that is
2N/A * only needed for BIOS gates).
2N/A */
2N/A#include "../realmode.S"
2N/A
2N/A#include "../int.S"