Increase stack size on sparc
This commit is contained in:
parent
10f6389453
commit
320dd174b5
5 changed files with 32 additions and 10 deletions
|
@ -43,4 +43,6 @@ extern int EXPORT_FUNC(grub_ieee1275_alloc_physmem) (grub_addr_t *paddr,
|
||||||
grub_size_t size,
|
grub_size_t size,
|
||||||
grub_uint32_t align);
|
grub_uint32_t align);
|
||||||
|
|
||||||
|
extern grub_addr_t EXPORT_VAR (grub_ieee1275_original_stack);
|
||||||
|
|
||||||
#endif /* ! GRUB_IEEE1275_MACHINE_HEADER */
|
#endif /* ! GRUB_IEEE1275_MACHINE_HEADER */
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#define GRUB_KERNEL_MACHINE_DATA_END 0x114
|
#define GRUB_KERNEL_MACHINE_DATA_END 0x114
|
||||||
|
|
||||||
#define GRUB_KERNEL_MACHINE_RAW_SIZE 0
|
#define GRUB_KERNEL_MACHINE_RAW_SIZE 0
|
||||||
|
#define GRUB_KERNEL_MACHINE_STACK_SIZE 0x40000
|
||||||
|
|
||||||
#define GRUB_PLATFORM_IMAGE_FORMATS "raw, aout"
|
#define GRUB_PLATFORM_IMAGE_FORMATS "raw, aout"
|
||||||
#define GRUB_PLATFORM_IMAGE_DEFAULT_FORMAT "raw"
|
#define GRUB_PLATFORM_IMAGE_DEFAULT_FORMAT "raw"
|
||||||
|
|
|
@ -53,8 +53,17 @@ codestart:
|
||||||
or %o3, %lo(_end), %o3
|
or %o3, %lo(_end), %o3
|
||||||
sethi %hi(grub_total_module_size), %o4
|
sethi %hi(grub_total_module_size), %o4
|
||||||
lduw [%o4 + %lo(grub_total_module_size)], %o4
|
lduw [%o4 + %lo(grub_total_module_size)], %o4
|
||||||
|
|
||||||
add %o2, %o4, %o2
|
add %o2, %o4, %o2
|
||||||
add %o3, %o4, %o3
|
add %o3, %o4, %o3
|
||||||
|
|
||||||
|
/* Save ieee1275 stack for future use by booter. */
|
||||||
|
mov %o6, %o1
|
||||||
|
/* Our future stack. */
|
||||||
|
sethi %hi(GRUB_KERNEL_MACHINE_STACK_SIZE - 2047), %o5
|
||||||
|
or %o5, %lo(GRUB_KERNEL_MACHINE_STACK_SIZE - 2047), %o5
|
||||||
|
add %o3, %o5, %o6
|
||||||
|
|
||||||
sub %o2, 4, %o2
|
sub %o2, 4, %o2
|
||||||
sub %o3, 4, %o3
|
sub %o3, 4, %o3
|
||||||
1: lduw [%o2], %o5
|
1: lduw [%o2], %o5
|
||||||
|
@ -62,7 +71,7 @@ codestart:
|
||||||
subcc %o4, 4, %o4
|
subcc %o4, 4, %o4
|
||||||
sub %o2, 4, %o2
|
sub %o2, 4, %o2
|
||||||
bne,pt %icc, 1b
|
bne,pt %icc, 1b
|
||||||
sub %o3, 4, %o3
|
sub %o3, 4, %o3
|
||||||
|
|
||||||
/* Now it's safe to clear out the BSS. */
|
/* Now it's safe to clear out the BSS. */
|
||||||
sethi %hi(__bss_start), %o2
|
sethi %hi(__bss_start), %o2
|
||||||
|
@ -74,8 +83,9 @@ codestart:
|
||||||
cmp %o2, %o3
|
cmp %o2, %o3
|
||||||
blt,pt %xcc, 1b
|
blt,pt %xcc, 1b
|
||||||
nop
|
nop
|
||||||
|
sethi %hi(grub_ieee1275_original_stack), %o2
|
||||||
|
stx %o1, [%o2 + %lo(grub_ieee1275_original_stack)]
|
||||||
sethi %hi(grub_ieee1275_entry_fn), %o2
|
sethi %hi(grub_ieee1275_entry_fn), %o2
|
||||||
stx %o0, [%o2 + %lo(grub_ieee1275_entry_fn)]
|
|
||||||
call grub_main
|
call grub_main
|
||||||
nop
|
stx %o0, [%o2 + %lo(grub_ieee1275_entry_fn)]
|
||||||
1: ba,a 1b
|
1: ba,a 1b
|
||||||
|
|
|
@ -23,12 +23,15 @@
|
||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
|
#include <grub/machine/boot.h>
|
||||||
#include <grub/machine/console.h>
|
#include <grub/machine/console.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
#include <grub/machine/time.h>
|
#include <grub/machine/time.h>
|
||||||
#include <grub/ieee1275/ofdisk.h>
|
#include <grub/ieee1275/ofdisk.h>
|
||||||
#include <grub/ieee1275/ieee1275.h>
|
#include <grub/ieee1275/ieee1275.h>
|
||||||
|
|
||||||
|
grub_addr_t grub_ieee1275_original_stack;
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_exit (void)
|
grub_exit (void)
|
||||||
{
|
{
|
||||||
|
@ -104,7 +107,8 @@ grub_machine_set_prefix (void)
|
||||||
static void
|
static void
|
||||||
grub_heap_init (void)
|
grub_heap_init (void)
|
||||||
{
|
{
|
||||||
grub_mm_init_region ((void *) grub_modules_get_end (), 0x200000);
|
grub_mm_init_region ((void *) (grub_modules_get_end ()
|
||||||
|
+ GRUB_KERNEL_MACHINE_STACK_SIZE), 0x200000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -58,9 +58,6 @@ static grub_size_t linux_size;
|
||||||
|
|
||||||
static char *linux_args;
|
static char *linux_args;
|
||||||
|
|
||||||
typedef void (*kernel_entry_t) (unsigned long, unsigned long,
|
|
||||||
unsigned long, unsigned long, int (void *));
|
|
||||||
|
|
||||||
struct linux_bootstr_info {
|
struct linux_bootstr_info {
|
||||||
int len, valid;
|
int len, valid;
|
||||||
char buf[];
|
char buf[];
|
||||||
|
@ -92,7 +89,6 @@ static grub_err_t
|
||||||
grub_linux_boot (void)
|
grub_linux_boot (void)
|
||||||
{
|
{
|
||||||
struct linux_bootstr_info *bp;
|
struct linux_bootstr_info *bp;
|
||||||
kernel_entry_t linuxmain;
|
|
||||||
struct linux_hdrs *hp;
|
struct linux_hdrs *hp;
|
||||||
grub_addr_t addr;
|
grub_addr_t addr;
|
||||||
|
|
||||||
|
@ -141,8 +137,17 @@ grub_linux_boot (void)
|
||||||
grub_dprintf ("loader", "Jumping to Linux...\n");
|
grub_dprintf ("loader", "Jumping to Linux...\n");
|
||||||
|
|
||||||
/* Boot the kernel. */
|
/* Boot the kernel. */
|
||||||
linuxmain = (kernel_entry_t) linux_addr;
|
asm volatile ("sethi %hi(grub_ieee1275_entry_fn), %o1\n"
|
||||||
linuxmain (0, 0, 0, 0, grub_ieee1275_entry_fn);
|
"ldx [%o1 + %lo(grub_ieee1275_entry_fn)], %o4\n"
|
||||||
|
"sethi %hi(grub_ieee1275_original_stack), %o1\n"
|
||||||
|
"ldx [%o1 + %lo(grub_ieee1275_original_stack)], %o6\n"
|
||||||
|
"sethi %hi(linux_addr), %o1\n"
|
||||||
|
"ldx [%o1 + %lo(linux_addr)], %o5\n"
|
||||||
|
"mov %g0, %o0\n"
|
||||||
|
"mov %g0, %o2\n"
|
||||||
|
"mov %g0, %o3\n"
|
||||||
|
"jmp %o5\n"
|
||||||
|
"mov %g0, %o1\n");
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue