summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Luis Rivero <yoswink@gentoo.org>2007-08-29 16:37:30 +0000
committerJosé Luis Rivero <yoswink@gentoo.org>2007-08-29 16:37:30 +0000
commit0fe1538e8a1af8e9e3ee4ec3c0500caaadf23253 (patch)
treed996be5bc86f5cd81014fa6da3d90650e810cbcb /sys-boot/aboot
parentRemoving agriffis from metadata due to his retirement (see #182294 for refere... (diff)
downloadhistorical-0fe1538e8a1af8e9e3ee4ec3c0500caaadf23253.tar.gz
historical-0fe1538e8a1af8e9e3ee4ec3c0500caaadf23253.tar.bz2
historical-0fe1538e8a1af8e9e3ee4ec3c0500caaadf23253.zip
New version which can boot kernels >2.6.23. A change in the ELF kernel headers (PT_NOTE) breaks previous versions, see http://lkml.org/lkml/2007/8/14/259 for details.
Package-Manager: portage-2.1.2.11
Diffstat (limited to 'sys-boot/aboot')
-rw-r--r--sys-boot/aboot/ChangeLog10
-rw-r--r--sys-boot/aboot/Manifest27
-rw-r--r--sys-boot/aboot/aboot-1.0_pre20040408-r2.ebuild73
-rw-r--r--sys-boot/aboot/files/aboot-pt_note.patch308
-rw-r--r--sys-boot/aboot/files/digest-aboot-1.0_pre20040408-r26
5 files changed, 415 insertions, 9 deletions
diff --git a/sys-boot/aboot/ChangeLog b/sys-boot/aboot/ChangeLog
index 2e74098d89e1..026524e9940a 100644
--- a/sys-boot/aboot/ChangeLog
+++ b/sys-boot/aboot/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for sys-boot/aboot
# Copyright 2002-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-boot/aboot/ChangeLog,v 1.10 2007/07/15 07:07:59 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-boot/aboot/ChangeLog,v 1.11 2007/08/29 16:37:30 yoswink Exp $
+
+*aboot-1.0_pre20040408-r2 (29 Aug 2007)
+
+ 29 Aug 2007; Jose Luis Rivero <yoswink@gentoo.org>
+ +files/aboot-pt_note.patch, +aboot-1.0_pre20040408-r2.ebuild:
+ New version which can boot kernels >2.6.23. A change in the ELF kernel
+ headers (PT_NOTE) breaks previous versions, see
+ http://lkml.org/lkml/2007/8/14/259 for details.
*aboot-1.0_pre20040408-r1 (15 Jul 2007)
diff --git a/sys-boot/aboot/Manifest b/sys-boot/aboot/Manifest
index f3fee224f1d3..af57d8b6ad43 100644
--- a/sys-boot/aboot/Manifest
+++ b/sys-boot/aboot/Manifest
@@ -5,6 +5,10 @@ AUX aboot-gcc-3.4.patch 830 RMD160 cd9f8a40a648f596fd710dfc9b2057cd481b90a7 SHA1
MD5 fdda13c08b553b8296ab0f41c3bbee46 files/aboot-gcc-3.4.patch 830
RMD160 cd9f8a40a648f596fd710dfc9b2057cd481b90a7 files/aboot-gcc-3.4.patch 830
SHA256 9757c85226ec5355a849a24a71415604569a7de06036bcfb3e4814fa448b5d18 files/aboot-gcc-3.4.patch 830
+AUX aboot-pt_note.patch 8966 RMD160 80d855199f2e4ca8b89858792a3c5f91ea8868b0 SHA1 05581a21648d550f89422ec7f4c93f77d7c2e259 SHA256 ef8a8e20bf482d0aa2cd4da09c867f021018fde486f6c631d7c236d790d81a2b
+MD5 56f8942d891f4bba57df56729339921a files/aboot-pt_note.patch 8966
+RMD160 80d855199f2e4ca8b89858792a3c5f91ea8868b0 files/aboot-pt_note.patch 8966
+SHA256 ef8a8e20bf482d0aa2cd4da09c867f021018fde486f6c631d7c236d790d81a2b files/aboot-pt_note.patch 8966
AUX aboot.conf 295 RMD160 d42e05161680a9d6f4da91b863737d05d3c72e63 SHA1 36760127c59e3d6c804320f931642033bb4a33e6 SHA256 41372b883807cbd871a5c8f17c4787273f2107ba10be127f73ca9e445ce72ebd
MD5 254f0c6b0c0862df2ecd486daab0bbf9 files/aboot.conf 295
RMD160 d42e05161680a9d6f4da91b863737d05d3c72e63 files/aboot.conf 295
@@ -20,14 +24,18 @@ EBUILD aboot-1.0_pre20040408-r1.ebuild 2257 RMD160 81441e4ffd9d05b694ba357d4fbc9
MD5 3916be2a9e3236221daa18296f2860f7 aboot-1.0_pre20040408-r1.ebuild 2257
RMD160 81441e4ffd9d05b694ba357d4fbc9f5544815b68 aboot-1.0_pre20040408-r1.ebuild 2257
SHA256 3f583afe7bbd9736a660dbde688f31d1e0b207856ab55051c2598a7fd9b8164e aboot-1.0_pre20040408-r1.ebuild 2257
+EBUILD aboot-1.0_pre20040408-r2.ebuild 2300 RMD160 291d2173fb34e8ac5d86b0d88932ab0481f6cc17 SHA1 1d7b247d6253d0f8110e596658d90f3db1753ead SHA256 709f914e3831dab45a26939e53e5ca20dccae4f4cab5f11304c7f849d2fbe013
+MD5 ac3c5dd1e6838c9576ee562df0275647 aboot-1.0_pre20040408-r2.ebuild 2300
+RMD160 291d2173fb34e8ac5d86b0d88932ab0481f6cc17 aboot-1.0_pre20040408-r2.ebuild 2300
+SHA256 709f914e3831dab45a26939e53e5ca20dccae4f4cab5f11304c7f849d2fbe013 aboot-1.0_pre20040408-r2.ebuild 2300
EBUILD aboot-1.0_pre20040408.ebuild 1930 RMD160 b2d7a474535bb4da258e6c59f3370b7a86a04cb4 SHA1 7d6a84801b5bc1f3494da1a7a010c40c7743899d SHA256 85147485b9a602627d52b29b0cc87ecbeed9829fab0dcce1f83530c06333e10b
MD5 18b761437ec9eae073e7fa508f742fe1 aboot-1.0_pre20040408.ebuild 1930
RMD160 b2d7a474535bb4da258e6c59f3370b7a86a04cb4 aboot-1.0_pre20040408.ebuild 1930
SHA256 85147485b9a602627d52b29b0cc87ecbeed9829fab0dcce1f83530c06333e10b aboot-1.0_pre20040408.ebuild 1930
-MISC ChangeLog 1694 RMD160 e7b9660b6a1e4454f8ac8ea4ff466d824d4f301c SHA1 56fedb5abaf6cdd900a12f81d247a3caec0e7860 SHA256 8f57e996d03ac830163e6c373db98bdc8d3555e52e6d2ee63e63bff482432a7e
-MD5 4e6b036d9bf3755d79eef27df557f49e ChangeLog 1694
-RMD160 e7b9660b6a1e4454f8ac8ea4ff466d824d4f301c ChangeLog 1694
-SHA256 8f57e996d03ac830163e6c373db98bdc8d3555e52e6d2ee63e63bff482432a7e ChangeLog 1694
+MISC ChangeLog 2027 RMD160 ca6efe16ca1f25c37cc4a863b28c2f74101e57d2 SHA1 0c2ea6b619cf3e5dc78874a6232ba68784157f18 SHA256 40220a6566da4119198a98e7d5187c77c1c387f9f9d4dd4362eb01e34f8f4b2b
+MD5 504aa433eb5d7d76897acb88afac3a7e ChangeLog 2027
+RMD160 ca6efe16ca1f25c37cc4a863b28c2f74101e57d2 ChangeLog 2027
+SHA256 40220a6566da4119198a98e7d5187c77c1c387f9f9d4dd4362eb01e34f8f4b2b ChangeLog 2027
MISC metadata.xml 158 RMD160 e1feed743ecd0f7a4a2abedbef6a662b46969096 SHA1 8a107bbabbd7c2200a345c2e16e8e567d6cefe74 SHA256 6d4f913890738e4843f53f9de89e64faa5eb7d52cbe4c1040693f8ec56d19a31
MD5 0ed40e134501a252bb21c5c5808d8028 metadata.xml 158
RMD160 e1feed743ecd0f7a4a2abedbef6a662b46969096 metadata.xml 158
@@ -41,10 +49,13 @@ SHA256 a44955094113e9cd8d0adc750bc9bfe99c507fc668881dba3baf505675aab813 files/di
MD5 0fa2adcc3a262f92c5962d909371850b files/digest-aboot-1.0_pre20040408-r1 554
RMD160 27be91377795e87640a40d16d25229e2d2a119f3 files/digest-aboot-1.0_pre20040408-r1 554
SHA256 2e953bb4d818f4b2b998986872f78d4a485866ffa2fdb89f59c0d752d8f7be48 files/digest-aboot-1.0_pre20040408-r1 554
+MD5 0fa2adcc3a262f92c5962d909371850b files/digest-aboot-1.0_pre20040408-r2 554
+RMD160 27be91377795e87640a40d16d25229e2d2a119f3 files/digest-aboot-1.0_pre20040408-r2 554
+SHA256 2e953bb4d818f4b2b998986872f78d4a485866ffa2fdb89f59c0d752d8f7be48 files/digest-aboot-1.0_pre20040408-r2 554
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.5 (GNU/Linux)
+Version: GnuPG v1.4.6 (GNU/Linux)
-iD8DBQFGmcf2p/wUKkr7RBoRApuYAJ9wiK17p4Q0RFIn/FWf6kuNVKNDmACg4VK+
-mod+j7ZlLa03H2YdoyKizNw=
-=AX+E
+iD8DBQFG1abx3og80iZgVQgRAhvcAJ998/e0OJmiO0WhfvVNNOJMh/G4GwCfeE9E
+QFuwbakp52EkCYPQt7SA6eI=
+=Cs3v
-----END PGP SIGNATURE-----
diff --git a/sys-boot/aboot/aboot-1.0_pre20040408-r2.ebuild b/sys-boot/aboot/aboot-1.0_pre20040408-r2.ebuild
new file mode 100644
index 000000000000..c7289a202cc6
--- /dev/null
+++ b/sys-boot/aboot/aboot-1.0_pre20040408-r2.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-boot/aboot/aboot-1.0_pre20040408-r2.ebuild,v 1.1 2007/08/29 16:37:30 yoswink Exp $
+
+inherit eutils
+
+KERN_VER="2.6.22"
+
+DESCRIPTION="Alpha Linux boot loader for SRM"
+HOMEPAGE="http://aboot.sourceforge.net/"
+SRC_URI="http://aboot.sourceforge.net/tarballs/${P}.tar.bz2
+ mirror://gentoo/gentoo-headers-base-${KERN_VER}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="-* ~alpha"
+IUSE=""
+
+DEPEND=""
+PROVIDE="virtual/bootloader"
+
+src_unpack() {
+ unpack ${A}
+ # setup local copies of kernel headers since we rely so
+ # heavily on linux internals.
+ mv gentoo-headers-base-${KERN_VER}/include/{linux,asm-generic,asm-alpha} "${S}"/include/ || die
+ cd "${S}"/include
+ ln -s asm-alpha asm || die
+ touch linux/config.h || die
+ cd "${S}"
+ sed -i '1i#define bool int' cons.c
+ sed -i "s:/usr/man:/usr/share/man:" Makefile || die
+ epatch "${FILESDIR}/aboot-gcc-3.4.patch"
+ epatch "${FILESDIR}/aboot-pt_note.patch"
+}
+
+src_install() {
+ dodir /boot /sbin /usr/share/man/man5
+ make \
+ root="${D}" \
+ bindir="${D}"/sbin \
+ bootdir="${D}"/boot \
+ mandir="${D}"/usr/share/man \
+ install
+
+ dodoc ChangeLog INSTALL README TODO aboot.conf
+
+ insinto /etc
+ newins "${FILESDIR}"/aboot.conf aboot.conf.example
+}
+
+pkg_postinst() {
+ einfo "To make aboot install a new bootloader on your harddisk follow"
+ einfo "these steps:"
+ einfo ""
+ einfo " - edit the file /etc/aboot.conf"
+ einfo " - cd /boot"
+ einfo " - swriteboot -c2 /dev/sda bootlx"
+ einfo " This will install a new bootsector on /dev/sda and aboot will"
+ einfo " use the second partition on this device to lookup kernel and "
+ einfo " initrd (as described in the aboot.conf file)"
+ einfo ""
+ einfo "IMPORTANT :"
+ einfo ""
+ einfo "The partition table of your boot device has to contain "
+ einfo "a BSD-DISKLABEL and the first 12 megabytes of your boot device"
+ einfo "must not be part of a partition as aboot will write its bootloader"
+ einfo "in there and not as with most x86 bootloaders into the "
+ einfo "master boot sector. If your partition table does not reflect this"
+ einfo "you are going to destroy your installation !"
+ einfo "Also note that aboot currently only supports ext2/3 partitions"
+ einfo "to boot from."
+}
diff --git a/sys-boot/aboot/files/aboot-pt_note.patch b/sys-boot/aboot/files/aboot-pt_note.patch
new file mode 100644
index 000000000000..d28527ad5b0c
--- /dev/null
+++ b/sys-boot/aboot/files/aboot-pt_note.patch
@@ -0,0 +1,308 @@
+Recent build changes have added a PT_NOTE entry to the kernel's
+ELF header. A perfectly valid change, but Alpha's aboot loader
+is none too bright about examining these headers.
+
+The following patch to aboot-1.0_pre20040408.tar.bz2 makes it
+so that only PT_LOAD entries are considered for loading, as well
+as several other changes required to get the damned thing to
+build again.
+
+--- aboot-1.0_pre20040408/Makefile
++++ aboot-1.0_pre20040408/Makefile
+@@ -32,15 +32,15 @@ export
+ #
+ LOADADDR = 20000000
+
+-ABOOT_LDFLAGS = -static -N -Taboot.lds
++ABOOT_LDFLAGS = -static -N -Taboot.lds --relax
+
+ CC = gcc
+ TOP = $(shell pwd)
+ ifeq ($(TESTING),)
+-CPPFLAGS = $(CFGDEFS) -I$(TOP)/include
+-CFLAGS = $(CPPFLAGS) -D__KERNEL__ -Os -Wall -fno-builtin -mno-fp-regs -ffixed-8
++CPPFLAGS = $(CFGDEFS) -I$(TOP)/include -I$(KSRC)/include
++CFLAGS = $(CPPFLAGS) -D__KERNEL__ -Os -Wall -fno-builtin -mno-fp-regs
+ else
+-CPPFLAGS = -DTESTING $(CFGDEFS) -I$(TOP)/include
++CPPFLAGS = -DTESTING $(CFGDEFS) -I$(TOP)/include -I$(KSRC)/include
+ CFLAGS = $(CPPFLAGS) -O -g3 -Wall -D__KERNEL__ -ffixed-8
+ endif
+ ASFLAGS = $(CPPFLAGS)
+
+--- aboot-1.0_pre20040408/aboot.c
++++ aboot-1.0_pre20040408/aboot.c
+@@ -19,7 +19,6 @@
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <linux/elf.h>
+ #include <linux/kernel.h>
+ #include <linux/version.h>
+
+@@ -27,6 +26,7 @@
+ #include <asm/hwrpb.h>
+ #include <asm/system.h>
+
++#include <elf.h>
+ #include <alloca.h>
+ #include <errno.h>
+
+@@ -37,16 +37,6 @@
+ #include "utils.h"
+ #include "string.h"
+
+-#ifndef elf_check_arch
+-# define aboot_elf_check_arch(e) 1
+-#else
+-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
+-# define aboot_elf_check_arch(e) elf_check_arch(e)
+-# else
+-# define aboot_elf_check_arch(e) elf_check_arch(e->e_machine)
+-# endif
+-#endif
+-
+ struct bootfs * bfs = 0; /* filesystem to boot from */
+ char * dest_addr = 0;
+ jmp_buf jump_buffer;
+@@ -83,77 +73,89 @@ static unsigned long entry_addr = START_ADDR;
+ long
+ first_block (const char *buf, long blocksize)
+ {
+- struct elfhdr *elf;
+- struct elf_phdr *phdrs;
++ Elf64_Ehdr *elf;
++ Elf64_Phdr *phdrs;
++ int i, j;
+
+- elf = (struct elfhdr *) buf;
++ elf = (Elf64_Ehdr *) buf;
+
+- if (elf->e_ident[0] == 0x7f
+- && strncmp(elf->e_ident + 1, "ELF", 3) == 0)
+- {
+- int i;
+- /* looks like an ELF binary: */
+- if (elf->e_type != ET_EXEC) {
+- printf("aboot: not an executable ELF file\n");
+- return -1;
+- }
+- if (!aboot_elf_check_arch(elf)) {
+- printf("aboot: ELF executable not for this machine\n");
+- return -1;
+- }
+- if (elf->e_phoff + elf->e_phnum * sizeof(*phdrs) > (unsigned) blocksize) {
+- printf("aboot: "
+- "ELF program headers not in first block (%ld)\n",
+- (long) elf->e_phoff);
++ if (elf->e_ident[0] != 0x7f
++ || elf->e_ident[1] != 'E'
++ || elf->e_ident[2] != 'L'
++ || elf->e_ident[3] != 'F') {
++ /* Fail silently, it might be a compressed file */
++ return -1;
++ }
++ if (elf->e_ident[EI_CLASS] != ELFCLASS64
++ || elf->e_ident[EI_DATA] != ELFDATA2LSB
++ || elf->e_machine != EM_ALPHA) {
++ printf("aboot: ELF executable not for this machine\n");
++ return -1;
++ }
++
++ /* Looks like an ELF binary. */
++ if (elf->e_type != ET_EXEC) {
++ printf("aboot: not an executable ELF file\n");
++ return -1;
++ }
++
++ if (elf->e_phoff + elf->e_phnum * sizeof(*phdrs)
++ > (unsigned) blocksize) {
++ printf("aboot: ELF program headers not in first block (%ld)\n",
++ (long) elf->e_phoff);
++ return -1;
++ }
++
++ phdrs = (struct elf_phdr *) (buf + elf->e_phoff);
++ chunks = malloc(sizeof(struct segment) * elf->e_phnum);
++ start_addr = phdrs[0].p_vaddr; /* assume they are sorted */
++ entry_addr = elf->e_entry;
++
++ for (i = j = 0; i < elf->e_phnum; ++i) {
++ int status;
++
++ if (phdrs[i].p_type != PT_LOAD)
++ continue;
++
++ chunks[j].addr = phdrs[i].p_vaddr;
++ chunks[j].offset = phdrs[i].p_offset;
++ chunks[j].size = phdrs[i].p_filesz;
++ printf("aboot: PHDR %d vaddr %#lx offset %#lx size %#lx\n",
++ i, chunks[j].addr, chunks[j].offset, chunks[j].size);
++
++ status = check_memory(chunks[j].addr, chunks[j].size);
++ if (status) {
++ printf("aboot: Can't load kernel.\n"
++ " Memory at %lx - %lx (PHDR %i) "
++ "is %s\n",
++ chunks[j].addr,
++ chunks[j].addr + chunks[j].size - 1,
++ i,
++ (status == -ENOMEM) ?
++ "Not Found" :
++ "Busy (Reserved)");
+ return -1;
+ }
+- phdrs = (struct elf_phdr *) (buf + elf->e_phoff);
+- chunks = malloc(sizeof(struct segment) * elf->e_phnum);
+- nchunks = elf->e_phnum;
+- start_addr = phdrs[0].p_vaddr; /* assume they are sorted */
+- entry_addr = elf->e_entry;
+-#ifdef DEBUG
+- printf("aboot: %d program headers, start address %#lx, entry %#lx\n",
+- nchunks, start_addr, entry_addr);
+-#endif
+- for (i = 0; i < elf->e_phnum; ++i) {
+- int status;
+-
+- chunks[i].addr = phdrs[i].p_vaddr;
+- chunks[i].offset = phdrs[i].p_offset;
+- chunks[i].size = phdrs[i].p_filesz;
+-#ifdef DEBUG
+- printf("aboot: segment %d vaddr %#lx offset %#lx size %#lx\n",
+- i, chunks[i].addr, chunks[i].offset, chunks[i].size);
+-#endif
+-
+-#ifndef TESTING
+- status = check_memory(chunks[i].addr, chunks[i].size);
+- if (status) {
++
++ if (phdrs[i].p_memsz > phdrs[i].p_filesz) {
++ if (bss_size > 0) {
+ printf("aboot: Can't load kernel.\n"
+- " Memory at %lx - %lx (chunk %i) "
+- "is %s\n",
+- chunks[i].addr,
+- chunks[i].addr + chunks[i].size - 1,
+- i,
+- (status == -ENOMEM) ?
+- "Not Found" :
+- "Busy (Reserved)");
++ " Multiple BSS segments"
++ " (PHDR %d)\n", i);
+ return -1;
+ }
+-#endif
++
++ bss_start = (char *) (phdrs[i].p_vaddr +
++ phdrs[i].p_filesz);
++ bss_size = phdrs[i].p_memsz - phdrs[i].p_filesz;
++
+ }
+- bss_start = (char *) (phdrs[elf->e_phnum - 1].p_vaddr +
+- phdrs[elf->e_phnum - 1].p_filesz);
+- bss_size = (phdrs[elf->e_phnum - 1].p_memsz -
+- phdrs[elf->e_phnum - 1].p_filesz);
+-#ifdef DEBUG
+- printf("aboot: bss at 0x%p, size %#lx\n", bss_start, bss_size);
+-#endif
+- } else {
+- /* Fail silently, it might be a compressed file */
+- return -1;
++
++ j++;
+ }
++
++ nchunks = j;
++ printf("aboot: bss at 0x%p, size %#lx\n", bss_start, bss_size);
+
+ return 0;
+ }
+
+--- aboot-1.0_pre20040408/aboot.lds
++++ aboot-1.0_pre20040408/aboot.lds
+@@ -1,22 +1,25 @@
+ OUTPUT_FORMAT("elf64-alpha")
+ ENTRY(__start)
++PHDRS { kernel PT_LOAD; }
+ SECTIONS
+ {
+ . = 0x20000000;
+- .text : { *(.text) }
++ .text : { *(.text) } :kernel
+ _etext = .;
+ PROVIDE (etext = .);
+- .rodata : { *(.rodata) }
+- .data : { *(.data) CONSTRUCTORS }
+- .got : { *(.got) }
+- .sdata : { *(.sdata) }
++ .rodata : { *(.rodata*) } :kernel
++ .data : { *(.data*) } :kernel
++ .got : { *(.got) } :kernel
++ .sdata : { *(.sdata) } :kernel
+ _edata = .;
+ PROVIDE (edata = .);
+- .sbss : { *(.sbss) *(.scommon) }
+- .bss : { *(.bss) *(COMMON) }
++ .sbss : { *(.sbss) *(.scommon) } :kernel
++ .bss : { *(.bss) *(COMMON) } :kernel
+ _end = . ;
+ PROVIDE (end = .);
+
++ /DISCARD/ : { *(.eh_frame) }
++
+ .mdebug 0 : { *(.mdebug) }
+ .note 0 : { *(.note) }
+ .comment 0 : { *(.comment) }
+
+--- aboot-1.0_pre20040408/cons.c
++++ aboot-1.0_pre20040408/cons.c
+@@ -82,7 +81,7 @@ cons_getenv(long index, char *envval, long maxlen)
+ * allocated on the stack (which guaranteed to by 8 byte
+ * aligned).
+ */
+- char * tmp = alloca(maxlen);
++ char tmp[maxlen];
+ long len;
+
+ len = dispatch(CCB_GET_ENV, index, tmp, maxlen - 1);
+
+--- aboot-1.0_pre20040408/disk.c
++++ aboot-1.0_pre20040408/disk.c
+@@ -113,7 +113,7 @@ int
+ load_uncompressed (int fd)
+ {
+ long nread, nblocks;
+- unsigned char *buf;
++ char *buf;
+ int i;
+
+ buf = malloc(bfs->blocksize);
+@@ -131,7 +131,7 @@ load_uncompressed (int fd)
+
+ for(i = 0; i < 16; i++) {
+ for (j = 0; j < 16; j++)
+- printf("%02X ", buf[j+16*i]);
++ printf("%02X ", (unsigned char) buf[j+16*i]);
+ for(j = 0; j < 16; j++) {
+ c = buf[j+16*i];
+ printf("%c", (c >= ' ') ? c : ' ');
+
+--- aboot-1.0_pre20040408/head.S
++++ aboot-1.0_pre20040408/head.S
+@@ -19,8 +19,7 @@ __start:
+ .quad 0,0,0,0,0,0,0,0
+ 1: br $27,2f
+ 2: ldgp $29,0($27)
+- lda $27,main_
+- jsr $26,($27),main_
++ bsr $26,main_ !samegp
+ call_pal PAL_halt
+ .end __start
+
+@@ -170,4 +169,4 @@ run_kernel:
+ mov $16,$27
+ mov $17,$30
+ jmp $31,($27)
+- .end run_kernel
+\ No newline at end of file
++ .end run_kernel
diff --git a/sys-boot/aboot/files/digest-aboot-1.0_pre20040408-r2 b/sys-boot/aboot/files/digest-aboot-1.0_pre20040408-r2
new file mode 100644
index 000000000000..3b19fa8cb398
--- /dev/null
+++ b/sys-boot/aboot/files/digest-aboot-1.0_pre20040408-r2
@@ -0,0 +1,6 @@
+MD5 ac1214102d8304f326655e3e36d89847 aboot-1.0_pre20040408.tar.bz2 115062
+RMD160 7ba6619e6cee1d570b5df806a1dbd23b2918303b aboot-1.0_pre20040408.tar.bz2 115062
+SHA256 a8ae8f2bf549c1cc79ea66a0a11c8db5c0257ce0d94b97418eb1c658723b12d2 aboot-1.0_pre20040408.tar.bz2 115062
+MD5 9ff186f91c21c4cf02d73b9fd22ef28d gentoo-headers-base-2.6.22.tar.bz2 4700338
+RMD160 0742adecc4cf093a2df13c61c3d11e7566f08a9d gentoo-headers-base-2.6.22.tar.bz2 4700338
+SHA256 da57d0d8d12a59b05f0d3851e6d2f67c413baece046f4ec03831aa70df88710a gentoo-headers-base-2.6.22.tar.bz2 4700338