freebsd-elf support
This commit is contained in:
parent
c19c1a588f
commit
70ba31d512
9 changed files with 61 additions and 15 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
1999-08-03 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
|
From "Dan J. Walters" <djw@cs.utexas.edu>:
|
||||||
|
* stage2/i386-elf.h (EI_BRAND): New macro.
|
||||||
|
* stage2/boot.c (load_image): If the kernel is ELF, check if it
|
||||||
|
is a FreeBSD kernel as well as a Multiboot kernel, and if it is
|
||||||
|
a FreeBSD kernel, then mask ENTRY_ADDR since FreeBSD requires
|
||||||
|
that. Likewise, mask MEMADDR.
|
||||||
|
(bsd_boot): Set the bi_symtab and the bi_esymtab members of BI
|
||||||
|
only if MBI.FLAGS has the flag MB_INFO_AOUT_SYMS. Otherwise,
|
||||||
|
clear them.
|
||||||
|
|
||||||
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-07-30 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
From Pavel Roskin <pavel_roskin@geocities.com>:
|
From Pavel Roskin <pavel_roskin@geocities.com>:
|
||||||
|
|
3
NEWS
3
NEWS
|
@ -1,5 +1,8 @@
|
||||||
NEWS - list of user-visible changes between releases of GRUB
|
NEWS - list of user-visible changes between releases of GRUB
|
||||||
|
|
||||||
|
New in 0.5.93:
|
||||||
|
* ELF format of FreeBSD kernel is supported.
|
||||||
|
|
||||||
New in 0.5.92 - 1999-07-26:
|
New in 0.5.92 - 1999-07-26:
|
||||||
* Bug fixes (i.e. Stage 1.5 can work fine again).
|
* Bug fixes (i.e. Stage 1.5 can work fine again).
|
||||||
* The /sbin/grub stage2 simulator now works at least on GNU/Linux, and
|
* The /sbin/grub stage2 simulator now works at least on GNU/Linux, and
|
||||||
|
|
4
README
4
README
|
@ -37,10 +37,6 @@ http://sourceware.cygnus.com/autoconf/ for more information.
|
||||||
an unreleased version from the CVS. See
|
an unreleased version from the CVS. See
|
||||||
http://sourceware.cygnus.com/automake/ for more information.
|
http://sourceware.cygnus.com/automake/ for more information.
|
||||||
|
|
||||||
* texinfo 3.12h and later
|
|
||||||
|
|
||||||
The latest snapshot of Texinfo is available from ftp.texinfo.org.
|
|
||||||
|
|
||||||
|
|
||||||
See the file INSTALL for instructions on how to build and install the
|
See the file INSTALL for instructions on how to build and install the
|
||||||
GRUB data and program files. See the GRUB manual for details about
|
GRUB data and program files. See the GRUB manual for details about
|
||||||
|
|
1
THANKS
1
THANKS
|
@ -10,6 +10,7 @@ Alexander K. Hudek <alexhudek@home.com>
|
||||||
Bradford Hovinen <hovinen@redrose.net>
|
Bradford Hovinen <hovinen@redrose.net>
|
||||||
Brian Brunswick <brian@skarpsey.demon.co.uk>
|
Brian Brunswick <brian@skarpsey.demon.co.uk>
|
||||||
Bryan Ford <baford@cs.utah.edu>
|
Bryan Ford <baford@cs.utah.edu>
|
||||||
|
Dan J. Walters <djw@cs.utexas.edu>
|
||||||
Eric Hanchrow <erich@microsoft.com>
|
Eric Hanchrow <erich@microsoft.com>
|
||||||
Heiko Schroeder <heiko@pool.informatik.rwth-aachen.de>
|
Heiko Schroeder <heiko@pool.informatik.rwth-aachen.de>
|
||||||
Klaus Reichl <klaus.reichl@alcatel.at>
|
Klaus Reichl <klaus.reichl@alcatel.at>
|
||||||
|
|
2
TODO
2
TODO
|
@ -30,8 +30,6 @@ larger than 16MB can be read.
|
||||||
|
|
||||||
Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot parameters
|
Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot parameters
|
||||||
|
|
||||||
Support ELF format of FreeBSD kernel.
|
|
||||||
|
|
||||||
Support new partition IDs for NetBSD and OpenBSD.
|
Support new partition IDs for NetBSD and OpenBSD.
|
||||||
|
|
||||||
Add ``configfile'' command, in a clean way.
|
Add ``configfile'' command, in a clean way.
|
||||||
|
|
2
configure
vendored
2
configure
vendored
|
@ -734,7 +734,7 @@ fi
|
||||||
PACKAGE=grub
|
PACKAGE=grub
|
||||||
|
|
||||||
|
|
||||||
VERSION=0.5.92
|
VERSION=0.5.93
|
||||||
|
|
||||||
|
|
||||||
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -1,3 +1,5 @@
|
||||||
|
grub (0.5.93) unstable; urgency=low
|
||||||
|
|
||||||
grub (0.5.92) unstable; urgency=low
|
grub (0.5.92) unstable; urgency=low
|
||||||
|
|
||||||
* Data files are now in /usr/lib/grub/$(HWARCH).
|
* Data files are now in /usr/lib/grub/$(HWARCH).
|
||||||
|
|
|
@ -86,11 +86,15 @@ load_image (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ELF loading only supported if kernel using multiboot */
|
/* ELF loading supported if multiboot and FreeBSD. */
|
||||||
if (type == 'm' && len > sizeof (Elf32_Ehdr)
|
if ((type == 'm' || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD"))
|
||||||
|
&& len > sizeof (Elf32_Ehdr)
|
||||||
&& BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer))))
|
&& BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer))))
|
||||||
{
|
{
|
||||||
entry_addr = (entry_func) pu.elf->e_entry;
|
if (type == 'm')
|
||||||
|
entry_addr = (entry_func) pu.elf->e_entry;
|
||||||
|
else
|
||||||
|
entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF);
|
||||||
|
|
||||||
if (((int) entry_addr) < 0x100000)
|
if (((int) entry_addr) < 0x100000)
|
||||||
errnum = ERR_BELOW_1MB;
|
errnum = ERR_BELOW_1MB;
|
||||||
|
@ -102,6 +106,12 @@ load_image (void)
|
||||||
>= len))
|
>= len))
|
||||||
errnum = ERR_EXEC_FORMAT;
|
errnum = ERR_EXEC_FORMAT;
|
||||||
str = "elf";
|
str = "elf";
|
||||||
|
|
||||||
|
if (! type)
|
||||||
|
{
|
||||||
|
str2 = "FreeBSD";
|
||||||
|
type = 'f';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (flags & MULTIBOOT_AOUT_KLUDGE)
|
else if (flags & MULTIBOOT_AOUT_KLUDGE)
|
||||||
{
|
{
|
||||||
|
@ -403,7 +413,12 @@ load_image (void)
|
||||||
/* offset into file */
|
/* offset into file */
|
||||||
filepos = phdr->p_offset;
|
filepos = phdr->p_offset;
|
||||||
filesiz = phdr->p_filesz;
|
filesiz = phdr->p_filesz;
|
||||||
memaddr = RAW_ADDR (phdr->p_vaddr);
|
|
||||||
|
if (type == 'f')
|
||||||
|
memaddr = RAW_ADDR (phdr->p_vaddr & 0xFFFFFF);
|
||||||
|
else
|
||||||
|
memaddr = RAW_ADDR (phdr->p_vaddr);
|
||||||
|
|
||||||
memsiz = phdr->p_memsz;
|
memsiz = phdr->p_memsz;
|
||||||
if (memaddr < RAW_ADDR (0x100000))
|
if (memaddr < RAW_ADDR (0x100000))
|
||||||
errnum = ERR_BELOW_1MB;
|
errnum = ERR_BELOW_1MB;
|
||||||
|
@ -419,7 +434,6 @@ load_image (void)
|
||||||
loaded++;
|
loaded++;
|
||||||
|
|
||||||
/* load the segment */
|
/* load the segment */
|
||||||
memaddr = RAW_ADDR (memaddr);
|
|
||||||
if (memcheck (memaddr, memsiz)
|
if (memcheck (memaddr, memsiz)
|
||||||
&& grub_read ((char *) memaddr, filesiz) == filesiz)
|
&& grub_read ((char *) memaddr, filesiz) == filesiz)
|
||||||
{
|
{
|
||||||
|
@ -588,9 +602,25 @@ bsd_boot (int type, int bootdev)
|
||||||
bi.bi_memsizes_valid = 1;
|
bi.bi_memsizes_valid = 1;
|
||||||
bi.bi_basemem = mbi.mem_lower;
|
bi.bi_basemem = mbi.mem_lower;
|
||||||
bi.bi_extmem = mbi.mem_upper;
|
bi.bi_extmem = mbi.mem_upper;
|
||||||
bi.bi_symtab = mbi.syms.a.addr;
|
|
||||||
bi.bi_esymtab = mbi.syms.a.addr + 4
|
if (mbi.flags & MB_INFO_AOUT_SYMS)
|
||||||
+ mbi.syms.a.tabsize + mbi.syms.a.strsize;
|
{
|
||||||
|
bi.bi_symtab = mbi.syms.a.addr;
|
||||||
|
bi.bi_esymtab = mbi.syms.a.addr + 4
|
||||||
|
+ mbi.syms.a.tabsize + mbi.syms.a.strsize;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
else if (mbi.flags & MB_INFO_ELF_SHDR)
|
||||||
|
{
|
||||||
|
/* FIXME: Should check if a symbol table exists and, if exists,
|
||||||
|
pass the table to BI. */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bi.bi_symtab = 0;
|
||||||
|
bi.bi_esymtab = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* call entry point */
|
/* call entry point */
|
||||||
(*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi)));
|
(*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi)));
|
||||||
|
|
|
@ -54,6 +54,10 @@ typedef struct
|
||||||
|
|
||||||
#define EI_PAD 7 /* from here in is just padding */
|
#define EI_PAD 7 /* from here in is just padding */
|
||||||
|
|
||||||
|
#define EI_BRAND 8 /* start of OS branding (This is
|
||||||
|
obviously illegal against the ELF
|
||||||
|
standard.) */
|
||||||
|
|
||||||
unsigned char e_ident[EI_NIDENT]; /* basic identification block */
|
unsigned char e_ident[EI_NIDENT]; /* basic identification block */
|
||||||
|
|
||||||
#define ET_EXEC 2 /* we only care about executable types */
|
#define ET_EXEC 2 /* we only care about executable types */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue