[OpenBIOS] [commit] r694 - in trunk/openbios-devel: arch/amd64 arch/sparc32 arch/sparc64 arch/x86 include include/arch/common include/libopenbios include/openbios libopenbios packages

repository service svn at openbios.org
Sun Mar 14 18:06:21 CET 2010


Author: mcayland
Date: Sun Mar 14 18:06:20 2010
New Revision: 694
URL: http://tracker.coreboot.org/trac/openbios/changeset/694

Log:
Move the a.out, ELF and XCOFF header files down into include/arch/common.

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

Added:
   trunk/openbios-devel/include/arch/common/a.out.h   (props changed)
      - copied unchanged from r692, trunk/openbios-devel/include/a.out.h
   trunk/openbios-devel/include/arch/common/elf.h   (props changed)
      - copied unchanged from r692, trunk/openbios-devel/include/openbios/elf.h
   trunk/openbios-devel/include/arch/common/elf_boot.h   (props changed)
      - copied unchanged from r692, trunk/openbios-devel/include/elf_boot.h
   trunk/openbios-devel/include/arch/common/xcoff.h   (props changed)
      - copied unchanged from r692, trunk/openbios-devel/include/openbios/xcoff.h
Deleted:
   trunk/openbios-devel/include/a.out.h
   trunk/openbios-devel/include/elf_boot.h
   trunk/openbios-devel/include/openbios/elf.h
   trunk/openbios-devel/include/openbios/xcoff.h
Modified:
   trunk/openbios-devel/arch/amd64/elfload.c
   trunk/openbios-devel/arch/sparc32/aoutload.c
   trunk/openbios-devel/arch/sparc32/elfload.c
   trunk/openbios-devel/arch/sparc32/sys_info.c
   trunk/openbios-devel/arch/sparc64/aoutload.c
   trunk/openbios-devel/arch/sparc64/elfload.c
   trunk/openbios-devel/arch/sparc64/sys_info.c
   trunk/openbios-devel/arch/x86/elfload.c
   trunk/openbios-devel/include/libopenbios/elfload.h
   trunk/openbios-devel/libopenbios/elf_info.c
   trunk/openbios-devel/libopenbios/elfload.c
   trunk/openbios-devel/packages/elf-loader.c
   trunk/openbios-devel/packages/xcoff-loader.c

Modified: trunk/openbios-devel/arch/amd64/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/amd64/elfload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/amd64/elfload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -5,9 +5,9 @@
 
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
 #include "loadfs.h"

Modified: trunk/openbios-devel/arch/sparc32/aoutload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/aoutload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc32/aoutload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -5,7 +5,7 @@
 
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "a.out.h"
+#include "arch/common/a.out.h"
 #include "libopenbios/sys_info.h"
 #include "loadfs.h"
 #include "boot.h"

Modified: trunk/openbios-devel/arch/sparc32/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/elfload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc32/elfload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -5,9 +5,9 @@
 
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
 #include "loadfs.h"

Modified: trunk/openbios-devel/arch/sparc32/sys_info.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/sys_info.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc32/sys_info.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -1,6 +1,6 @@
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "context.h"
 #include "boot.h"

Modified: trunk/openbios-devel/arch/sparc64/aoutload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/aoutload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc64/aoutload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -6,7 +6,7 @@
 #include "openbios/config.h"
 #include "kernel/kernel.h"
 #define CONFIG_SPARC64_PAGE_SIZE_8KB
-#include "a.out.h"
+#include "arch/common/a.out.h"
 #include "libopenbios/sys_info.h"
 #include "loadfs.h"
 #include "boot.h"

Modified: trunk/openbios-devel/arch/sparc64/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/elfload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc64/elfload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -5,9 +5,9 @@
 
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
 #include "loadfs.h"

Modified: trunk/openbios-devel/arch/sparc64/sys_info.c
==============================================================================
--- trunk/openbios-devel/arch/sparc64/sys_info.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/sparc64/sys_info.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -1,6 +1,6 @@
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "context.h"
 #include "boot.h"

Modified: trunk/openbios-devel/arch/x86/elfload.c
==============================================================================
--- trunk/openbios-devel/arch/x86/elfload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/arch/x86/elfload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -5,9 +5,9 @@
 
 #include "openbios/config.h"
 #include "kernel/kernel.h"
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "libopenbios/ipchecksum.h"
 #include "loadfs.h"

Copied: trunk/openbios-devel/include/arch/common/a.out.h (from r692, trunk/openbios-devel/include/a.out.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/include/arch/common/a.out.h	Sun Mar 14 18:06:20 2010	(r694, copy of r692, trunk/openbios-devel/include/a.out.h)
@@ -0,0 +1,271 @@
+#ifndef __A_OUT_GNU_H__
+#define __A_OUT_GNU_H__
+
+#define __GNU_EXEC_MACROS__
+
+#ifndef __STRUCT_EXEC_OVERRIDE__
+
+#include "asm/a.out.h"
+
+#endif /* __STRUCT_EXEC_OVERRIDE__ */
+
+/* these go in the N_MACHTYPE field */
+enum machine_type {
+#if defined (M_OLDSUN2)
+  M__OLDSUN2 = M_OLDSUN2,
+#else
+  M_OLDSUN2 = 0,
+#endif
+#if defined (M_68010)
+  M__68010 = M_68010,
+#else
+  M_68010 = 1,
+#endif
+#if defined (M_68020)
+  M__68020 = M_68020,
+#else
+  M_68020 = 2,
+#endif
+#if defined (M_SPARC)
+  M__SPARC = M_SPARC,
+#else
+  M_SPARC = 3,
+#endif
+  /* skip a bunch so we don't run into any of sun's numbers */
+  M_386 = 100,
+  M_MIPS1 = 151,	/* MIPS R3000/R3000 binary */
+  M_MIPS2 = 152		/* MIPS R6000/R4000 binary */
+};
+
+#if !defined (N_MAGIC)
+#define N_MAGIC(exec) ((exec).a_info & 0xffff)
+#endif
+#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
+#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
+#define N_SET_INFO(exec, magic, type, flags) \
+	((exec).a_info = ((magic) & 0xffff) \
+	 | (((int)(type) & 0xff) << 16) \
+	 | (((flags) & 0xff) << 24))
+#define N_SET_MAGIC(exec, magic) \
+	((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
+
+#define N_SET_MACHTYPE(exec, machtype) \
+	((exec).a_info = \
+	 ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
+
+#define N_SET_FLAGS(exec, flags) \
+	((exec).a_info = \
+	 ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
+
+/* Code indicating object file or impure executable.  */
+#define OMAGIC 0407
+/* Code indicating pure executable.  */
+#define NMAGIC 0410
+/* Code indicating demand-paged executable.  */
+#define ZMAGIC 0413
+/* This indicates a demand-paged executable with the header in the text.
+   The first page is unmapped to help trap NULL pointer references */
+#define QMAGIC 0314
+
+/* Code indicating core file.  */
+#define CMAGIC 0421
+
+#if !defined (N_BADMAG)
+#define N_BADMAG(x)	  (N_MAGIC(x) != OMAGIC		\
+			&& N_MAGIC(x) != NMAGIC		\
+  			&& N_MAGIC(x) != ZMAGIC \
+		        && N_MAGIC(x) != QMAGIC)
+#endif
+
+#define _N_HDROFF(x) (1024 - sizeof (struct exec))
+
+#if !defined (N_TXTOFF)
+#define N_TXTOFF(x) \
+ (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : \
+  (N_MAGIC(x) == QMAGIC ? 0 : sizeof (struct exec)))
+#endif
+
+#if !defined (N_DATOFF)
+#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
+#endif
+
+#if !defined (N_TRELOFF)
+#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
+#endif
+
+#if !defined (N_DRELOFF)
+#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x))
+#endif
+
+#if !defined (N_SYMOFF)
+#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x))
+#endif
+
+#if !defined (N_STROFF)
+#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x))
+#endif
+
+/* Address of text segment in memory after it is loaded.  */
+#if !defined (N_TXTADDR)
+#define N_TXTADDR(x) (N_MAGIC(x) == QMAGIC ? PAGE_SIZE : 0)
+#endif
+
+/* Address of data segment in memory after it is loaded.
+   Note that it is up to you to define SEGMENT_SIZE
+   on machines not listed here.  */
+#if defined(vax) || defined(hp300) || defined(pyr)
+#define SEGMENT_SIZE page_size
+#endif
+#ifdef	sony
+#define	SEGMENT_SIZE	0x2000
+#endif	/* Sony.  */
+#ifdef is68k
+#define SEGMENT_SIZE 0x20000
+#endif
+#if defined(m68k) && defined(PORTAR)
+#define PAGE_SIZE 0x400
+#define SEGMENT_SIZE PAGE_SIZE
+#endif
+
+#if !defined(SEGMENT_SIZE)
+#ifdef linux
+#if defined(__i386__) || defined(__mc68000__)
+#define SEGMENT_SIZE	1024
+#elif defined(__sparc__)
+#define SEGMENT_SIZE    0x2000
+#else
+#if defined(PAGE_SIZE)
+#define SEGMENT_SIZE	PAGE_SIZE
+#endif
+#endif
+#endif
+#endif
+
+#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
+
+#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
+
+#ifndef N_DATADDR
+#define N_DATADDR(x) \
+    (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \
+     : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
+#endif
+
+/* Address of bss segment in memory after it is loaded.  */
+#if !defined (N_BSSADDR)
+#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
+#endif
+
+#if !defined (N_NLIST_DECLARED)
+struct nlist {
+  union {
+    char *n_name;
+    struct nlist *n_next;
+    long n_strx;
+  } n_un;
+  unsigned char n_type;
+  char n_other;
+  short n_desc;
+  unsigned long n_value;
+};
+#endif /* no N_NLIST_DECLARED.  */
+
+#if !defined (N_UNDF)
+#define N_UNDF 0
+#endif
+#if !defined (N_ABS)
+#define N_ABS 2
+#endif
+#if !defined (N_TEXT)
+#define N_TEXT 4
+#endif
+#if !defined (N_DATA)
+#define N_DATA 6
+#endif
+#if !defined (N_BSS)
+#define N_BSS 8
+#endif
+#if !defined (N_FN)
+#define N_FN 15
+#endif
+
+#if !defined (N_EXT)
+#define N_EXT 1
+#endif
+#if !defined (N_TYPE)
+#define N_TYPE 036
+#endif
+#if !defined (N_STAB)
+#define N_STAB 0340
+#endif
+
+/* The following type indicates the definition of a symbol as being
+   an indirect reference to another symbol.  The other symbol
+   appears as an undefined reference, immediately following this symbol.
+
+   Indirection is asymmetrical.  The other symbol's value will be used
+   to satisfy requests for the indirect symbol, but not vice versa.
+   If the other symbol does not have a definition, libraries will
+   be searched to find a definition.  */
+#define N_INDR 0xa
+
+/* The following symbols refer to set elements.
+   All the N_SET[ATDB] symbols with the same name form one set.
+   Space is allocated for the set in the text section, and each set
+   element's value is stored into one word of the space.
+   The first word of the space is the length of the set (number of elements).
+
+   The address of the set is made into an N_SETV symbol
+   whose name is the same as the name of the set.
+   This symbol acts like a N_DATA global symbol
+   in that it can satisfy undefined external references.  */
+
+/* These appear as input to LD, in a .o file.  */
+#define	N_SETA	0x14		/* Absolute set element symbol */
+#define	N_SETT	0x16		/* Text set element symbol */
+#define	N_SETD	0x18		/* Data set element symbol */
+#define	N_SETB	0x1A		/* Bss set element symbol */
+
+/* This is output from LD.  */
+#define N_SETV	0x1C		/* Pointer to set vector in data area.  */
+
+#if !defined (N_RELOCATION_INFO_DECLARED)
+/* This structure describes a single relocation to be performed.
+   The text-relocation section of the file is a vector of these structures,
+   all of which apply to the text section.
+   Likewise, the data-relocation section applies to the data section.  */
+
+struct relocation_info
+{
+  /* Address (within segment) to be relocated.  */
+  int r_address;
+  /* The meaning of r_symbolnum depends on r_extern.  */
+  unsigned int r_symbolnum:24;
+  /* Nonzero means value is a pc-relative offset
+     and it should be relocated for changes in its own address
+     as well as for changes in the symbol or section specified.  */
+  unsigned int r_pcrel:1;
+  /* Length (as exponent of 2) of the field to be relocated.
+     Thus, a value of 2 indicates 1<<2 bytes.  */
+  unsigned int r_length:2;
+  /* 1 => relocate with value of symbol.
+          r_symbolnum is the index of the symbol
+	  in file's the symbol table.
+     0 => relocate with the address of a segment.
+          r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
+	  (the N_EXT bit may be set also, but signifies nothing).  */
+  unsigned int r_extern:1;
+  /* Four bits that aren't used, but when writing an object file
+     it is desirable to clear them.  */
+#ifdef NS32K
+  unsigned r_bsr:1;
+  unsigned r_disp:1;
+  unsigned r_pad:2;
+#else
+  unsigned int r_pad:4;
+#endif
+};
+#endif /* no N_RELOCATION_INFO_DECLARED.  */
+
+
+#endif /* __A_OUT_GNU_H__ */

Copied: trunk/openbios-devel/include/arch/common/elf.h (from r692, trunk/openbios-devel/include/openbios/elf.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/include/arch/common/elf.h	Sun Mar 14 18:06:20 2010	(r694, copy of r692, trunk/openbios-devel/include/openbios/elf.h)
@@ -0,0 +1,227 @@
+#ifndef ELF_H
+#define ELF_H
+
+#define EI_NIDENT	16	/* Size of e_ident array. */
+
+/* Values for e_type. */
+#define ET_NONE		0	/* No file type */
+#define ET_REL		1	/* Relocatable file */
+#define ET_EXEC		2	/* Executable file */
+#define ET_DYN		3	/* Shared object file */
+#define ET_CORE		4	/* Core file */
+
+/* Values for e_machine (architecute). */
+#define EM_NONE		 0		/* No machine */
+#define EM_M32		 1		/* AT&T WE 32100 */
+#define EM_SPARC	 2		/* SUN SPARC */
+#define EM_386		 3		/* Intel 80386+ */
+#define EM_68K		 4		/* Motorola m68k family */
+#define EM_88K		 5		/* Motorola m88k family */
+#define EM_486		 6		/* Perhaps disused */
+#define EM_860		 7		/* Intel 80860 */
+#define EM_MIPS		 8		/* MIPS R3000 big-endian */
+#define EM_S370		 9		/* IBM System/370 */
+#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */
+
+#define EM_PARISC	15		/* HPPA */
+#define EM_VPP500	17		/* Fujitsu VPP500 */
+#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */
+#define EM_960		19		/* Intel 80960 */
+#define EM_PPC		20		/* PowerPC */
+#define EM_PPC64	21		/* PowerPC 64-bit */
+#define EM_S390		22		/* IBM S390 */
+
+#define EM_V800		36		/* NEC V800 series */
+#define EM_FR20		37		/* Fujitsu FR20 */
+#define EM_RH32		38		/* TRW RH-32 */
+#define EM_RCE		39		/* Motorola RCE */
+#define EM_ARM		40		/* ARM */
+#define EM_FAKE_ALPHA	41		/* Digital Alpha */
+#define EM_SH		42		/* Hitachi SH */
+#define EM_SPARCV9	43		/* SPARC v9 64-bit */
+#define EM_TRICORE	44		/* Siemens Tricore */
+#define EM_ARC		45		/* Argonaut RISC Core */
+#define EM_H8_300	46		/* Hitachi H8/300 */
+#define EM_H8_300H	47		/* Hitachi H8/300H */
+#define EM_H8S		48		/* Hitachi H8S */
+#define EM_H8_500	49		/* Hitachi H8/500 */
+#define EM_IA_64	50		/* Intel Merced */
+#define EM_MIPS_X	51		/* Stanford MIPS-X */
+#define EM_COLDFIRE	52		/* Motorola Coldfire */
+#define EM_68HC12	53		/* Motorola M68HC12 */
+#define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/
+#define EM_PCP		55		/* Siemens PCP */
+#define EM_NCPU		56		/* Sony nCPU embeeded RISC */
+#define EM_NDR1		57		/* Denso NDR1 microprocessor */
+#define EM_STARCORE	58		/* Motorola Start*Core processor */
+#define EM_ME16		59		/* Toyota ME16 processor */
+#define EM_ST100	60		/* STMicroelectronic ST100 processor */
+#define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/
+#define EM_X86_64	62		/* AMD x86-64 architecture */
+#define EM_PDSP		63		/* Sony DSP Processor */
+
+#define EM_FX66		66		/* Siemens FX66 microcontroller */
+#define EM_ST9PLUS	67		/* STMicroelectronics ST9+ 8/16 mc */
+#define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */
+#define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */
+#define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */
+#define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */
+#define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */
+#define EM_SVX		73		/* Silicon Graphics SVx */
+#define EM_AT19		74		/* STMicroelectronics ST19 8 bit mc */
+#define EM_VAX		75		/* Digital VAX */
+#define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */
+#define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */
+#define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */
+#define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */
+#define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */
+#define EM_HUANY	81		/* Harvard University machine-independent object files */
+#define EM_PRISM	82		/* SiTera Prism */
+#define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */
+#define EM_FR30		84		/* Fujitsu FR30 */
+#define EM_D10V		85		/* Mitsubishi D10V */
+#define EM_D30V		86		/* Mitsubishi D30V */
+#define EM_V850		87		/* NEC v850 */
+#define EM_M32R		88		/* Mitsubishi M32R */
+#define EM_MN10300	89		/* Matsushita MN10300 */
+#define EM_MN10200	90		/* Matsushita MN10200 */
+#define EM_PJ		91		/* picoJava */
+#define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
+#define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
+#define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
+#define EM_NUM		95
+
+/* Values for p_type. */
+#define PT_NULL		0	/* Unused entry. */
+#define PT_LOAD		1	/* Loadable segment. */
+#define PT_DYNAMIC	2	/* Dynamic linking information segment. */
+#define PT_INTERP	3	/* Pathname of interpreter. */
+#define PT_NOTE		4	/* Auxiliary information. */
+#define PT_SHLIB	5	/* Reserved (not used). */
+#define PT_PHDR		6	/* Location of program header itself. */
+
+/* Values for p_flags. */
+#define PF_X		0x1	/* Executable. */
+#define PF_W		0x2	/* Writable. */
+#define PF_R		0x4	/* Readable. */
+
+
+#define	ELF_PROGRAM_RETURNS_BIT	0x8000000	/* e_flags bit 31 */
+
+#define EI_MAG0		0
+#define ELFMAG0		0x7f
+
+#define EI_MAG1		1
+#define ELFMAG1		'E'
+
+#define EI_MAG2		2
+#define ELFMAG2		'L'
+
+#define EI_MAG3		3
+#define ELFMAG3		'F'
+
+#define ELFMAG		"\177ELF"
+
+#define EI_CLASS	4	/* File class byte index */
+#define ELFCLASSNONE	0	/* Invalid class */
+#define ELFCLASS32	1	/* 32-bit objects */
+#define ELFCLASS64	2	/* 64-bit objects */
+
+#define EI_DATA		5	/* Data encodeing byte index */
+#define ELFDATANONE	0	/* Invalid data encoding */
+#define ELFDATA2LSB	1	/* 2's complement little endian */
+#define ELFDATA2MSB	2	/* 2's complement big endian */
+
+#define EI_VERSION	6	/* File version byte index */
+				/* Value must be EV_CURRENT */
+
+#define EV_NONE		0	/* Invalid ELF Version */
+#define EV_CURRENT	1	/* Current version */
+
+#define ELF32_PHDR_SIZE (8*4)	/* Size of an elf program header */
+
+#ifndef __ASSEMBLY__
+#include "asm/types.h"
+/*
+ * ELF definitions common to all 32-bit architectures.
+ */
+
+typedef uint32_t	Elf32_Addr;
+typedef uint16_t	Elf32_Half;
+typedef uint32_t	Elf32_Off;
+typedef int32_t		Elf32_Sword;
+typedef uint32_t	Elf32_Word;
+typedef uint32_t	Elf32_Size;
+
+typedef uint64_t	Elf64_Addr;
+typedef uint16_t	Elf64_Half;
+typedef uint64_t	Elf64_Off;
+typedef int32_t		Elf64_Sword;
+typedef uint32_t	Elf64_Word;
+typedef uint64_t	Elf64_Size;
+
+/*
+ * ELF header.
+ */
+typedef struct {
+	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
+	Elf32_Half	e_type;		/* File type. */
+	Elf32_Half	e_machine;	/* Machine architecture. */
+	Elf32_Word	e_version;	/* ELF format version. */
+	Elf32_Addr	e_entry;	/* Entry point. */
+	Elf32_Off	e_phoff;	/* Program header file offset. */
+	Elf32_Off	e_shoff;	/* Section header file offset. */
+	Elf32_Word	e_flags;	/* Architecture-specific flags. */
+	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */
+	Elf32_Half	e_phentsize;	/* Size of program header entry. */
+	Elf32_Half	e_phnum;	/* Number of program header entries. */
+	Elf32_Half	e_shentsize;	/* Size of section header entry. */
+	Elf32_Half	e_shnum;	/* Number of section header entries. */
+	Elf32_Half	e_shstrndx;	/* Section name strings section. */
+} Elf32_Ehdr;
+
+typedef struct {
+	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
+	Elf64_Half	e_type;		/* File type. */
+	Elf64_Half	e_machine;	/* Machine architecture. */
+	Elf64_Word	e_version;	/* ELF format version. */
+	Elf64_Addr	e_entry;	/* Entry point. */
+	Elf64_Off	e_phoff;	/* Program header file offset. */
+	Elf64_Off	e_shoff;	/* Section header file offset. */
+	Elf64_Word	e_flags;	/* Architecture-specific flags. */
+	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */
+	Elf64_Half	e_phentsize;	/* Size of program header entry. */
+	Elf64_Half	e_phnum;	/* Number of program header entries. */
+	Elf64_Half	e_shentsize;	/* Size of section header entry. */
+	Elf64_Half	e_shnum;	/* Number of section header entries. */
+	Elf64_Half	e_shstrndx;	/* Section name strings section. */
+} Elf64_Ehdr;
+
+/*
+ * Program header.
+ */
+typedef struct {
+	Elf32_Word	p_type;		/* Entry type. */
+	Elf32_Off	p_offset;	/* File offset of contents. */
+	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */
+	Elf32_Addr	p_paddr;	/* Physical address. */
+	Elf32_Size	p_filesz;	/* Size of contents in file. */
+	Elf32_Size	p_memsz;	/* Size of contents in memory. */
+	Elf32_Word	p_flags;	/* Access permission flags. */
+	Elf32_Size	p_align;	/* Alignment in memory and file. */
+} Elf32_Phdr;
+
+typedef struct {
+	Elf64_Word	p_type;		/* Entry type. */
+	Elf64_Word	p_flags;	/* Access permission flags. */
+	Elf64_Off	p_offset;	/* File offset of contents. */
+	Elf64_Addr	p_vaddr;	/* Virtual address (not used). */
+	Elf64_Addr	p_paddr;	/* Physical address. */
+	Elf64_Size	p_filesz;	/* Size of contents in file. */
+	Elf64_Size	p_memsz;	/* Size of contents in memory. */
+	Elf64_Size	p_align;	/* Alignment in memory and file. */
+} Elf64_Phdr;
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* ELF_H */

Copied: trunk/openbios-devel/include/arch/common/elf_boot.h (from r692, trunk/openbios-devel/include/elf_boot.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/include/arch/common/elf_boot.h	Sun Mar 14 18:06:20 2010	(r694, copy of r692, trunk/openbios-devel/include/elf_boot.h)
@@ -0,0 +1,105 @@
+#ifndef ELF_BOOT_H
+#define ELF_BOOT_H
+
+
+/* This defines the structure of a table of parameters useful for ELF
+ * bootable images.  These parameters are all passed and generated
+ * by the bootloader to the booted image.  For simplicity and
+ * consistency the Elf Note format is reused.
+ *
+ * All of the information must be Position Independent Data.
+ * That is it must be safe to relocate the whole ELF boot parameter
+ * block without changing the meaning or correctnes of the data.
+ * Additionally it must be safe to permute the order of the ELF notes
+ * to any possible permutation without changing the meaning or correctness
+ * of the data.
+ *
+ */
+
+#define ELF_BHDR_MAGIC		0x0E1FB007
+
+#ifndef __ASSEMBLY__
+typedef uint16_t Elf_Half;
+typedef uint32_t Elf_Word;
+
+/*
+ * Elf boot notes...
+ */
+
+typedef struct Elf_Bhdr
+{
+	Elf_Word b_signature; /* "0x0E1FB007" */
+	Elf_Word b_size;
+	Elf_Half b_checksum;
+	Elf_Half b_records;
+} Elf_Bhdr;
+
+/*
+ * ELF Notes.
+ */
+
+typedef struct Elf_Nhdr
+{
+	Elf_Word n_namesz;		/* Length of the note's name.  */
+	Elf_Word n_descsz;		/* Length of the note's descriptor.  */
+	Elf_Word n_type;		/* Type of the note.  */
+} Elf_Nhdr;
+
+#endif /* __ASSEMBLY__ */
+
+/* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
+#define ELF_NOTE_BOOT		"ELFBoot"
+
+#define EIN_PROGRAM_NAME	0x00000001
+/* The program in this ELF file */
+#define EIN_PROGRAM_VERSION	0x00000002
+/* The version of the program in this ELF file */
+#define EIN_PROGRAM_CHECKSUM	0x00000003
+/* ip style checksum of the memory image. */
+
+
+/* Linux image notes for booting... The name for all of these is Linux */
+
+#define LIN_COMMAND_LINE	0x00000001
+/* The command line to pass to the loaded kernel. */
+#define LIN_ROOT_DEV		0x00000002
+/* The root dev to pass to the loaded kernel. */
+#define LIN_RAMDISK_FLAGS	0x00000003
+/* Various old ramdisk flags */
+#define LIN_INITRD_START	0x00000004
+/* Start of the ramdisk in bytes */
+#define LIN_INITRD_SIZE		0x00000005
+/* Size of the ramdisk in bytes */
+
+/* Notes that are passed to a loaded image */
+/* For the standard elf boot notes n_namesz must be zero */
+#define EBN_FIRMWARE_TYPE	0x00000001
+/* ASCIZ name of the platform firmware. */
+#define EBN_BOOTLOADER_NAME	0x00000002
+/* This specifies just the ASCIZ name of the bootloader */
+#define EBN_BOOTLOADER_VERSION	0x00000003
+/* This specifies the version of the bootloader as an ASCIZ string */
+#define EBN_COMMAND_LINE	0x00000004
+/* This specifies a command line that can be set by user interaction,
+ * and is provided as a free form ASCIZ string to the loaded image.
+ */
+#define EBN_NOP			0x00000005
+/* A note nop note has no meaning, useful for inserting explicit padding */
+#define EBN_LOADED_IMAGE	0x00000006
+/* An ASCIZ string naming the loaded image */
+
+
+/* Etherboot specific notes */
+#define EB_PARAM_NOTE		"Etherboot"
+#define EB_IA64_SYSTAB		0x00000001
+#define EB_IA64_MEMMAP		0x00000002
+#define EB_IA64_FPSWA		0x00000003
+#define EB_IA64_CONINFO		0x00000004
+#define EB_BOOTP_DATA		0x00000005
+#define EB_HEADER		0x00000006
+#define EB_IA64_IMAGE_HANDLE	0x00000007
+#define EB_I386_MEMMAP		0x00000008
+
+extern const struct elf_image_note elf_image_notes;
+
+#endif /* ELF_BOOT_H */

Copied: trunk/openbios-devel/include/arch/common/xcoff.h (from r692, trunk/openbios-devel/include/openbios/xcoff.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/openbios-devel/include/arch/common/xcoff.h	Sun Mar 14 18:06:20 2010	(r694, copy of r692, trunk/openbios-devel/include/openbios/xcoff.h)
@@ -0,0 +1,98 @@
+#ifndef XCOFF_H
+#define XCOFF_H
+
+/* XCOFF executable loader */
+
+typedef struct COFF_filehdr_t {
+	uint16_t f_magic;	/* magic number			*/
+	uint16_t f_nscns;	/* number of sections		*/
+	uint32_t f_timdat;	/* time & date stamp		*/
+	uint32_t f_symptr;	/* file pointer to symtab	*/
+	uint32_t f_nsyms;	/* number of symtab entries	*/
+	uint16_t f_opthdr;	/* sizeof(optional hdr)		*/
+	uint16_t f_flags;	/* flags			*/
+} COFF_filehdr_t;
+
+/* IBM RS/6000 */
+
+#define U802WRMAGIC	 0x02DA	/* writeable text segments **chh**	  */
+#define U802ROMAGIC	 0x02DF	/* readonly sharable text segments	  */
+#define U802TOCMAGIC	 0x02E1	/* readonly text segments and TOC	   */
+#define U802TOMAGIC	 0x01DF
+
+/*
+ *   Bits for f_flags:
+ *
+ *	F_RELFLG	relocation info stripped from file
+ *	F_EXEC		file is executable  (i.e. no unresolved external
+ *			references)
+ *	F_LNNO		line numbers stripped from file
+ *	F_LSYMS		local symbols stripped from file
+ *	F_MINMAL	this is a minimal object file (".m") output of fextract
+ *	F_UPDATE	this is a fully bound update file, output of ogen
+ *	F_SWABD		this file has had its bytes swabbed (in names)
+ *	F_AR16WR	this file has the byte ordering of an AR16WR
+ *			(e.g. 11/70) machine
+ *	F_AR32WR	this file has the byte ordering of an AR32WR machine
+ *			(e.g. vax and iNTEL 386)
+ *	F_AR32W		this file has the byte ordering of an AR32W machine
+ *			(e.g. 3b,maxi)
+ *	F_PATCH		file contains "patch" list in optional header
+ *	F_NODF		(minimal file only) no decision functions for
+ *			replaced functions
+ */
+
+#define	COFF_F_RELFLG		0000001
+#define	COFF_F_EXEC		0000002
+#define	COFF_F_LNNO		0000004
+#define	COFF_F_LSYMS		0000010
+#define	COFF_F_MINMAL		0000020
+#define	COFF_F_UPDATE		0000040
+#define	COFF_F_SWABD		0000100
+#define	COFF_F_AR16WR		0000200
+#define	COFF_F_AR32WR		0000400
+#define	COFF_F_AR32W		0001000
+#define	COFF_F_PATCH		0002000
+#define	COFF_F_NODF		0002000
+
+typedef struct COFF_aouthdr_t {
+	uint16_t magic;	     /* type of file			      */
+	uint16_t vstamp;     /* version stamp			      */
+	uint32_t tsize;	     /* text size in bytes, padded to FW bdry */
+	uint32_t dsize;	     /* initialized data "  "		      */
+	uint32_t bsize;	     /* uninitialized data "   "	      */
+	uint32_t entry;	     /* entry pt.			      */
+	uint32_t text_start; /* base of text used for this file	      */
+	uint32_t data_start; /* base of data used for this file	      */
+	uint32_t o_toc;	     /* address of TOC			      */
+	uint16_t o_snentry;  /* section number of entry point	      */
+	uint16_t o_sntext;   /* section number of .text section	      */
+	uint16_t o_sndata;   /* section number of .data section	      */
+	uint16_t o_sntoc;    /* section number of TOC		      */
+	uint16_t o_snloader; /* section number of .loader section     */
+	uint16_t o_snbss;    /* section number of .bss section	      */
+	uint16_t o_algntext; /* .text alignment			      */
+	uint16_t o_algndata; /* .data alignment			      */
+	uint16_t o_modtype;  /* module type (??)		      */
+	uint16_t o_cputype;  /* cpu type			      */
+	uint32_t o_maxstack; /* max stack size (??)		      */
+	uint32_t o_maxdata;  /* max data size (??)		      */
+	char o_resv2[12];    /* reserved			      */
+} COFF_aouthdr_t;
+
+#define AOUT_MAGIC	0x010b
+
+typedef struct COFF_scnhdr_t {
+	char s_name[8];		/* section name				*/
+	uint32_t s_paddr;	/* physical address, aliased s_nlib     */
+	uint32_t s_vaddr;	/* virtual address			*/
+	uint32_t s_size;	/* section size				*/
+	uint32_t s_scnptr;	/* file ptr to raw data for section     */
+	uint32_t s_relptr;	/* file ptr to relocation		*/
+	uint32_t s_lnnoptr;	/* file ptr to line numbers		*/
+	uint16_t s_nreloc;	/* number of relocation entries		*/
+	uint16_t s_nlnno;	/* number of line number entries	*/
+	uint32_t s_flags;	/* flags				*/
+} COFF_scnhdr_t;
+
+#endif /* XCOFF_H */

Modified: trunk/openbios-devel/include/libopenbios/elfload.h
==============================================================================
--- trunk/openbios-devel/include/libopenbios/elfload.h	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/include/libopenbios/elfload.h	Sun Mar 14 18:06:20 2010	(r694)
@@ -17,7 +17,7 @@
 #ifndef _H_ELFLOAD
 #define _H_ELFLOAD
 
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
 
 extern int		is_elf( int fd, int offs );

Modified: trunk/openbios-devel/libopenbios/elf_info.c
==============================================================================
--- trunk/openbios-devel/libopenbios/elf_info.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/libopenbios/elf_info.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -1,6 +1,6 @@
 /* Support for ELF Boot Proposal as a boot image */
 #include "openbios/config.h"
-#include "elf_boot.h"
+#include "arch/common/elf_boot.h"
 #include "libopenbios/sys_info.h"
 #include "asm/io.h"
 #include "libopenbios/ipchecksum.h"

Modified: trunk/openbios-devel/libopenbios/elfload.c
==============================================================================
--- trunk/openbios-devel/libopenbios/elfload.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/libopenbios/elfload.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -33,7 +33,7 @@
 #include "libopenbios/bindings.h"
 #include "libopenbios/elfload.h"
 #include "libc/diskio.h"
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 
 #define DEBUG		0
 #define MAX_HEADERS	32

Modified: trunk/openbios-devel/packages/elf-loader.c
==============================================================================
--- trunk/openbios-devel/packages/elf-loader.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/packages/elf-loader.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -19,7 +19,7 @@
 #include "packages.h"
 #include "libopenbios/ofmem.h"
 
-#include "openbios/elf.h"
+#include "arch/common/elf.h"
 #include "asm/elf.h"
 
 /* TODO: manage ELF notes section */

Modified: trunk/openbios-devel/packages/xcoff-loader.c
==============================================================================
--- trunk/openbios-devel/packages/xcoff-loader.c	Sun Mar 14 17:09:44 2010	(r693)
+++ trunk/openbios-devel/packages/xcoff-loader.c	Sun Mar 14 18:06:20 2010	(r694)
@@ -19,7 +19,7 @@
 #include "packages.h"
 #include "libopenbios/ofmem.h"
 
-#include "openbios/xcoff.h"
+#include "arch/common/xcoff.h"
 
 //#define DEBUG_XCOFF
 



More information about the OpenBIOS mailing list