Logo Search packages:      
Sourcecode: xbox-cromwell version File versions  Download package

elf.h

#ifndef I386_BITS_ELF_H
#define I386_BITS_ELF_H

#include "cpu.h"

#ifdef CONFIG_X86_64
/* ELF Defines for the 64bit version of the current architecture */
#define EM_CURRENT_64   EM_X86_64
#define EM_CURRENT_64_PRESENT ( \
      CPU_FEATURE_P(cpu_info.x86_capability, LM) && \
      CPU_FEATURE_P(cpu_info.x86_capability, PAE) && \
      CPU_FEATURE_P(cpu_info.x86_capability, PSE))
                  
#define ELF_CHECK_X86_64_ARCH(x) \
      (EM_CURRENT_64_PRESENT && ((x).e_machine == EM_X86_64))
#define __unused_i386
#else
#define ELF_CHECK_X86_64_ARCH(x) 0
#define __unused_i386 __unused
#endif


/* ELF Defines for the current architecture */
#define     EM_CURRENT  EM_386
#define ELFDATA_CURRENT ELFDATA2LSB

#define ELF_CHECK_I386_ARCH(x) \
      (((x).e_machine == EM_386) || ((x).e_machine == EM_486))

#define ELF_CHECK_ARCH(x) \
      ((ELF_CHECK_I386_ARCH(x) || ELF_CHECK_X86_64_ARCH(x)) && \
            ((x).e_entry <= 0xffffffffUL))

#ifdef  IMAGE_FREEBSD
/*
 * FreeBSD has this rather strange "feature" of its design.
 * At some point in its evolution, FreeBSD started to rely
 * externally on private/static/debug internal symbol information.
 * That is, some of the interfaces that software uses to access
 * and work with the FreeBSD kernel are made available not
 * via the shared library symbol information (the .DYNAMIC section)
 * but rather the debug symbols.  This means that any symbol, not
 * just publicly defined symbols can be (and are) used by system
 * tools to make the system work.  (such as top, swapinfo, swapon,
 * etc)
 *
 * Even worse, however, is the fact that standard ELF loaders do
 * not know how to load the symbols since they are not within
 * an ELF PT_LOAD section.  The kernel needs these symbols to
 * operate so the following changes/additions to the boot
 * loading of EtherBoot have been made to get the kernel to load.
 * All of the changes are within IMAGE_FREEBSD such that the
 * extra/changed code only compiles when FREEBSD support is
 * enabled.
 */

/*
 * Section header for FreeBSD (debug symbol kludge!) support
 */
typedef struct {
      Elf32_Word  sh_name;    /* Section name (index into the
                                 section header string table). */
      Elf32_Word  sh_type;    /* Section type. */
      Elf32_Word  sh_flags;   /* Section flags. */
      Elf32_Addr  sh_addr;    /* Address in memory image. */
      Elf32_Off   sh_offset;  /* Offset in file. */
      Elf32_Size  sh_size;    /* Size in bytes. */
      Elf32_Word  sh_link;    /* Index of a related section. */
      Elf32_Word  sh_info;    /* Depends on section type. */
      Elf32_Size  sh_addralign;     /* Alignment in bytes. */
      Elf32_Size  sh_entsize; /* Size of each entry in section. */
} Elf32_Shdr;

/* sh_type */
#define SHT_SYMTAB      2           /* symbol table section */
#define SHT_STRTAB      3           /* string table section */

/*
 * Module information subtypes (for the metadata that we need to build)
 */
#define MODINFO_END           0x0000            /* End of list */
#define MODINFO_NAME          0x0001            /* Name of module (string) */
#define MODINFO_TYPE          0x0002            /* Type of module (string) */
#define MODINFO_METADATA      0x8000            /* Module-specfic */

#define MODINFOMD_SSYM        0x0003            /* start of symbols */
#define MODINFOMD_ESYM        0x0004            /* end of symbols */

#endif      /* IMAGE_FREEBSD */

#endif /* I386_BITS_ELF_H */

Generated by  Doxygen 1.6.0   Back to index