summaryrefslogtreecommitdiff
path: root/sys-boot/aboot
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-04 16:47:34 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-04 16:47:34 -0500
commitdda948891d3731927b821ce31f9d9a2d03ba20c5 (patch)
tree99cd40be4cbb0606260da212cd81b8ab2db9da9b /sys-boot/aboot
parenta3ceca1b4c0d9bdb550dc23f06ffbb5a8e033bc7 (diff)
downloadbaldeagleos-repo-dda948891d3731927b821ce31f9d9a2d03ba20c5.tar.gz
baldeagleos-repo-dda948891d3731927b821ce31f9d9a2d03ba20c5.tar.xz
baldeagleos-repo-dda948891d3731927b821ce31f9d9a2d03ba20c5.zip
Adding metadata
Diffstat (limited to 'sys-boot/aboot')
-rw-r--r--sys-boot/aboot/Manifest4
-rw-r--r--sys-boot/aboot/aboot-1.0_pre20040408-r3.ebuild90
-rw-r--r--sys-boot/aboot/aboot-2.0_pre20210801.ebuild69
-rw-r--r--sys-boot/aboot/aboot-9999.ebuild67
-rw-r--r--sys-boot/aboot/files/aboot-define_stat_only_in_userspace.patch35
-rw-r--r--sys-boot/aboot/files/aboot-gcc-3.4.patch31
-rw-r--r--sys-boot/aboot/files/aboot-gnu90.patch26
-rw-r--r--sys-boot/aboot/files/aboot-pt_note.patch308
-rw-r--r--sys-boot/aboot/files/aboot-respect-AR.patch13
-rw-r--r--sys-boot/aboot/files/aboot.conf10
-rw-r--r--sys-boot/aboot/metadata.xml9
11 files changed, 662 insertions, 0 deletions
diff --git a/sys-boot/aboot/Manifest b/sys-boot/aboot/Manifest
new file mode 100644
index 000000000000..e06ee93fc07a
--- /dev/null
+++ b/sys-boot/aboot/Manifest
@@ -0,0 +1,4 @@
+DIST aboot-1.0_pre20040408.tar.bz2 115062 BLAKE2B 49f1b45abcd4726fd036e24709d10bbfea42cee03293e31b2deb3aec383c1c438602aa97d3909516ec9864986dfcf82612fe7644b47e3e2760bdf377313446a0 SHA512 b1fff7ce806336f89efe8239108a8547053f22727cba93cea742995432c4f35133f8dc619588390ba6e0d114e2fd62b80b730443e6c18900aa2a8832ddd4ebfc
+DIST aboot-2.0_pre20210801.tar.gz 173477 BLAKE2B 54c38a98b9e3e956f08b4fcca6a4f3351364d7774a915916aae8af67237982635a2686c1df0628fc28dcc2443da8ad57be822c8530e1580261c60dde73f00519 SHA512 57181897147bba65e8b216af262bf2d2e57cb76bd809d8207439dbfbe84ff550cf9a43c0f10f9925e54ca21660cfe9441c7607743ff3f7613c1e22e219708081
+DIST aboot_gentoo.diff.bz2 9527 BLAKE2B 2492b456f7411630b6ecfb19db775969b69a35c0ef31b2146fd353aac78cf4d3c9ef2162cf54ab4ac025c65607219b3a33a74d2105be196e6dda54dd2509c1f8 SHA512 868a73fee56e9bf6d986175a6a4dc321ed12fb78d74dfb8f1a3e35274577ddc9ea0820768b44836403587b3976ad8dacdcf6562a9ce5c45981c752670901155f
+DIST gentoo-headers-base-2.6.22.tar.bz2 4700338 BLAKE2B a264d7999ed7735e42ea21f8cf96b60ca1bdbfcb76dbdfcba14a849043e1f6a9109cd72bf5b91b9ab877dc3025ce6a9270ea914cf277b8f77cecff703646a7ec SHA512 99849928eede0c4b101ddc9179c0974cac6b4f18803dc98b72dcbe80cea88d3062f709beaa1b890edbed9c147be0dd516065d4cee945164b5d9f19f7a3cf249d
diff --git a/sys-boot/aboot/aboot-1.0_pre20040408-r3.ebuild b/sys-boot/aboot/aboot-1.0_pre20040408-r3.ebuild
new file mode 100644
index 000000000000..a14b4ee280ba
--- /dev/null
+++ b/sys-boot/aboot/aboot-1.0_pre20040408-r3.ebuild
@@ -0,0 +1,90 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+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
+ mirror://gentoo/${PN}_gentoo.diff.bz2
+ https://dev.gentoo.org/~armin76/dist/${PN}_gentoo.diff.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="-* ~alpha"
+
+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
+}
+
+src_prepare() {
+ eapply "${FILESDIR}/aboot-gcc-3.4.patch"
+ eapply "${FILESDIR}/aboot-pt_note.patch"
+ # Bug 364697
+ eapply "${FILESDIR}/aboot-define_stat_only_in_userspace.patch"
+ eapply "${FILESDIR}"/aboot-respect-AR.patch
+ eapply "${FILESDIR}"/aboot-gnu90.patch
+
+ # Modified patch from Debian to add netboot support
+ eapply "${WORKDIR}"/aboot_gentoo.diff
+
+ eapply_user
+}
+
+src_compile() {
+ # too many problems with parallel building
+ emake -j1 AR="$(tc-getAR)" CC="$(tc-getCC)" LD="$(tc-getLD)"
+}
+
+src_install() {
+ dodir /boot /sbin /usr/share/man/man{1,5,8}
+ make \
+ root="${D}" \
+ bindir="${D}"/sbin \
+ bootdir="${D}"/boot \
+ mandir="${D}"/usr/share/man \
+ install
+
+ insinto /boot
+ doins net_aboot.nh
+ dobin netabootwrap
+ 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/aboot-2.0_pre20210801.ebuild b/sys-boot/aboot/aboot-2.0_pre20210801.ebuild
new file mode 100644
index 000000000000..0cb5a272325e
--- /dev/null
+++ b/sys-boot/aboot/aboot-2.0_pre20210801.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+if [[ ${PV} = 9999* ]]; then
+ EGIT_REPO_URI="https://github.com/mattst88/${PN}.git"
+ inherit git-r3
+else
+ COMMIT_ID="dde7f7b85f7631668f1da7c0b0ecf7ddbbde004e"
+ SRC_URI="https://github.com/mattst88/${PN}/archive/${COMMIT_ID}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT_ID}"
+ KEYWORDS="-* ~alpha"
+fi
+
+DESCRIPTION="Alpha Linux boot loader for SRM"
+HOMEPAGE="https://github.com/mattst88/aboot https://sourceforge.net/projects/aboot/"
+
+LICENSE="GPL-2"
+SLOT="0"
+
+BDEPEND="app-text/docbook-sgml-utils"
+
+src_compile() {
+ emake AR="$(tc-getAR)" CC="$(tc-getCC)" LD="$(tc-getLD)" \
+ all netabootwrap
+
+ einfo "Building man pages"
+ emake -C doc/man
+}
+
+src_install() {
+ dodir /boot /sbin /usr/share/man/man{1,5,8}
+ emake root="${D}" install
+
+ insinto /boot
+ doins net_aboot.nh
+ dobin netabootwrap
+ 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/aboot-9999.ebuild b/sys-boot/aboot/aboot-9999.ebuild
new file mode 100644
index 000000000000..494ceb2d395e
--- /dev/null
+++ b/sys-boot/aboot/aboot-9999.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+if [[ ${PV} = 9999* ]]; then
+ EGIT_REPO_URI="https://github.com/mattst88/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/mattst88/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="-* ~alpha"
+fi
+
+DESCRIPTION="Alpha Linux boot loader for SRM"
+HOMEPAGE="https://github.com/mattst88/aboot https://sourceforge.net/projects/aboot/"
+
+LICENSE="GPL-2"
+SLOT="0"
+
+BDEPEND="app-text/docbook-sgml-utils"
+
+src_compile() {
+ emake AR="$(tc-getAR)" CC="$(tc-getCC)" LD="$(tc-getLD)" \
+ all netabootwrap
+
+ einfo "Building man pages"
+ emake -C doc/man
+}
+
+src_install() {
+ dodir /boot /sbin /usr/share/man/man{1,5,8}
+ emake root="${D}" install
+
+ insinto /boot
+ doins net_aboot.nh
+ dobin netabootwrap
+ 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-define_stat_only_in_userspace.patch b/sys-boot/aboot/files/aboot-define_stat_only_in_userspace.patch
new file mode 100644
index 000000000000..5b0b5e0efedf
--- /dev/null
+++ b/sys-boot/aboot/files/aboot-define_stat_only_in_userspace.patch
@@ -0,0 +1,35 @@
+# Patch by Sergei Trofimovich
+# http://bugs.gentoo.org/364697
+
+diff --git a/Makefile b/Makefile
+index bbe3b60..b4245af 100644
+--- a/Makefile
++++ b/Makefile
+@@ -138,10 +138,10 @@ distclean: clean
+ find . -name \*~ | xargs rm -f
+
+ lib/%:
+- make -C lib $* CPPFLAGS="$(CPPFLAGS)" TESTING="$(TESTING)"
++ make -C lib $* CPPFLAGS="$(CPPFLAGS) -D__KERNEL__" TESTING="$(TESTING)"
+
+ tools/%:
+- make -C tools $* CPPFLAGS="$(CPPFLAGS)"
++ make -C tools $* CPPFLAGS="$(CPPFLAGS) -U__KERNEL__"
+
+ sdisklabel/%:
+ make -C sdisklabel $* CPPFLAGS="$(CPPFLAGS)"
+diff --git a/include/isolib.h b/include/isolib.h
+index 392327a..0ef6e2a 100644
+--- a/include/isolib.h
++++ b/include/isolib.h
+@@ -7,7 +7,10 @@
+ # define fd_set kernel_fd_set
+ #endif
+
++#ifdef __KERNEL__
++/* userspace stuff has it's own struct stat */
+ #include <asm/stat.h>
++#endif
+
+ extern int iso_read_super (void * data, int quiet);
+ extern int iso_open (const char * filename);
diff --git a/sys-boot/aboot/files/aboot-gcc-3.4.patch b/sys-boot/aboot/files/aboot-gcc-3.4.patch
new file mode 100644
index 000000000000..24da18ce8190
--- /dev/null
+++ b/sys-boot/aboot/files/aboot-gcc-3.4.patch
@@ -0,0 +1,31 @@
+--- aboot-1.0_pre20040408/cons.c
++++ aboot-1.0_pre20040408/cons.c
+@@ -20,7 +20,6 @@
+ #endif
+
+ long cons_dev; /* console device */
+-extern long int dispatch(); /* Need the full 64 bit return here...*/
+
+ long
+ cons_puts(const char *str, long len)
+--- aboot-1.0_pre20040408/fs/ext2.c
++++ aboot-1.0_pre20040408/fs/ext2.c
+@@ -6,6 +6,7 @@
+ * This file has been ported from the DEC 32-bit Linux version
+ * by David Mosberger (davidm@cs.arizona.edu).
+ */
++#include <string.h>
+ #include <linux/stat.h>
+ #include <linux/types.h>
+ #include <linux/version.h>
+--- aboot-1.0_pre20040408/include/cons.h
++++ aboot-1.0_pre20040408/include/cons.h
+@@ -3,7 +3,7 @@
+
+ extern long cons_dev; /* console device */
+
+-extern long dispatch(long proc, ...);
++extern long int dispatch(long proc, ...);
+
+ #ifdef TESTING
+ #define STRINGIFY(sym) #sym
diff --git a/sys-boot/aboot/files/aboot-gnu90.patch b/sys-boot/aboot/files/aboot-gnu90.patch
new file mode 100644
index 000000000000..2fb4b87f6b2c
--- /dev/null
+++ b/sys-boot/aboot/files/aboot-gnu90.patch
@@ -0,0 +1,26 @@
+This patch fixes multiple definitions of 'extern inline' functions.
+
+c99 and gnu90 have slightly different semantics
+WRT symbol definition: http://www.greenend.org.uk/rjk/tech/inline.html
+
+gcc-4 defaults to gnu90 and works, gcc-6 defaults to gnu-99
+and fails to link aboot as:
+ alpha-unknown-linux-gnu-ld: Disabling relaxation: it will not work with multiple definitions
+ lib/libaboot.a(isolib.o): In function `prefetchw':
+ (.text+0x60): multiple definition of `prefetchw'
+ fs/ext2.o:(.text+0xe68): first defined here
+
+The change is to force gnu90 explicitly.
+diff --git a/Makefile b/Makefile
+index b4245af..634ac87 100644
+--- a/Makefile
++++ b/Makefile
+@@ -40,6 +40,6 @@ ifeq ($(TESTING),)
+ CPPFLAGS = $(CFGDEFS) -I$(TOP)/include -I$(KSRC)/include
+-CFLAGS = $(CPPFLAGS) -D__KERNEL__ -Os -Wall -fno-builtin -mno-fp-regs
++CFLAGS = $(CPPFLAGS) -std=gnu90 -D__KERNEL__ -Os -Wall -fno-builtin -mno-fp-regs
+ else
+ CPPFLAGS = -DTESTING $(CFGDEFS) -I$(TOP)/include -I$(KSRC)/include
+-CFLAGS = $(CPPFLAGS) -O -g3 -Wall -D__KERNEL__ -ffixed-8
++CFLAGS = $(CPPFLAGS) -std=gnu90 -O -g3 -Wall -D__KERNEL__ -ffixed-8
+ endif
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/aboot-respect-AR.patch b/sys-boot/aboot/files/aboot-respect-AR.patch
new file mode 100644
index 000000000000..44e4a2a52063
--- /dev/null
+++ b/sys-boot/aboot/files/aboot-respect-AR.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/Makefile b/lib/Makefile
+index e3a2247..c137b53 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -13,6 +13,6 @@ libaboot.a: vsprintf.o memcpy.o memset.o string.o _setjmp.o \
+ __remlu.o
+- ar cru $@ $?
++ $(AR) cru $@ $?
+ else
+ libaboot.a: isolib.o
+- ar cru $@ $?
++ $(AR) cru $@ $?
+ endif
diff --git a/sys-boot/aboot/files/aboot.conf b/sys-boot/aboot/files/aboot.conf
new file mode 100644
index 000000000000..02114138e938
--- /dev/null
+++ b/sys-boot/aboot/files/aboot.conf
@@ -0,0 +1,10 @@
+#
+# aboot default configurations
+#
+0:3/vmlinux.gz ro root=/dev/sda2
+1:3/vmlinux.old.gz ro root=/dev/sda2
+2:3/vmlinux.new.gz ro root=/dev/sda2
+3:3/vmlinux ro root=/dev/sda2
+8:- ro root=/dev/sda2 # fs less boot of raw kernel
+9:0/- ro root=/dev/sda2 # fs less boot of (compressed) ECOFF kernel
+-
diff --git a/sys-boot/aboot/metadata.xml b/sys-boot/aboot/metadata.xml
new file mode 100644
index 000000000000..45afe5c507b1
--- /dev/null
+++ b/sys-boot/aboot/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>alpha@gentoo.org</email>
+ <name>Alpha architecture team</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>