File: /usr/src/linux/include/linux/elf.h

1     #ifndef _LINUX_ELF_H
2     #define _LINUX_ELF_H
3     
4     #include <linux/types.h>
5     #include <asm/elf.h>
6     
7     /* 32-bit ELF base types. */
8     typedef __u32	Elf32_Addr;
9     typedef __u16	Elf32_Half;
10     typedef __u32	Elf32_Off;
11     typedef __s32	Elf32_Sword;
12     typedef __u32	Elf32_Word;
13     
14     /* 64-bit ELF base types. */
15     typedef __u64	Elf64_Addr;
16     typedef __u16	Elf64_Half;
17     typedef __s16	Elf64_SHalf;
18     typedef __u64	Elf64_Off;
19     typedef __s32	Elf64_Sword;
20     typedef __u32	Elf64_Word;
21     typedef __u64	Elf64_Xword;
22     typedef __s64	Elf64_Sxword;
23     
24     /* These constants are for the segment types stored in the image headers */
25     #define PT_NULL    0
26     #define PT_LOAD    1
27     #define PT_DYNAMIC 2
28     #define PT_INTERP  3
29     #define PT_NOTE    4
30     #define PT_SHLIB   5
31     #define PT_PHDR    6
32     #define PT_LOPROC  0x70000000
33     #define PT_HIPROC  0x7fffffff
34     #define PT_MIPS_REGINFO		0x70000000
35     
36     /* Flags in the e_flags field of the header */
37     #define EF_MIPS_NOREORDER 0x00000001
38     #define EF_MIPS_PIC       0x00000002
39     #define EF_MIPS_CPIC      0x00000004
40     #define EF_MIPS_ARCH      0xf0000000
41     
42     /* These constants define the different elf file types */
43     #define ET_NONE   0
44     #define ET_REL    1
45     #define ET_EXEC   2
46     #define ET_DYN    3
47     #define ET_CORE   4
48     #define ET_LOPROC 0xff00
49     #define ET_HIPROC 0xffff
50     
51     /* These constants define the various ELF target machines */
52     #define EM_NONE  0
53     #define EM_M32   1
54     #define EM_SPARC 2
55     #define EM_386   3
56     #define EM_68K   4
57     #define EM_88K   5
58     #define EM_486   6   /* Perhaps disused */
59     #define EM_860   7
60     
61     #define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */
62     
63     #define EM_MIPS_RS4_BE 10	/* MIPS R4000 big-endian */
64     
65     #define EM_PARISC      15	/* HPPA */
66     
67     #define EM_SPARC32PLUS 18	/* Sun's "v8plus" */
68     
69     #define EM_PPC	       20	/* PowerPC */
70     #define EM_PPC64       21       /* PowerPC64 */
71     
72     #define EM_SH	       42	/* SuperH */
73     
74     #define EM_SPARCV9     43	/* SPARC v9 64-bit */
75     
76     #define EM_IA_64	50	/* HP/Intel IA-64 */
77     
78     #define EM_X8664	62	/* AMD x86-64 */
79     
80     #define EM_S390		22	/* IBM S/390 */
81     
82     #define EM_CRIS         76      /* Axis Communications 32-bit embedded processor */
83     
84     /*
85      * This is an interim value that we will use until the committee comes
86      * up with a final number.
87      */
88     #define EM_ALPHA	0x9026
89     
90     /*
91      * This is the old interim value for S/390 architecture
92      */
93     #define EM_S390_OLD     0xA390
94     
95     /* This is the info that is needed to parse the dynamic section of the file */
96     #define DT_NULL		0
97     #define DT_NEEDED	1
98     #define DT_PLTRELSZ	2
99     #define DT_PLTGOT	3
100     #define DT_HASH		4
101     #define DT_STRTAB	5
102     #define DT_SYMTAB	6
103     #define DT_RELA		7
104     #define DT_RELASZ	8
105     #define DT_RELAENT	9
106     #define DT_STRSZ	10
107     #define DT_SYMENT	11
108     #define DT_INIT		12
109     #define DT_FINI		13
110     #define DT_SONAME	14
111     #define DT_RPATH 	15
112     #define DT_SYMBOLIC	16
113     #define DT_REL	        17
114     #define DT_RELSZ	18
115     #define DT_RELENT	19
116     #define DT_PLTREL	20
117     #define DT_DEBUG	21
118     #define DT_TEXTREL	22
119     #define DT_JMPREL	23
120     #define DT_LOPROC	0x70000000
121     #define DT_HIPROC	0x7fffffff
122     #define DT_MIPS_RLD_VERSION	0x70000001
123     #define DT_MIPS_TIME_STAMP	0x70000002
124     #define DT_MIPS_ICHECKSUM	0x70000003
125     #define DT_MIPS_IVERSION	0x70000004
126     #define DT_MIPS_FLAGS		0x70000005
127       #define RHF_NONE		  0
128       #define RHF_HARDWAY		  1
129       #define RHF_NOTPOT		  2
130     #define DT_MIPS_BASE_ADDRESS	0x70000006
131     #define DT_MIPS_CONFLICT	0x70000008
132     #define DT_MIPS_LIBLIST		0x70000009
133     #define DT_MIPS_LOCAL_GOTNO	0x7000000a
134     #define DT_MIPS_CONFLICTNO	0x7000000b
135     #define DT_MIPS_LIBLISTNO	0x70000010
136     #define DT_MIPS_SYMTABNO	0x70000011
137     #define DT_MIPS_UNREFEXTNO	0x70000012
138     #define DT_MIPS_GOTSYM		0x70000013
139     #define DT_MIPS_HIPAGENO	0x70000014
140     #define DT_MIPS_RLD_MAP		0x70000016
141     
142     /* This info is needed when parsing the symbol table */
143     #define STB_LOCAL  0
144     #define STB_GLOBAL 1
145     #define STB_WEAK   2
146     
147     #define STT_NOTYPE  0
148     #define STT_OBJECT  1
149     #define STT_FUNC    2
150     #define STT_SECTION 3
151     #define STT_FILE    4
152     
153     #define ELF32_ST_BIND(x) ((x) >> 4)
154     #define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
155     
156     /* Symbolic values for the entries in the auxiliary table
157        put on the initial stack */
158     #define AT_NULL   0	/* end of vector */
159     #define AT_IGNORE 1	/* entry should be ignored */
160     #define AT_EXECFD 2	/* file descriptor of program */
161     #define AT_PHDR   3	/* program headers for program */
162     #define AT_PHENT  4	/* size of program header entry */
163     #define AT_PHNUM  5	/* number of program headers */
164     #define AT_PAGESZ 6	/* system page size */
165     #define AT_BASE   7	/* base address of interpreter */
166     #define AT_FLAGS  8	/* flags */
167     #define AT_ENTRY  9	/* entry point of program */
168     #define AT_NOTELF 10	/* program is not ELF */
169     #define AT_UID    11	/* real uid */
170     #define AT_EUID   12	/* effective uid */
171     #define AT_GID    13	/* real gid */
172     #define AT_EGID   14	/* effective gid */
173     #define AT_PLATFORM 15  /* string identifying CPU for optimizations */
174     #define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
175     #define AT_CLKTCK 17	/* frequency at which times() increments */
176     
177     typedef struct dynamic{
178       Elf32_Sword d_tag;
179       union{
180         Elf32_Sword	d_val;
181         Elf32_Addr	d_ptr;
182       } d_un;
183     } Elf32_Dyn;
184     
185     typedef struct {
186       Elf64_Sxword d_tag;		/* entry tag value */
187       union {
188         Elf64_Xword d_val;
189         Elf64_Addr d_ptr;
190       } d_un;
191     } Elf64_Dyn;
192     
193     /* The following are used with relocations */
194     #define ELF32_R_SYM(x) ((x) >> 8)
195     #define ELF32_R_TYPE(x) ((x) & 0xff)
196     
197     #define R_386_NONE	0
198     #define R_386_32	1
199     #define R_386_PC32	2
200     #define R_386_GOT32	3
201     #define R_386_PLT32	4
202     #define R_386_COPY	5
203     #define R_386_GLOB_DAT	6
204     #define R_386_JMP_SLOT	7
205     #define R_386_RELATIVE	8
206     #define R_386_GOTOFF	9
207     #define R_386_GOTPC	10
208     #define R_386_NUM	11
209     
210     #define R_MIPS_NONE		0
211     #define R_MIPS_16		1
212     #define R_MIPS_32		2
213     #define R_MIPS_REL32		3
214     #define R_MIPS_26		4
215     #define R_MIPS_HI16		5
216     #define R_MIPS_LO16		6
217     #define R_MIPS_GPREL16		7
218     #define R_MIPS_LITERAL		8
219     #define R_MIPS_GOT16		9
220     #define R_MIPS_PC16		10
221     #define R_MIPS_CALL16		11
222     #define R_MIPS_GPREL32		12
223     /* The remaining relocs are defined on Irix, although they are not
224        in the MIPS ELF ABI.  */
225     #define R_MIPS_UNUSED1		13
226     #define R_MIPS_UNUSED2		14
227     #define R_MIPS_UNUSED3		15
228     #define R_MIPS_SHIFT5		16
229     #define R_MIPS_SHIFT6		17
230     #define R_MIPS_64		18
231     #define R_MIPS_GOT_DISP		19
232     #define R_MIPS_GOT_PAGE		20
233     #define R_MIPS_GOT_OFST		21
234     /*
235      * The following two relocation types are specified in the MIPS ABI
236      * conformance guide version 1.2 but not yet in the psABI.
237      */
238     #define R_MIPS_GOTHI16		22
239     #define R_MIPS_GOTLO16		23
240     #define R_MIPS_SUB		24
241     #define R_MIPS_INSERT_A		25
242     #define R_MIPS_INSERT_B		26
243     #define R_MIPS_DELETE		27
244     #define R_MIPS_HIGHER		28
245     #define R_MIPS_HIGHEST		29
246     /*
247      * The following two relocation types are specified in the MIPS ABI
248      * conformance guide version 1.2 but not yet in the psABI.
249      */
250     #define R_MIPS_CALLHI16		30
251     #define R_MIPS_CALLLO16		31
252     /*
253      * This range is reserved for vendor specific relocations.
254      */
255     #define R_MIPS_LOVENDOR		100
256     #define R_MIPS_HIVENDOR		127
257     
258     
259     /*
260      * Sparc ELF relocation types
261      */
262     #define	R_SPARC_NONE		0
263     #define	R_SPARC_8		1
264     #define	R_SPARC_16		2
265     #define	R_SPARC_32		3
266     #define	R_SPARC_DISP8		4
267     #define	R_SPARC_DISP16		5
268     #define	R_SPARC_DISP32		6
269     #define	R_SPARC_WDISP30		7
270     #define	R_SPARC_WDISP22		8
271     #define	R_SPARC_HI22		9
272     #define	R_SPARC_22		10
273     #define	R_SPARC_13		11
274     #define	R_SPARC_LO10		12
275     #define	R_SPARC_GOT10		13
276     #define	R_SPARC_GOT13		14
277     #define	R_SPARC_GOT22		15
278     #define	R_SPARC_PC10		16
279     #define	R_SPARC_PC22		17
280     #define	R_SPARC_WPLT30		18
281     #define	R_SPARC_COPY		19
282     #define	R_SPARC_GLOB_DAT	20
283     #define	R_SPARC_JMP_SLOT	21
284     #define	R_SPARC_RELATIVE	22
285     #define	R_SPARC_UA32		23
286     #define R_SPARC_PLT32		24
287     #define R_SPARC_HIPLT22		25
288     #define R_SPARC_LOPLT10		26
289     #define R_SPARC_PCPLT32		27
290     #define R_SPARC_PCPLT22		28
291     #define R_SPARC_PCPLT10		29
292     #define R_SPARC_10		30
293     #define R_SPARC_11		31
294     #define R_SPARC_WDISP16		40
295     #define R_SPARC_WDISP19		41
296     #define R_SPARC_7		43
297     #define R_SPARC_5		44
298     #define R_SPARC_6		45
299     
300     /* Bits present in AT_HWCAP, primarily for Sparc32.  */
301     
302     #define HWCAP_SPARC_FLUSH       1    /* CPU supports flush instruction. */
303     #define HWCAP_SPARC_STBAR       2
304     #define HWCAP_SPARC_SWAP        4
305     #define HWCAP_SPARC_MULDIV      8
306     #define HWCAP_SPARC_V9		16
307     #define HWCAP_SPARC_ULTRA3	32
308     
309     /*
310      * 68k ELF relocation types
311      */
312     #define R_68K_NONE	0
313     #define R_68K_32	1
314     #define R_68K_16	2
315     #define R_68K_8		3
316     #define R_68K_PC32	4
317     #define R_68K_PC16	5
318     #define R_68K_PC8	6
319     #define R_68K_GOT32	7
320     #define R_68K_GOT16	8
321     #define R_68K_GOT8	9
322     #define R_68K_GOT32O	10
323     #define R_68K_GOT16O	11
324     #define R_68K_GOT8O	12
325     #define R_68K_PLT32	13
326     #define R_68K_PLT16	14
327     #define R_68K_PLT8	15
328     #define R_68K_PLT32O	16
329     #define R_68K_PLT16O	17
330     #define R_68K_PLT8O	18
331     #define R_68K_COPY	19
332     #define R_68K_GLOB_DAT	20
333     #define R_68K_JMP_SLOT	21
334     #define R_68K_RELATIVE	22
335     
336     /*
337      * Alpha ELF relocation types
338      */
339     #define R_ALPHA_NONE            0       /* No reloc */
340     #define R_ALPHA_REFLONG         1       /* Direct 32 bit */
341     #define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
342     #define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
343     #define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
344     #define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
345     #define R_ALPHA_GPDISP          6       /* Add displacement to GP */
346     #define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
347     #define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
348     #define R_ALPHA_SREL16          9       /* PC relative 16 bit */
349     #define R_ALPHA_SREL32          10      /* PC relative 32 bit */
350     #define R_ALPHA_SREL64          11      /* PC relative 64 bit */
351     #define R_ALPHA_OP_PUSH         12      /* OP stack push */
352     #define R_ALPHA_OP_STORE        13      /* OP stack pop and store */
353     #define R_ALPHA_OP_PSUB         14      /* OP stack subtract */
354     #define R_ALPHA_OP_PRSHIFT      15      /* OP stack right shift */
355     #define R_ALPHA_GPVALUE         16
356     #define R_ALPHA_GPRELHIGH       17
357     #define R_ALPHA_GPRELLOW        18
358     #define R_ALPHA_IMMED_GP_16     19
359     #define R_ALPHA_IMMED_GP_HI32   20
360     #define R_ALPHA_IMMED_SCN_HI32  21
361     #define R_ALPHA_IMMED_BR_HI32   22
362     #define R_ALPHA_IMMED_LO32      23
363     #define R_ALPHA_COPY            24      /* Copy symbol at runtime */
364     #define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
365     #define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
366     #define R_ALPHA_RELATIVE        27      /* Adjust by program base */
367     
368     /* Legal values for e_flags field of Elf64_Ehdr.  */
369     
370     #define EF_ALPHA_32BIT		1	/* All addresses are below 2GB */
371     
372     
373     typedef struct elf32_rel {
374       Elf32_Addr	r_offset;
375       Elf32_Word	r_info;
376     } Elf32_Rel;
377     
378     typedef struct elf64_rel {
379       Elf64_Addr r_offset;	/* Location at which to apply the action */
380       Elf64_Xword r_info;	/* index and type of relocation */
381     } Elf64_Rel;
382     
383     typedef struct elf32_rela{
384       Elf32_Addr	r_offset;
385       Elf32_Word	r_info;
386       Elf32_Sword	r_addend;
387     } Elf32_Rela;
388     
389     typedef struct elf64_rela {
390       Elf64_Addr r_offset;	/* Location at which to apply the action */
391       Elf64_Xword r_info;	/* index and type of relocation */
392       Elf64_Sxword r_addend;	/* Constant addend used to compute value */
393     } Elf64_Rela;
394     
395     typedef struct elf32_sym{
396       Elf32_Word	st_name;
397       Elf32_Addr	st_value;
398       Elf32_Word	st_size;
399       unsigned char	st_info;
400       unsigned char	st_other;
401       Elf32_Half	st_shndx;
402     } Elf32_Sym;
403     
404     typedef struct elf64_sym {
405       Elf64_Word st_name;		/* Symbol name, index in string tbl */
406       unsigned char	st_info;	/* Type and binding attributes */
407       unsigned char	st_other;	/* No defined meaning, 0 */
408       Elf64_Half st_shndx;		/* Associated section index */
409       Elf64_Addr st_value;		/* Value of the symbol */
410       Elf64_Xword st_size;		/* Associated symbol size */
411     } Elf64_Sym;
412     
413     
414     #define EI_NIDENT	16
415     
416     typedef struct elf32_hdr{
417       unsigned char	e_ident[EI_NIDENT];
418       Elf32_Half	e_type;
419       Elf32_Half	e_machine;
420       Elf32_Word	e_version;
421       Elf32_Addr	e_entry;  /* Entry point */
422       Elf32_Off	e_phoff;
423       Elf32_Off	e_shoff;
424       Elf32_Word	e_flags;
425       Elf32_Half	e_ehsize;
426       Elf32_Half	e_phentsize;
427       Elf32_Half	e_phnum;
428       Elf32_Half	e_shentsize;
429       Elf32_Half	e_shnum;
430       Elf32_Half	e_shstrndx;
431     } Elf32_Ehdr;
432     
433     typedef struct elf64_hdr {
434       unsigned char	e_ident[16];		/* ELF "magic number" */
435       Elf64_Half e_type;
436       Elf64_Half e_machine;
437       Elf64_Word e_version;
438       Elf64_Addr e_entry;		/* Entry point virtual address */
439       Elf64_Off e_phoff;		/* Program header table file offset */
440       Elf64_Off e_shoff;		/* Section header table file offset */
441       Elf64_Word e_flags;
442       Elf64_Half e_ehsize;
443       Elf64_Half e_phentsize;
444       Elf64_Half e_phnum;
445       Elf64_Half e_shentsize;
446       Elf64_Half e_shnum;
447       Elf64_Half e_shstrndx;
448     } Elf64_Ehdr;
449     
450     /* These constants define the permissions on sections in the program
451        header, p_flags. */
452     #define PF_R		0x4
453     #define PF_W		0x2
454     #define PF_X		0x1
455     
456     typedef struct elf32_phdr{
457       Elf32_Word	p_type;
458       Elf32_Off	p_offset;
459       Elf32_Addr	p_vaddr;
460       Elf32_Addr	p_paddr;
461       Elf32_Word	p_filesz;
462       Elf32_Word	p_memsz;
463       Elf32_Word	p_flags;
464       Elf32_Word	p_align;
465     } Elf32_Phdr;
466     
467     typedef struct elf64_phdr {
468       Elf64_Word p_type;
469       Elf64_Word p_flags;
470       Elf64_Off p_offset;		/* Segment file offset */
471       Elf64_Addr p_vaddr;		/* Segment virtual address */
472       Elf64_Addr p_paddr;		/* Segment physical address */
473       Elf64_Xword p_filesz;		/* Segment size in file */
474       Elf64_Xword p_memsz;		/* Segment size in memory */
475       Elf64_Xword p_align;		/* Segment alignment, file & memory */
476     } Elf64_Phdr;
477     
478     /* sh_type */
479     #define SHT_NULL	0
480     #define SHT_PROGBITS	1
481     #define SHT_SYMTAB	2
482     #define SHT_STRTAB	3
483     #define SHT_RELA	4
484     #define SHT_HASH	5
485     #define SHT_DYNAMIC	6
486     #define SHT_NOTE	7
487     #define SHT_NOBITS	8
488     #define SHT_REL		9
489     #define SHT_SHLIB	10
490     #define SHT_DYNSYM	11
491     #define SHT_NUM		12
492     #define SHT_LOPROC	0x70000000
493     #define SHT_HIPROC	0x7fffffff
494     #define SHT_LOUSER	0x80000000
495     #define SHT_HIUSER	0xffffffff
496     #define SHT_MIPS_LIST		0x70000000
497     #define SHT_MIPS_CONFLICT	0x70000002
498     #define SHT_MIPS_GPTAB		0x70000003
499     #define SHT_MIPS_UCODE		0x70000004
500     
501     /* sh_flags */
502     #define SHF_WRITE	0x1
503     #define SHF_ALLOC	0x2
504     #define SHF_EXECINSTR	0x4
505     #define SHF_MASKPROC	0xf0000000
506     #define SHF_MIPS_GPREL	0x10000000
507     
508     /* special section indexes */
509     #define SHN_UNDEF	0
510     #define SHN_LORESERVE	0xff00
511     #define SHN_LOPROC	0xff00
512     #define SHN_HIPROC	0xff1f
513     #define SHN_ABS		0xfff1
514     #define SHN_COMMON	0xfff2
515     #define SHN_HIRESERVE	0xffff
516     #define SHN_MIPS_ACCOMON	0xff00
517      
518     typedef struct {
519       Elf32_Word	sh_name;
520       Elf32_Word	sh_type;
521       Elf32_Word	sh_flags;
522       Elf32_Addr	sh_addr;
523       Elf32_Off	sh_offset;
524       Elf32_Word	sh_size;
525       Elf32_Word	sh_link;
526       Elf32_Word	sh_info;
527       Elf32_Word	sh_addralign;
528       Elf32_Word	sh_entsize;
529     } Elf32_Shdr;
530     
531     typedef struct elf64_shdr {
532       Elf64_Word sh_name;		/* Section name, index in string tbl */
533       Elf64_Word sh_type;		/* Type of section */
534       Elf64_Xword sh_flags;		/* Miscellaneous section attributes */
535       Elf64_Addr sh_addr;		/* Section virtual addr at execution */
536       Elf64_Off sh_offset;		/* Section file offset */
537       Elf64_Xword sh_size;		/* Size of section in bytes */
538       Elf64_Word sh_link;		/* Index of another section */
539       Elf64_Word sh_info;		/* Additional section information */
540       Elf64_Xword sh_addralign;	/* Section alignment */
541       Elf64_Xword sh_entsize;	/* Entry size if section holds table */
542     } Elf64_Shdr;
543     
544     #define	EI_MAG0		0		/* e_ident[] indexes */
545     #define	EI_MAG1		1
546     #define	EI_MAG2		2
547     #define	EI_MAG3		3
548     #define	EI_CLASS	4
549     #define	EI_DATA		5
550     #define	EI_VERSION	6
551     #define	EI_PAD		7
552     
553     #define	ELFMAG0		0x7f		/* EI_MAG */
554     #define	ELFMAG1		'E'
555     #define	ELFMAG2		'L'
556     #define	ELFMAG3		'F'
557     #define	ELFMAG		"\177ELF"
558     #define	SELFMAG		4
559     
560     #define	ELFCLASSNONE	0		/* EI_CLASS */
561     #define	ELFCLASS32	1
562     #define	ELFCLASS64	2
563     #define	ELFCLASSNUM	3
564     
565     #define ELFDATANONE	0		/* e_ident[EI_DATA] */
566     #define ELFDATA2LSB	1
567     #define ELFDATA2MSB	2
568     
569     #define EV_NONE		0		/* e_version, EI_VERSION */
570     #define EV_CURRENT	1
571     #define EV_NUM		2
572     
573     /* Notes used in ET_CORE */
574     #define NT_PRSTATUS	1
575     #define NT_PRFPREG	2
576     #define NT_PRPSINFO	3
577     #define NT_TASKSTRUCT	4
578     #define NT_PRFPXREG	20
579     
580     /* Note header in a PT_NOTE section */
581     typedef struct elf32_note {
582       Elf32_Word	n_namesz;	/* Name size */
583       Elf32_Word	n_descsz;	/* Content size */
584       Elf32_Word	n_type;		/* Content type */
585     } Elf32_Nhdr;
586     
587     /* Note header in a PT_NOTE section */
588     typedef struct elf64_note {
589       Elf64_Word n_namesz;	/* Name size */
590       Elf64_Word n_descsz;	/* Content size */
591       Elf64_Word n_type;	/* Content type */
592     } Elf64_Nhdr;
593     
594     #if ELF_CLASS == ELFCLASS32
595     
596     extern Elf32_Dyn _DYNAMIC [];
597     #define elfhdr		elf32_hdr
598     #define elf_phdr	elf32_phdr
599     #define elf_note	elf32_note
600     
601     #else
602     
603     extern Elf64_Dyn _DYNAMIC [];
604     #define elfhdr		elf64_hdr
605     #define elf_phdr	elf64_phdr
606     #define elf_note	elf64_note
607     
608     #endif
609     
610     
611     #endif /* _LINUX_ELF_H */
612