15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* boot.S - bootstrap the kernel */ 25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* Copyright (C) 1999, 2001 Free Software Foundation, Inc. 35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project This program is free software; you can redistribute it and/or modify 55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project it under the terms of the GNU General Public License as published by 65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project the Free Software Foundation; either version 2 of the License, or 75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project (at your option) any later version. 85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project This program is distributed in the hope that it will be useful, 105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project GNU General Public License for more details. 135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project You should have received a copy of the GNU General Public License 155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project along with this program; if not, write to the Free Software 165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define ASM 1 195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include <multiboot.h> 205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .text 225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .globl start, _start 245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstart: 255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project_start: 265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project jmp multiboot_entry 275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Align 32 bits boundary. */ 295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .align 4 305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Multiboot header. */ 325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectmultiboot_header: 335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* magic */ 345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long MULTIBOOT_HEADER_MAGIC 355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* flags */ 365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long MULTIBOOT_HEADER_FLAGS 375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* checksum */ 385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) 395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef __ELF__ 405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* header_addr */ 415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long multiboot_header 425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* load_addr */ 435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long _start 445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* load_end_addr */ 455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long _edata 465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* bss_end_addr */ 475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long _end 485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* entry_addr */ 495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .long multiboot_entry 505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* ! __ELF__ */ 515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectmultiboot_entry: 535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Initialize the stack pointer. */ 545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project movl $(stack + STACK_SIZE), %esp 555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Reset EFLAGS. */ 575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project pushl $0 585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project popf 595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Push the pointer to the Multiboot information structure. */ 615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project pushl %ebx 625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Push the magic value. */ 635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project pushl %eax 645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Now enter the C main function... */ 665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project call EXT_C(cmain) 675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Halt. */ 695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project pushl $halt_message 705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project call EXT_C(printf) 715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectloop: hlt 735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project jmp loop 745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecthalt_message: 765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .asciz "Halted." 775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project 785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project /* Our stack area. */ 795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project .comm stack, STACK_SIZE 805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project