From: Vladimir Serbinenko Date: Wed, 23 Oct 2013 10:48:33 +0000 (+0200) Subject: Add missing file boot_mips.S to the repo X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=b1bd61d583294060274a41f163c2951fa811b07a;p=thirdparty%2Fgrub.git Add missing file boot_mips.S to the repo --- diff --git a/doc/boot_mips.S b/doc/boot_mips.S new file mode 100644 index 000000000..ed604214d --- /dev/null +++ b/doc/boot_mips.S @@ -0,0 +1,119 @@ +/* boot.S - bootstrap the kernel */ +/* Copyright (C) 1999, 2001, 2010 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define ASM_FILE 1 +#include + +/* C symbol format. HAVE_ASM_USCORE is defined by configure. */ +#ifdef HAVE_ASM_USCORE +# define EXT_C(sym) _ ## sym +#else +# define EXT_C(sym) sym +#endif + +/* The size of our stack (16KB). */ +#define STACK_SIZE 0x4000 + +/* The flags for the Multiboot header. */ +#ifdef __ELF__ +# define AOUT_KLUDGE 0 +#else +# define AOUT_KLUDGE MULTIBOOT_AOUT_KLUDGE +#endif + + .text + .set noreorder + .set nomacro + + .globl start, _start +start: +_start: + b multiboot_entry + nop + + /* Align 64 bits boundary. */ + .align 8 + + /* Multiboot header. */ +multiboot_header: + /* magic */ + .long MULTIBOOT2_HEADER_MAGIC + /* ISA: mips32 */ + .long MULTIBOOT_ARCHITECTURE_MIPS32 + /* Header length. */ + .long multiboot_header_end - multiboot_header + /* checksum */ + .long -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_MIPS32 + (multiboot_header_end - multiboot_header)) +#ifndef __ELF__ +address_tag_start: + .short MULTIBOOT_HEADER_TAG_ADDRESS + .short MULTIBOOT_HEADER_TAG_OPTIONAL + .long address_tag_end - address_tag_start + /* header_addr */ + .long multiboot_header + /* load_addr */ + .long _start + /* load_end_addr */ + .long _edata + /* bss_end_addr */ + .long _end +address_tag_end: +entry_address_tag_start: + .short MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS + .short MULTIBOOT_HEADER_TAG_OPTIONAL + .long entry_address_tag_end - entry_address_tag_start + /* entry_addr */ + .long multiboot_entry +entry_address_tag_end: +#endif /* __ELF__ */ +framebuffer_tag_start: + .short MULTIBOOT_HEADER_TAG_FRAMEBUFFER + .short MULTIBOOT_HEADER_TAG_OPTIONAL + .long framebuffer_tag_end - framebuffer_tag_start + .long 1024 + .long 768 + .long 32 +framebuffer_tag_end: + .short MULTIBOOT_HEADER_TAG_END + .short 0 + .long 8 +multiboot_header_end: +multiboot_entry: + /* Initialize the stack pointer. */ + lui $sp, %hi (stack + STACK_SIZE) + addiu $sp, $sp, %lo (stack + STACK_SIZE) + + /* Now enter the C main function... */ + bal EXT_C(cmain) + nop + + /* Halt. */ + lui $a0, %hi (halt_message) + addiu $a0, $a0, %lo (halt_message) + bal EXT_C(printf) + nop + +loop: nop + b loop + nop + +halt_message: + .asciz "Halted." + + .align 8 + /* Our stack area. */ + .comm stack, STACK_SIZE