mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-22 07:12:39 +00:00
Add missing file boot_mips.S to the repo
This commit is contained in:
1 parent
b6ebeacbeb
commit
b1bd61d583
1 file changed
+119
+119
@@ -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
|
||||
Reference in new issue
Block a user