From 126f9ee43e0f7626aa4ff2bf0edd44e74281c37d Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Sat, 27 Mar 2010 11:53:59 +0000 Subject: [PATCH] Move the Forth loader forthload.c from arch/*/forthload.c to libopenbios/forth_load.c. While the Forth loader source was included and built as part of the SPARC64 and SPARC32 builds, it was never actually invoked in the boot sequence. Hence this patch maintains the existing behaviour in that only X86 builds included the Forth loader. Signed-off-by: Mark Cave-Ayland git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@712 f158a5a8-5612-0410-a976-696ce0be7e32 --- arch/sparc32/build.xml | 1 - arch/sparc64/build.xml | 1 - arch/sparc64/forthload.c | 77 ------------------- arch/x86/boot.c | 7 +- arch/x86/boot.h | 6 -- arch/x86/build.xml | 1 - arch/x86/forthload.c | 75 ------------------ config/scripts/switch-arch | 3 +- include/libopenbios/forth_load.h | 22 ++++++ libopenbios/build.xml | 1 + .../forthload.c => libopenbios/forth_load.c | 8 +- 11 files changed, 33 insertions(+), 169 deletions(-) delete mode 100644 arch/sparc64/forthload.c delete mode 100644 arch/x86/forthload.c create mode 100644 include/libopenbios/forth_load.h rename arch/sparc32/forthload.c => libopenbios/forth_load.c (93%) 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 !");