]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Add missing file boot_mips.S to the repo
authorVladimir Serbinenko <phcoder@gmail.com>
Wed, 23 Oct 2013 10:48:33 +0000 (12:48 +0200)
committerVladimir Serbinenko <phcoder@gmail.com>
Wed, 23 Oct 2013 10:48:33 +0000 (12:48 +0200)
doc/boot_mips.S [new file with mode: 0644]

diff --git a/doc/boot_mips.S b/doc/boot_mips.S
new file mode 100644 (file)
index 0000000..ed60421
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#define ASM_FILE       1
+#include <multiboot2.h>
+
+/* 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