home *** CD-ROM | disk | FTP | other *** search
- /* ELF support for BFD.
- Copyright (C) 1991, 1992, 1993, 1994, 1996 Free Software Foundation, Inc.
-
- Written by Fred Fish @ Cygnus Support, from information published
- in "UNIX System V Release 4, Programmers Guide: ANSI C and
- Programming Support Tools".
-
- This file is part of BFD, the Binary File Descriptor library.
-
- 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; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
- /* This file is part of ELF support for BFD, and contains the portions
- that are common to both the internal and external representations.
- For example, ELFMAG0 is the byte 0x7F in both the internal (in-memory)
- and external (in-file) representations. */
-
- #ifndef _ELF_COMMON_H
- #define _ELF_COMMON_H
-
- /* Fields in e_ident[] */
-
- #define EI_MAG0 0 /* File identification byte 0 index */
- #define ELFMAG0 0x7F /* Magic number byte 0 */
-
- #define EI_MAG1 1 /* File identification byte 1 index */
- #define ELFMAG1 'E' /* Magic number byte 1 */
-
- #define EI_MAG2 2 /* File identification byte 2 index */
- #define ELFMAG2 'L' /* Magic number byte 2 */
-
- #define EI_MAG3 3 /* File identification byte 3 index */
- #define ELFMAG3 'F' /* Magic number byte 3 */
-
- #define EI_CLASS 4 /* File class */
- #define ELFCLASSNONE 0 /* Invalid class */
- #define ELFCLASS32 1 /* 32-bit objects */
- #define ELFCLASS64 2 /* 64-bit objects */
-
- #define EI_DATA 5 /* Data encoding */
- #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 */
-
- #define EI_PAD 7 /* Start of padding bytes */
-
-
- /* Values for e_type, which identifies the object file 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 */
- #define ET_LOPROC 0xFF00 /* Processor-specific */
- #define ET_HIPROC 0xFFFF /* Processor-specific */
-
- /* Values for e_machine, which identifies the architecture */
-
- #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_860 7 /* Intel 80860 */
- #define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
-
- #define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
-
- #define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */
-
- #define EM_PARISC 15 /* HPPA */
-
- #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
-
- #define EM_PPC 20 /* PowerPC */
-
- /* If it is necessary to assign new unofficial EM_* values, please pick large
- random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
- with official or non-GNU unofficial values. */
-
- /* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */
- #define EM_CYGNUS_POWERPC 0x9025
-
- /* Old version of PowerPC, this should be removed shortly. */
- #define EM_PPC_OLD 17
-
-
- /* Values for e_version */
-
- #define EV_NONE 0 /* Invalid ELF version */
- #define EV_CURRENT 1 /* Current version */
-
- /* Values for program header, p_type field */
-
- #define PT_NULL 0 /* Program header table entry unused */
- #define PT_LOAD 1 /* Loadable program segment */
- #define PT_DYNAMIC 2 /* Dynamic linking information */
- #define PT_INTERP 3 /* Program interpreter */
- #define PT_NOTE 4 /* Auxiliary information */
- #define PT_SHLIB 5 /* Reserved, unspecified semantics */
- #define PT_PHDR 6 /* Entry for header table itself */
- #define PT_LOPROC 0x70000000 /* Processor-specific */
- #define PT_HIPROC 0x7FFFFFFF /* Processor-specific */
-
- /* Program segment permissions, in program header p_flags field */
-
- #define PF_X (1 << 0) /* Segment is executable */
- #define PF_W (1 << 1) /* Segment is writable */
- #define PF_R (1 << 2) /* Segment is readable */
- #define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */
-
- /* Values for section header, sh_type field */
-
- #define SHT_NULL 0 /* Section header table entry unused */
- #define SHT_PROGBITS 1 /* Program specific (private) data */
- #define SHT_SYMTAB 2 /* Link editing symbol table */
- #define SHT_STRTAB 3 /* A string table */
- #define SHT_RELA 4 /* Relocation entries with addends */
- #define SHT_HASH 5 /* A symbol hash table */
- #define SHT_DYNAMIC 6 /* Information for dynamic linking */
- #define SHT_NOTE 7 /* Information that marks file */
- #define SHT_NOBITS 8 /* Section occupies no space in file */
- #define SHT_REL 9 /* Relocation entries, no addends */
- #define SHT_SHLIB 10 /* Reserved, unspecified semantics */
- #define SHT_DYNSYM 11 /* Dynamic linking symbol table */
- #define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */
- #define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */
- #define SHT_LOUSER 0x80000000 /* Application-specific semantics */
- #define SHT_HIUSER 0x8FFFFFFF /* Application-specific semantics */
-
- /* Values for section header, sh_flags field */
-
- #define SHF_WRITE (1 << 0) /* Writable data during execution */
- #define SHF_ALLOC (1 << 1) /* Occupies memory during execution */
- #define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */
- #define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics */
-
- /* Values of note segment descriptor types for core files. */
-
- #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
- #define NT_FPREGSET 2 /* Contains copy of fpregset struct */
- #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
-
- /* Values of note segment descriptor types for object files. */
- /* (Only for hppa right now. Should this be moved elsewhere?) */
-
- #define NT_VERSION 1 /* Contains a version string. */
-
- /* These three macros disassemble and assemble a symbol table st_info field,
- which contains the symbol binding and symbol type. The STB_ and STT_
- defines identify the binding and type. */
-
- #define ELF_ST_BIND(val) (((unsigned int)(val)) >> 4)
- #define ELF_ST_TYPE(val) ((val) & 0xF)
- #define ELF_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xF))
-
- #define STN_UNDEF 0 /* undefined symbol index */
-
- #define STB_LOCAL 0 /* Symbol not visible outside obj */
- #define STB_GLOBAL 1 /* Symbol visible outside obj */
- #define STB_WEAK 2 /* Like globals, lower precedence */
- #define STB_LOPROC 13 /* Application-specific semantics */
- #define STB_HIPROC 15 /* Application-specific semantics */
-
- #define STT_NOTYPE 0 /* Symbol type is unspecified */
- #define STT_OBJECT 1 /* Symbol is a data object */
- #define STT_FUNC 2 /* Symbol is a code object */
- #define STT_SECTION 3 /* Symbol associated with a section */
- #define STT_FILE 4 /* Symbol gives a file name */
- #define STT_LOPROC 13 /* Application-specific semantics */
- #define STT_HIPROC 15 /* Application-specific semantics */
-
- /* Special section indices, which may show up in st_shndx fields, among
- other places. */
-
- #define SHN_UNDEF 0 /* Undefined section reference */
- #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
- #define SHN_LOPROC 0xFF00 /* Begin range of appl-specific */
- #define SHN_HIPROC 0xFF1F /* End range of appl-specific */
- #define SHN_ABS 0xFFF1 /* Associated symbol is absolute */
- #define SHN_COMMON 0xFFF2 /* Associated symbol is in common */
- #define SHN_HIRESERVE 0xFFFF /* End range of reserved indices */
-
- /* relocation info handling macros */
-
- #define ELF32_R_SYM(i) ((i) >> 8)
- #define ELF32_R_TYPE(i) ((i) & 0xff)
- #define ELF32_R_INFO(s,t) (((s) << 8) + ((t) & 0xff))
-
- #define ELF64_R_SYM(i) ((i) >> 32)
- #define ELF64_R_TYPE(i) ((i) & 0xffffffff)
- #define ELF64_R_INFO(s,t) (((bfd_vma) (s) << 32) + (bfd_vma) (t))
-
- /* Dynamic section tags */
-
- #define DT_NULL 0
- #define DT_NEEDED 1
- #define DT_PLTRELSZ 2
- #define DT_PLTGOT 3
- #define DT_HASH 4
- #define DT_STRTAB 5
- #define DT_SYMTAB 6
- #define DT_RELA 7
- #define DT_RELASZ 8
- #define DT_RELAENT 9
- #define DT_STRSZ 10
- #define DT_SYMENT 11
- #define DT_INIT 12
- #define DT_FINI 13
- #define DT_SONAME 14
- #define DT_RPATH 15
- #define DT_SYMBOLIC 16
- #define DT_REL 17
- #define DT_RELSZ 18
- #define DT_RELENT 19
- #define DT_PLTREL 20
- #define DT_DEBUG 21
- #define DT_TEXTREL 22
- #define DT_JMPREL 23
- #define DT_LOPROC 0x70000000
- #define DT_HIPROC 0x7fffffff
-
- #endif /* _ELF_COMMON_H */
-