]> Joshua Wise's Git repositories - netwatch.git/commitdiff
Merge ELF loader.
authorJoshua Wise <joshua@rebirth.joshuawise.com>
Wed, 10 Sep 2008 22:24:10 +0000 (18:24 -0400)
committerJoshua Wise <joshua@rebirth.joshuawise.com>
Wed, 10 Sep 2008 22:24:10 +0000 (18:24 -0400)
1  2 
grubload/Makefile
grubload/multiboot_c.c

diff --combined grubload/Makefile
index c850bb33434cc4512e48560bff4ce102e3432dd4,041f09c0b41bff219ccb8443079134ee3f06c57a..f0f9742d55564c4f8f0842cbfc60b4e62be82b38
@@@ -1,4 -1,4 +1,4 @@@
- OBJS=multiboot_c.o multiboot_asm.o console.o minilib.o realmode.o
 -OBJS=multiboot_c.o multiboot_asm.o console.o minilib.o loader.o
++OBJS=multiboot_c.o multiboot_asm.o console.o minilib.o realmode.o loader.o
  CC=gcc
  CFLAGS=-nostdlib -I../include -I. -fno-builtin -nostdinc
  
@@@ -6,9 -6,3 +6,9 @@@ all: multiboo
  
  multiboot: $(OBJS)
        ld -o multiboot $(OBJS) -Ttext=0x100000
 +
 +realmode.bin: realmode.asm
 +      nasm -o realmode.bin realmode.asm
 +
 +realmode.o: realmode.bin
 +      objcopy -I binary -B i386 -O elf32-i386 realmode.bin realmode.o
diff --combined grubload/multiboot_c.c
index 25522e26c7cdffe8a14945a0066ad247f9454554,f87168704fe0be9d15df95afdf03e40012354623..03e2143ba7d6970a8ab967f9ee33fd0f4024ac0b
@@@ -1,8 -1,5 +1,8 @@@
  #include "console.h"
  
 +extern char _binary_realmode_bin_start[];
 +extern int _binary_realmode_bin_size;
 +
  struct mb_info
  {
        unsigned long flags;
@@@ -26,8 -23,6 +26,8 @@@ void c_start(unsigned int magic, struc
        unsigned short *grubptr = 0x7CFE;
        int i;
        
 +      void (*realmode)() = 0x4000;
 +      
        puts("Magic is: ");
        puthex(magic);
        puts("\nMultiboot header is: ");
@@@ -38,7 -33,8 +38,8 @@@
        puts("Grubptr is: ");
        puthex(*grubptr);
        puts("\n");
-       
        for (i = 0; i < wee->mod_cnt; i++)
        {
                puts("Module:\n");
                puts("  Name: "); puts(wee->mods[i].mod_string); puts("\n");
        }
  
 -
 -      while (1)
 -              ;
+       if ((wee->mod_cnt != 1) || (strcmp(wee->mods[0].mod_string, "aseg.elf")))
+       {
+               puts("Expected 1 module called aseg.elf.\n");
+               while(1) asm("hlt");
+       }
+       load_elf(wee->mods[0].mod_start, wee->mods[0].mod_end - wee->mods[0].mod_start);
-       realmode();
 +      puts("Now returning to real mode.\n");  
 +      memcpy(0x4000, _binary_realmode_bin_start, (int)&_binary_realmode_bin_size);
++      realmode();     // goodbye!
  }
This page took 0.032719 seconds and 4 git commands to generate.