diff --git a/arch/sparc32/build.xml b/arch/sparc32/build.xml index 0667a36..d2eadce 100644 --- a/arch/sparc32/build.xml +++ b/arch/sparc32/build.xml @@ -15,7 +15,6 @@ - diff --git a/arch/sparc64/build.xml b/arch/sparc64/build.xml index 040718b..21edf08 100644 --- a/arch/sparc64/build.xml +++ b/arch/sparc64/build.xml @@ -14,7 +14,6 @@ - diff --git a/arch/sparc64/forthload.c b/arch/sparc64/forthload.c deleted file mode 100644 index 2f2324e..0000000 --- a/arch/sparc64/forthload.c +++ /dev/null @@ -1,77 +0,0 @@ -/* tag: forth source loader - * - * Copyright (C) 2004 Stefan Reinauer - * - * See the file "COPYING" for further information about - * the copyright and warranty status of this work. - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "libopenbios/bindings.h" -#include "libopenbios/sys_info.h" -#include "libc/diskio.h" -#include "boot.h" -#define printk printk -#define debug printk - -static char *forthtext=NULL; -static int fd; - -int forth_load(const char *filename) -{ - char magic[2]; - unsigned long forthsize; - int retval = -1; - - /* Mark the saved-program-state as invalid */ - feval("0 state-valid !"); - - fd = open_io(filename); - if (!fd) - goto out; - - if (read_io(fd, magic, 2) != 2) { - debug("Can't read magic header\n"); - retval = LOADER_NOT_SUPPORT; - goto out; - } - - if (magic[0] != '\\' || magic[1] != ' ') { - debug("No forth source image\n"); - retval = LOADER_NOT_SUPPORT; - goto out; - } - - /* Calculate the file size by seeking to the end of the file */ - seek_io(fd, -1); - forthsize = tell(fd); - forthtext = malloc(forthsize+1); - seek_io(fd, 0); - - printk("Loading forth source ..."); - if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) { - printk("Can't read forth text\n"); - goto out; - } - forthtext[forthsize]=0; - printk("ok\n"); - - close_io(fd); - - // Initialise saved-program-state - PUSH((ucell)forthtext); - feval("saved-program-state >sps.entry !"); - PUSH((ucell)forthsize); - feval("saved-program-state >sps.file-size !"); - feval("forth saved-program-state >sps.file-type !"); - - feval("-1 state-valid !"); - - retval=0; - -out: - //if (forthtext) - // free(forthtext); - return retval; -} diff --git a/arch/x86/boot.c b/arch/x86/boot.c index 835f1c7..0a45c5b 100644 --- a/arch/x86/boot.c +++ b/arch/x86/boot.c @@ -12,17 +12,20 @@ #include "arch/common/nvram.h" #include "libc/diskio.h" #include "libopenbios/sys_info.h" +#include "libopenbios/elf_load.h" +#include "libopenbios/forth_load.h" #include "boot.h" struct sys_info sys_info; static int try_path(const char *path, char *param) { + void *boot_notes = NULL; ucell valid, address, type, size; int image_retval = 0;; /* ELF Boot loader */ - elf_load(&sys_info, path, param); + elf_load(&sys_info, path, param, &boot_notes); feval("state-valid @"); valid = POP(); if (valid) @@ -32,7 +35,7 @@ static int try_path(const char *path, char *param) linux_load(&sys_info, path, param); /* Forth loader */ - forth_load(&sys_info, path, param); + forth_load(path); feval("state-valid @"); valid = POP(); if (valid) diff --git a/arch/x86/boot.h b/arch/x86/boot.h index 9ef4fda..0488ce4 100644 --- a/arch/x86/boot.h +++ b/arch/x86/boot.h @@ -6,12 +6,6 @@ * the copyright and warranty status of this work. */ -/* forthload.c */ -int forth_load(struct sys_info *info, const char *filename, const char *cmdline); - -/* elfload.c */ -int elf_load(struct sys_info *info, const char *filename, const char *cmdline); - /* linux_load.c */ int linux_load(struct sys_info *info, const char *file, const char *cmdline); diff --git a/arch/x86/build.xml b/arch/x86/build.xml index 50ccff8..8317209 100644 --- a/arch/x86/build.xml +++ b/arch/x86/build.xml @@ -14,7 +14,6 @@ - diff --git a/arch/x86/forthload.c b/arch/x86/forthload.c deleted file mode 100644 index cb3e1ce..0000000 --- a/arch/x86/forthload.c +++ /dev/null @@ -1,75 +0,0 @@ -/* tag: forth source loader - * - * Copyright (C) 2004 Stefan Reinauer - * - * See the file "COPYING" for further information about - * the copyright and warranty status of this work. - */ - -#include "config.h" -#include "kernel/kernel.h" -#include "libopenbios/bindings.h" -#include "libopenbios/sys_info.h" -#include "libc/diskio.h" -#include "boot.h" -#define printk printk -#define debug printk - -static char *forthtext=NULL; -static int fd; - -int forth_load(struct sys_info *info, const char *filename, const char *cmdline) -{ - char magic[2]; - unsigned long forthsize; - int retval = -1; - - /* Mark the saved-program-state as invalid */ - feval("0 state-valid !"); - - fd = open_io(filename); - if (!fd) - goto out; - - if (read_io(fd, magic, 2) != 2) { - debug("Can't read magic header\n"); - retval = LOADER_NOT_SUPPORT; - goto out; - } - - if (magic[0] != '\\' || magic[1] != ' ') { - debug("No forth source image\n"); - retval = LOADER_NOT_SUPPORT; - goto out; - } - - /* Calculate the file size by seeking to the end of the file */ - seek_io(fd, -1); - forthsize = tell(fd); - forthtext = malloc(forthsize+1); - seek_io(fd, 0); - - printk("Loading forth source ..."); - if (read_io(fd, forthtext, forthsize) != forthsize) { - printk("Can't read forth text\n"); - goto out; - } - forthtext[forthsize]=0; - printk("ok\n"); - - close_io(fd); - - // Initialise saved-program-state - PUSH((ucell)forthtext); - feval("saved-program-state >sps.entry !"); - PUSH((ucell)forthsize); - feval("saved-program-state >sps.file-size !"); - feval("forth saved-program-state >sps.file-type !"); - - feval("-1 state-valid !"); - -out: - //if (forthtext) - // free(forthtext); - return retval; -} diff --git a/config/scripts/switch-arch b/config/scripts/switch-arch index c145e86..1d93016 100755 --- a/config/scripts/switch-arch +++ b/config/scripts/switch-arch @@ -150,7 +150,8 @@ for RULES_ARCH in $*; do ;; x86) - select_prefix i486 + #select_prefix i486 + select_prefix x86_64 CFLAGS="-fno-builtin -m32" AS_FLAGS="-Wa,-32" ;; diff --git a/include/libopenbios/forth_load.h b/include/libopenbios/forth_load.h new file mode 100644 index 0000000..b0223c0 --- /dev/null +++ b/include/libopenbios/forth_load.h @@ -0,0 +1,22 @@ +/* + * Creation Date: <2010/03/22 18:00:00 mcayland> + * Time-stamp: <2010/03/22 18:00:00 mcayland> + * + * + * + * Forth loader + * + * Copyright (C) 2010 Mark Cave-Ayland (mark.cave-ayland@siriusit.co.uk) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation + * + */ + +#ifndef _H_FORTHLOAD +#define _H_FORTHLOAD + +extern int forth_load(const char *filename); + +#endif /* _H_FORTHLOAD */ \ No newline at end of file diff --git a/libopenbios/build.xml b/libopenbios/build.xml index 055aea3..d2dd9ce 100644 --- a/libopenbios/build.xml +++ b/libopenbios/build.xml @@ -17,6 +17,7 @@ + diff --git a/arch/sparc32/forthload.c b/libopenbios/forth_load.c similarity index 93% rename from arch/sparc32/forthload.c rename to libopenbios/forth_load.c index 2f2324e..76fee6b 100644 --- a/arch/sparc32/forthload.c +++ b/libopenbios/forth_load.c @@ -11,13 +11,13 @@ #include "libopenbios/bindings.h" #include "libopenbios/sys_info.h" #include "libc/diskio.h" -#include "boot.h" +#include "libopenbios/forth_load.h" #define printk printk #define debug printk -static char *forthtext=NULL; static int fd; +static char *forthtext=NULL; int forth_load(const char *filename) { char magic[2]; @@ -50,15 +50,13 @@ int forth_load(const char *filename) seek_io(fd, 0); printk("Loading forth source ..."); - if ((unsigned long)read_io(fd, forthtext, forthsize) != forthsize) { + if ((size_t)read_io(fd, forthtext, forthsize) != forthsize) { printk("Can't read forth text\n"); goto out; } forthtext[forthsize]=0; printk("ok\n"); - close_io(fd); - // Initialise saved-program-state PUSH((ucell)forthtext); feval("saved-program-state >sps.entry !");