]>
Commit | Line | Data |
---|---|---|
2d996e5d JG |
1 | /* ELF support for BFD. |
2 | Copyright (C) 1991 Free Software Foundation, Inc. | |
3 | ||
4 | Written by Fred Fish @ Cygnus Support, from information published | |
5 | in "UNIX System V Release 4, Programmers Guide: ANSI C and | |
6 | Programming Support Tools". | |
7 | ||
8 | This file is part of BFD, the Binary File Descriptor library. | |
9 | ||
10 | This program is free software; you can redistribute it and/or modify | |
11 | it under the terms of the GNU General Public License as published by | |
12 | the Free Software Foundation; either version 2 of the License, or | |
13 | (at your option) any later version. | |
14 | ||
15 | This program is distributed in the hope that it will be useful, | |
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | GNU General Public License for more details. | |
19 | ||
20 | You should have received a copy of the GNU General Public License | |
21 | along with this program; if not, write to the Free Software | |
22 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
23 | ||
24 | ||
25 | /* This file is part of ELF support for BFD, and contains the portions | |
26 | that are common to both the internal and external representations. | |
27 | For example, ELFMAG0 is the byte 0x7F in both the internal (in-memory) | |
28 | and external (in-file) representations. */ | |
29 | ||
30 | ||
31 | /* Fields in e_ident[] */ | |
32 | ||
33 | #define EI_MAG0 0 /* File identification byte 0 index */ | |
34 | #define ELFMAG0 0x7F /* Magic number byte 0 */ | |
35 | ||
36 | #define EI_MAG1 1 /* File identification byte 1 index */ | |
37 | #define ELFMAG1 'E' /* Magic number byte 1 */ | |
38 | ||
39 | #define EI_MAG2 2 /* File identification byte 2 index */ | |
40 | #define ELFMAG2 'L' /* Magic number byte 2 */ | |
41 | ||
42 | #define EI_MAG3 3 /* File identification byte 3 index */ | |
43 | #define ELFMAG3 'F' /* Magic number byte 3 */ | |
44 | ||
45 | #define EI_CLASS 4 /* File class */ | |
46 | #define ELFCLASSNONE 0 /* Invalid class */ | |
47 | #define ELFCLASS32 1 /* 32-bit objects */ | |
48 | #define ELFCLASS64 2 /* 64-bit objects */ | |
49 | ||
50 | #define EI_DATA 5 /* Data encoding */ | |
51 | #define ELFDATANONE 0 /* Invalid data encoding */ | |
52 | #define ELFDATA2LSB 1 /* 2's complement, little endian */ | |
53 | #define ELFDATA2MSB 2 /* 2's complement, big endian */ | |
54 | ||
55 | #define EI_VERSION 6 /* File version */ | |
56 | ||
57 | #define EI_PAD 7 /* Start of padding bytes */ | |
58 | ||
59 | ||
60 | /* Values for e_type, which identifies the object file type */ | |
61 | ||
62 | #define ET_NONE 0 /* No file type */ | |
63 | #define ET_REL 1 /* Relocatable file */ | |
64 | #define ET_EXEC 2 /* Executable file */ | |
65 | #define ET_DYN 3 /* Shared object file */ | |
66 | #define ET_CORE 4 /* Core file */ | |
67 | #define ET_LOPROC 0xFF00 /* Processor-specific */ | |
68 | #define ET_HIPROC 0xFFFF /* Processor-specific */ | |
69 | ||
70 | /* Values for e_machine, which identifies the architecture */ | |
71 | ||
72 | #define EM_NONE 0 /* No machine */ | |
73 | #define EM_M32 1 /* AT&T WE 32100 */ | |
74 | #define EM_SPARC 2 /* SUN SPARC */ | |
75 | #define EM_386 3 /* Intel 80386 */ | |
76 | #define EM_68K 4 /* Motorola m68k family */ | |
77 | #define EM_88K 5 /* Motorola m88k family */ | |
78 | #define EM_860 6 /* Intel 80860 */ | |
79 | ||
80 | /* Values for e_version */ | |
81 | ||
82 | #define EV_NONE 0 /* Invalid ELF version */ | |
83 | #define EV_CURRENT 1 /* Current version */ | |
84 | ||
85 | /* Values for program header, p_type field */ | |
86 | ||
87 | #define PT_NULL 0 /* Program header table entry unused */ | |
88 | #define PT_LOAD 1 /* Loadable program segment */ | |
89 | #define PT_DYNAMIC 2 /* Dynamic linking information */ | |
90 | #define PT_INTERP 3 /* Program interpreter */ | |
91 | #define PT_NOTE 4 /* Auxiliary information */ | |
92 | #define PT_SHLIB 5 /* Reserved, unspecified semantics */ | |
93 | #define PT_PHDR 6 /* Entry for header table itself */ | |
94 | #define PT_LOPROC 0x70000000 /* Processor-specific */ | |
95 | #define PT_HIPROC 0x7FFFFFFF /* Processor-specific */ | |
96 | ||
97 | /* Program segment permissions, in program header p_flags field */ | |
98 | ||
99 | #define PF_X (1 << 0) /* Segment is executable */ | |
100 | #define PF_W (1 << 1) /* Segment is writable */ | |
101 | #define PF_R (1 << 2) /* Segment is readable */ | |
102 | #define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */ | |
103 | ||
104 | /* Values for section header, sh_type field */ | |
105 | ||
106 | #define SHT_NULL 0 /* Section header table entry unused */ | |
107 | #define SHT_PROGBITS 1 /* Program specific (private) data */ | |
108 | #define SHT_SYMTAB 2 /* Link editing symbol table */ | |
109 | #define SHT_STRTAB 3 /* A string table */ | |
110 | #define SHT_RELA 4 /* Relocation entries with addends */ | |
111 | #define SHT_HASH 5 /* A symbol hash table */ | |
112 | #define SHT_DYNAMIC 6 /* Information for dynamic linking */ | |
113 | #define SHT_NOTE 7 /* Information that marks file */ | |
114 | #define SHT_NOBITS 8 /* Section occupies no space in file */ | |
115 | #define SHT_REL 9 /* Relocation entries, no addends */ | |
116 | #define SHT_SHLIB 10 /* Reserved, unspecified semantics */ | |
117 | #define SHT_DYNSYM 11 /* Dynamic linking symbol table */ | |
118 | #define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */ | |
119 | #define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */ | |
120 | #define SHT_LOUSER 0x80000000 /* Application-specific semantics */ | |
121 | #define SHT_HIUSER 0x8FFFFFFF /* Application-specific semantics */ | |
122 | ||
123 | /* Values for section header, sh_flags field */ | |
124 | ||
125 | #define SHF_WRITE (1 << 0) /* Writable data during execution */ | |
126 | #define SHF_ALLOC (1 << 1) /* Occupies memory during execution */ | |
127 | #define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */ | |
128 | #define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics */ | |
d6fee238 FF |
129 | |
130 | /* Values of note segment descriptor types for core files. */ | |
131 | ||
132 | #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ | |
133 | #define NT_FPREGSET 2 /* Contains copy of fpregset struct */ | |
134 | #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ |