MC: Move COFF enumeration constants to llvm/Support/COFF.h, patch by Michael
[oota-llvm.git] / include / llvm / Support / ELF.h
index 8d9f693cf6c812713931d6e2d8b6ae51547eaf28..d09db3998c4596eab6879b600ab8cef8c2e9c448 100644 (file)
@@ -1,15 +1,15 @@
 //===-- llvm/Support/ELF.h - ELF constants and data structures --*- C++ -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
 //===----------------------------------------------------------------------===//
 //
 // This header contains common, non-processor-specific data structures and
 // constants for the ELF file format.
-// 
+//
 // The details of the ELF32 bits in this file are largely based on
 // the Tool Interface Standard (TIS) Executable and Linking Format
 // (ELF) Specification Version 1.2, May 1995. The ELF64 stuff is not
@@ -21,9 +21,8 @@
 #ifndef LLVM_SUPPORT_ELF_H
 #define LLVM_SUPPORT_ELF_H
 
-#include "llvm/Support/DataTypes.h"
+#include "llvm/System/DataTypes.h"
 #include <cstring>
-#include <cstdlib>
 
 namespace llvm {
 
@@ -100,6 +99,12 @@ enum {
   ET_HIPROC = 0xffff  // Processor-specific
 };
 
+// Versioning
+enum {
+  EV_NONE = 0,
+  EV_CURRENT = 1
+};
+
 // Machine architectures
 enum {
   EM_NONE = 0,  // No machine
@@ -114,7 +119,8 @@ enum {
   EM_PPC = 20,     // PowerPC
   EM_ARM = 40,     // ARM
   EM_ALPHA = 41,   // DEC Alpha
-  EM_SPARCV9 = 43  // SPARC V9
+  EM_SPARCV9 = 43, // SPARC V9
+  EM_X86_64 = 62   // AMD64
 };
 
 // Object file classes.
@@ -129,6 +135,11 @@ enum {
   ELFDATA2MSB = 2  // Big-endian object file
 };
 
+// OS ABI identification -- unused.
+enum {
+  ELFOSABI_NONE = 0
+};
+
 // Section header.
 struct Elf32_Shdr {
   Elf32_Word sh_name;      // Section name (index into string table)
@@ -137,7 +148,7 @@ struct Elf32_Shdr {
   Elf32_Addr sh_addr;      // Address where section is to be loaded
   Elf32_Off  sh_offset;    // File offset of section data, in bytes
   Elf32_Word sh_size;      // Size of section, in bytes
-  Elf32_Word sh_link;      // Section type-specific header table index link 
+  Elf32_Word sh_link;      // Section type-specific header table index link
   Elf32_Word sh_info;      // Section type-specific extra information
   Elf32_Word sh_addralign; // Section address alignment
   Elf32_Word sh_entsize;   // Size of records contained within the section
@@ -204,7 +215,7 @@ struct Elf32_Sym {
   unsigned char st_info;  // Symbol's type and binding attributes
   unsigned char st_other; // Must be zero; reserved
   Elf32_Half    st_shndx; // Which section (header table index) it's defined in
-  
+
   // These accessors and mutators correspond to the ELF32_ST_BIND,
   // ELF32_ST_TYPE, and ELF32_ST_INFO macros defined in the ELF specification:
   unsigned char getBinding () const { return st_info >> 4; }
@@ -238,9 +249,9 @@ enum {
 
 // Relocation entry, without explicit addend.
 struct Elf32_Rel {
-  Elf32_Addr r_offset; // Location (file byte offset, or program virtual addr) 
+  Elf32_Addr r_offset; // Location (file byte offset, or program virtual addr)
   Elf32_Word r_info;   // Symbol table index and type of relocation to apply
-  
+
   // These accessors and mutators correspond to the ELF32_R_SYM, ELF32_R_TYPE,
   // and ELF32_R_INFO macros defined in the ELF specification:
   Elf32_Word getSymbol () const { return (r_info >> 8); }
@@ -254,10 +265,10 @@ struct Elf32_Rel {
 
 // Relocation entry with explicit addend.
 struct Elf32_Rela {
-  Elf32_Addr  r_offset; // Location (file byte offset, or program virtual addr)     
+  Elf32_Addr  r_offset; // Location (file byte offset, or program virtual addr)
   Elf32_Word  r_info;   // Symbol table index and type of relocation to apply
   Elf32_Sword r_addend; // Compute value for relocatable field by adding this
-  
+
   // These accessors and mutators correspond to the ELF32_R_SYM, ELF32_R_TYPE,
   // and ELF32_R_INFO macros defined in the ELF specification:
   Elf32_Word getSymbol () const { return (r_info >> 8); }
@@ -281,6 +292,7 @@ struct Elf32_Phdr {
   Elf32_Word p_align;  // Segment alignment constraint
 };
 
+// Segment types.
 enum {
   PT_NULL    = 0, // Unused segment.
   PT_LOAD    = 1, // Loadable segment.
@@ -293,6 +305,14 @@ enum {
   PT_HIPROC  = 0x7fffffff  // Highest processor-specific program hdr entry type.
 };
 
+// Segment flag bits.
+enum {
+  PF_X        = 1,         // Execute
+  PF_W        = 2,         // Write
+  PF_R        = 4,         // Read
+  PF_MASKPROC = 0xf0000000 // Unspecified
+};
+
 } // end namespace ELF
 
 } // end namespace llvm