[OpenBIOS] [commit] r712 - in trunk/openbios-devel: arch/sparc32 arch/sparc64 arch/x86 config/scripts include/libopenbios libopenbios

repository service svn at openbios.org
Sat Mar 27 12:53:59 CET 2010


Author: mcayland
Date: Sat Mar 27 12:53:59 2010
New Revision: 712
URL: http://tracker.coreboot.org/trac/openbios/changeset/712

Log:
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 <mark.cave-ayland at siriusit.co.uk>

Added:
   trunk/openbios-devel/include/libopenbios/forth_load.h
   trunk/openbios-devel/libopenbios/forth_load.c
Deleted:
   trunk/openbios-devel/arch/sparc32/forthload.c
   trunk/openbios-devel/arch/sparc64/forthload.c
   trunk/openbios-devel/arch/x86/forthload.c
Modified:
   trunk/openbios-devel/arch/sparc32/build.xml
   trunk/openbios-devel/arch/sparc64/build.xml
   trunk/openbios-devel/arch/x86/boot.c
   trunk/openbios-devel/arch/x86/boot.h
   trunk/openbios-devel/arch/x86/build.xml
   trunk/openbios-devel/config/scripts/switch-arch
   trunk/openbios-devel/libopenbios/build.xml

Modified: trunk/openbios-devel/arch/sparc32/build.xml
==============================================================================
--- trunk/openbios-devel/arch/sparc32/build.xml	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/arch/sparc32/build.xml	Sat Mar 27 12:53:59 2010	(r712)
@@ -15,7 +15,6 @@
   <object source="udiv.S"/>
   <object source="linux_load.c"/>
   <object source="sys_info.c"/>
-  <object source="forthload.c"/>
   <object source="romvec.c"/>
   <object source="entry.S"/>
   <object source="vectors.S"/>

Modified: trunk/openbios-devel/arch/sparc64/build.xml
==============================================================================
--- trunk/openbios-devel/arch/sparc64/build.xml	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/arch/sparc64/build.xml	Sat Mar 27 12:53:59 2010	(r712)
@@ -14,7 +14,6 @@
   <object source="switch.S"/>
   <object source="linux_load.c"/>
   <object source="sys_info.c"/>
-  <object source="forthload.c"/>
   <object source="fcodeload.c"/>
   <object source="ofmem_sparc64.c"/>
   <object source="entry.S"/>

Modified: trunk/openbios-devel/arch/x86/boot.c
==============================================================================
--- trunk/openbios-devel/arch/x86/boot.c	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/arch/x86/boot.c	Sat Mar 27 12:53:59 2010	(r712)
@@ -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 @@
 	linux_load(&sys_info, path, param);
 
 	/* Forth loader */
-	forth_load(&sys_info, path, param);
+	forth_load(path);
 	feval("state-valid @");
 	valid = POP();
 	if (valid)

Modified: trunk/openbios-devel/arch/x86/boot.h
==============================================================================
--- trunk/openbios-devel/arch/x86/boot.h	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/arch/x86/boot.h	Sat Mar 27 12:53:59 2010	(r712)
@@ -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);
 

Modified: trunk/openbios-devel/arch/x86/build.xml
==============================================================================
--- trunk/openbios-devel/arch/x86/build.xml	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/arch/x86/build.xml	Sat Mar 27 12:53:59 2010	(r712)
@@ -14,7 +14,6 @@
   <object source="linux_load.c"/>
   <object source="segment.c"/>
   <object source="sys_info.c"/>
-  <object source="forthload.c"/>
   <object source="entry.S"/>
   <object source="xbox/console.c" condition="XBOX"/>
   <object source="xbox/methods.c" condition="XBOX"/>

Modified: trunk/openbios-devel/config/scripts/switch-arch
==============================================================================
--- trunk/openbios-devel/config/scripts/switch-arch	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/config/scripts/switch-arch	Sat Mar 27 12:53:59 2010	(r712)
@@ -150,7 +150,8 @@
         ;;
 
         x86)
-        select_prefix i486
+        #select_prefix i486
+        select_prefix x86_64
         CFLAGS="-fno-builtin -m32"
         AS_FLAGS="-Wa,-32"
         ;;

Added: trunk/openbios-devel/include/libopenbios/forth_load.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/include/libopenbios/forth_load.h	Sat Mar 27 12:53:59 2010	(r712)
@@ -0,0 +1,22 @@
+/*
+ *   Creation Date: <2010/03/22 18:00:00 mcayland>
+ *   Time-stamp: <2010/03/22 18:00:00 mcayland>
+ *
+ *	<forth_load.h>
+ *
+ *	Forth loader
+ *
+ *   Copyright (C) 2010 Mark Cave-Ayland (mark.cave-ayland at 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

Modified: trunk/openbios-devel/libopenbios/build.xml
==============================================================================
--- trunk/openbios-devel/libopenbios/build.xml	Sat Mar 27 12:30:14 2010	(r711)
+++ trunk/openbios-devel/libopenbios/build.xml	Sat Mar 27 12:53:59 2010	(r712)
@@ -17,6 +17,7 @@
   <object source="elf_load.c" condition="AMD64"/>
   <object source="font_8x8.c" condition="FONT_8X8"/>
   <object source="font_8x16.c" condition="FONT_8X16"/>
+  <object source="forth_load.c" condition="X86"/>
   <object source="ipchecksum.c"/>
   <object source="linuxbios_info.c" condition="LINUXBIOS"/>
   <object source="ofmem_common.c" condition="OFMEM"/>

Added: trunk/openbios-devel/libopenbios/forth_load.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/libopenbios/forth_load.c	Sat Mar 27 12:53:59 2010	(r712)
@@ -0,0 +1,75 @@
+/* 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 "libopenbios/forth_load.h"
+#define printk printk
+#define debug printk
+
+static int fd;
+
+static char *forthtext=NULL;
+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 ((size_t)read_io(fd, forthtext, forthsize) != forthsize) {
+	printk("Can't read forth text\n");
+	goto out;
+    }
+    forthtext[forthsize]=0;
+    printk("ok\n");
+
+    // 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;
+}



More information about the OpenBIOS mailing list