[OpenBIOS] [commit] r719 - in trunk/openbios-devel: include/libopenbios libopenbios

repository service svn at openbios.org
Sun Mar 28 22:55:10 CEST 2010


Author: mcayland
Date: Sun Mar 28 22:55:10 2010
New Revision: 719
URL: http://tracker.coreboot.org/trac/openbios/changeset/719

Log:
Add is_fcode(), is_forth() and is_aout() functions which take a pointer to an area of memory which may contain a valid loader 
image.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>

Modified:
   trunk/openbios-devel/include/libopenbios/aout_load.h
   trunk/openbios-devel/include/libopenbios/fcode_load.h
   trunk/openbios-devel/include/libopenbios/forth_load.h
   trunk/openbios-devel/libopenbios/aout_load.c
   trunk/openbios-devel/libopenbios/fcode_load.c
   trunk/openbios-devel/libopenbios/forth_load.c

Modified: trunk/openbios-devel/include/libopenbios/aout_load.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/aout_load.h	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/include/libopenbios/aout_load.h	Sun Mar 28 22:55:10 2010	(r719)
@@ -17,8 +17,10 @@
 #ifndef _H_AOUTLOAD
 #define _H_AOUTLOAD
 
+#include "arch/common/a.out.h"
 #include "libopenbios/sys_info.h"
 
+extern int is_aout(struct exec *ehdr);
 extern int aout_load(struct sys_info *info, const char *filename);
 
 #endif   /* _H_AOUTLOAD */

Modified: trunk/openbios-devel/include/libopenbios/fcode_load.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/fcode_load.h	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/include/libopenbios/fcode_load.h	Sun Mar 28 22:55:10 2010	(r719)
@@ -17,6 +17,7 @@
 #ifndef _H_FCODELOAD
 #define _H_FCODELOAD
 
+extern int is_fcode(unsigned char *fcode);
 extern int fcode_load(const char *filename);
 
 #endif   /* _H_FCODELOAD */

Modified: trunk/openbios-devel/include/libopenbios/forth_load.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/forth_load.h	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/include/libopenbios/forth_load.h	Sun Mar 28 22:55:10 2010	(r719)
@@ -17,6 +17,7 @@
 #ifndef _H_FORTHLOAD
 #define _H_FORTHLOAD
 
+extern int is_forth(char *forth);
 extern int forth_load(const char *filename);
 
 #endif   /* _H_FORTHLOAD */

Modified: trunk/openbios-devel/libopenbios/aout_load.c
==============================================================================
--- trunk/openbios-devel/libopenbios/aout_load.c	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/libopenbios/aout_load.c	Sun Mar 28 22:55:10 2010	(r719)
@@ -58,6 +58,15 @@
     return 0;
 }
 
+int is_aout(struct exec *ehdr)
+{
+	return ((ehdr->a_info & 0xffff) == OMAGIC
+		|| (ehdr->a_info & 0xffff) == NMAGIC
+		|| (ehdr->a_info & 0xffff) == ZMAGIC
+		|| (ehdr->a_info & 0xffff) == QMAGIC);
+
+}
+
 int aout_load(struct sys_info *info, const char *filename)
 {
     int retval = -1;
@@ -81,11 +90,11 @@
             retval = LOADER_NOT_SUPPORT;
             goto out;
         }
-        if (!N_BADMAG(ehdr))
+        if (is_aout(&ehdr))
             break;
     }
 
-    if (N_BADMAG(ehdr)) {
+    if (!is_aout(&ehdr)) {
 	debug("Not a bootable a.out image\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;

Modified: trunk/openbios-devel/libopenbios/fcode_load.c
==============================================================================
--- trunk/openbios-devel/libopenbios/fcode_load.c	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/libopenbios/fcode_load.c	Sun Mar 28 22:55:10 2010	(r719)
@@ -13,6 +13,15 @@
 
 static int fd;
 
+int is_fcode(unsigned char *fcode)
+{
+	return (fcode[0] == 0xf0		// start0
+		|| fcode[0] == 0xf1	// start1 
+		|| fcode[0] == 0xf2	// start2
+		|| fcode[0] == 0xf3	// start4
+		|| fcode[0] == 0xfd);	// version1
+}
+
 int fcode_load(const char *filename)
 {
     int retval = -1;
@@ -35,14 +44,9 @@
             retval = LOADER_NOT_SUPPORT;
             goto out;
         }
-        switch (fcode_header[0]) {
-        case 0xf0: // start0
-        case 0xf1: // start1
-        case 0xf2: // start2
-        case 0xf3: // start4
-        case 0xfd: // version1
+
+	if (is_fcode(fcode_header))
             goto found;
-        }
     }
 
     debug("Not a bootable FCode image\n");

Modified: trunk/openbios-devel/libopenbios/forth_load.c
==============================================================================
--- trunk/openbios-devel/libopenbios/forth_load.c	Sun Mar 28 22:48:53 2010	(r718)
+++ trunk/openbios-devel/libopenbios/forth_load.c	Sun Mar 28 22:55:10 2010	(r719)
@@ -16,8 +16,13 @@
 #define debug printk
 
 static int fd;
-
 static char *forthtext=NULL;
+
+int is_forth(char *forth)
+{
+	return (forth[0] == '\\' && forth[1] == ' ');
+}
+
 int forth_load(const char *filename)
 {
     char magic[2];
@@ -37,7 +42,7 @@
 	goto out;
     }
 
-    if (magic[0] != '\\' || magic[1] != ' ') {
+    if (!is_forth(magic)) {
 	debug("No forth source image\n");
 	retval = LOADER_NOT_SUPPORT;
 	goto out;



More information about the OpenBIOS mailing list