176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * sys/elfcommon.h
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _SYS_ELFCOMMON_H
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _SYS_ELFCOMMON_H
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h>
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Segment types */
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_NULL		0
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_LOAD		1
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_DYNAMIC	2
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_INTERP	3
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_NOTE		4
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_SHLIB	5
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_PHDR		6
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_LOOS		0x60000000
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_HIOS		0x6fffffff
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_LOPROC	0x70000000
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_HIPROC	0x7fffffff
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_GNU_EH_FRAME	0x6474e550	/* Extension, eh? */
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ELF file types */
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_NONE		0
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_REL		1
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_EXEC		2
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_DYN		3
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_CORE		4
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_LOPROC	0xff00
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_HIPROC	0xffff
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ELF machine types */
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_NONE		0
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_M32		1
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARC	2
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_386		3
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68K		4
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_88K		5
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_486		6	/* Not used in Linux at least */
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_860		7
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MIPS         8	/* R3k, bigendian(?) */
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MIPS_RS4_BE	10	/* R4k BE */
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PARISC	15
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARC32PLUS	18
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PPC		20
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PPC64	21
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_S390         22
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SH		42
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARCV9	43	/* v9 = SPARC64 */
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8_300H      47
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8S          48
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_IA_64        50	/* Itanic */
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_X86_64       62
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_CRIS         76
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_V850         87
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ALPHA        0x9026	/* Interrim Alpha that stuck around */
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_CYGNUS_V850  0x9080	/* Old v850 ID used by Cygnus */
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_S390_OLD     0xA390	/* Obsolete interrim value for S/390 */
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Dynamic type values */
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_NULL		0		/* Marks end of dynamic section */
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_NEEDED	1		/* Name of needed library */
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PLTRELSZ	2		/* Size in bytes of PLT relocs */
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PLTGOT	3		/* Processor defined value */
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_HASH		4		/* Address of symbol hash table */
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_STRTAB	5		/* Address of string table */
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMTAB	6		/* Address of symbol table */
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELA		7		/* Address of Rela relocs */
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELASZ	8		/* Total size of Rela relocs */
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELAENT	9		/* Size of one Rela reloc */
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_STRSZ	10		/* Size of string table */
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMENT	11		/* Size of one symbol table entry */
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_INIT		12		/* Address of init function */
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_FINI		13		/* Address of termination function */
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SONAME	14		/* Name of shared object */
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RPATH	15		/* Library search path (deprecated) */
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMBOLIC	16		/* Start symbol search here */
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_REL		17		/* Address of Rel relocs */
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELSZ	18		/* Total size of Rel relocs */
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELENT	19		/* Size of one Rel reloc */
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PLTREL	20		/* Type of reloc in PLT */
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_DEBUG	21		/* For debugging; unspecified */
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_TEXTREL	22		/* Reloc might modify .text */
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_JMPREL	23		/* Address of PLT relocs */
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_BIND_NOW	24		/* Process relocations of object */
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_INIT_ARRAY	25		/* Array with addresses of init fct */
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_FINI_ARRAY	26		/* Array with addresses of fini fct */
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_INIT_ARRAYSZ	27		/* Size in bytes of DT_INIT_ARRAY */
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_FINI_ARRAYSZ	28		/* Size in bytes of DT_FINI_ARRAY */
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RUNPATH	29		/* Library search path */
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_FLAGS	30		/* Flags for the object being loaded */
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_ENCODING	32		/* Start of encoded range */
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PREINIT_ARRAY 32		/* Array with addresses of preinit fct*/
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PREINIT_ARRAYSZ 33		/* size in bytes of DT_PREINIT_ARRAY */
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_NUM		34		/* Number used */
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_LOOS		0x6000000d	/* Start of OS-specific */
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_HIOS		0x6ffff000	/* End of OS-specific */
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_LOPROC	0x70000000	/* Start of processor-specific */
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_HIPROC	0x7fffffff	/* End of processor-specific */
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VALRNGLO	0x6ffffd00
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_PRELINKED 0x6ffffdf5	/* Prelinking timestamp */
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_CONFLICTSZ 0x6ffffdf6	/* Size of conflict section */
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_LIBLISTSZ 0x6ffffdf7	/* Size of library list */
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_CHECKSUM	0x6ffffdf8
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_PLTPADSZ	0x6ffffdf9
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_MOVEENT	0x6ffffdfa
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_MOVESZ	0x6ffffdfb
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_FEATURE_1	0x6ffffdfc	/* Feature selection (DTF_*).  */
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_POSFLAG_1	0x6ffffdfd	/* Flags for DT_* entries, effecting
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   the following DT_* entry.  */
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMINSZ	0x6ffffdfe	/* Size of syminfo table (in bytes) */
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMINENT	0x6ffffdff	/* Entry size of syminfo */
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VALRNGHI	0x6ffffdff
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VALTAGIDX(tag)	(DT_VALRNGHI - (tag))	/* Reverse order! */
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VALNUM 12
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   If any adjustment is made to the ELF object after it has been
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   built these entries will need to be adjusted.  */
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_ADDRRNGLO	0x6ffffe00
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_HASH	0x6ffffef5	/* GNU-style hash table.  */
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_TLSDESC_PLT	0x6ffffef6
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_TLSDESC_GOT	0x6ffffef7
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_CONFLICT	0x6ffffef8	/* Start of conflict section */
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_GNU_LIBLIST	0x6ffffef9	/* Library list */
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_CONFIG	0x6ffffefa	/* Configuration information.  */
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_DEPAUDIT	0x6ffffefb	/* Dependency auditing.  */
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_AUDIT	0x6ffffefc	/* Object auditing.  */
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_PLTPAD	0x6ffffefd	/* PLT padding.  */
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_MOVETAB	0x6ffffefe	/* Move table.  */
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_SYMINFO	0x6ffffeff	/* Syminfo table.  */
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_ADDRRNGHI	0x6ffffeff
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_ADDRTAGIDX(tag)	(DT_ADDRRNGHI - (tag))	/* Reverse order! */
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_ADDRNUM 11
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The versioning entry types.  The next are defined as part of the
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   GNU extension.  */
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VERSYM	0x6ffffff0
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELACOUNT	0x6ffffff9
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_RELCOUNT	0x6ffffffa
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* These were chosen by Sun.  */
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_FLAGS_1	0x6ffffffb	/* State flags, see DF_1_* below.  */
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_VERDEF	0x6ffffffc	/* Address of version definition
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   table */
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_VERDEFNUM	0x6ffffffd	/* Number of version definitions */
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_VERNEED	0x6ffffffe	/* Address of table with needed
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   versions */
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	DT_VERNEEDNUM	0x6fffffff	/* Number of needed versions */
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VERSIONTAGIDX(tag)	(DT_VERNEEDNUM - (tag))	/* Reverse order! */
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_VERSIONTAGNUM 16
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Sun added these machine-independent extensions in the "processor-specific"
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   range.  Be compatible.  */
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_FILTER       0x7fffffff      /* Shared object to get values from */
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_EXTRATAGIDX(tag)	((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DT_EXTRANUM	3
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Auxilliary table entries */
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_NULL		0	/* end of vector */
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_IGNORE	1	/* entry should be ignored */
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_EXECFD	2	/* file descriptor of program */
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_PHDR		3	/* program headers for program */
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_PHENT	4	/* size of program header entry */
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_PHNUM	5	/* number of program headers */
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_PAGESZ	6	/* system page size */
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_BASE		7	/* base address of interpreter */
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_FLAGS	8	/* flags */
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_ENTRY	9	/* entry point of program */
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_NOTELF	10	/* program is not ELF */
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_UID		11	/* real uid */
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_EUID		12	/* effective uid */
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_GID		13	/* real gid */
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_EGID		14	/* effective gid */
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_PLATFORM	15	/* string identifying CPU for optimizations */
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_HWCAP	16	/* arch dependent hints at CPU capabilities */
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_CLKTCK	17	/* frequency at which times() increments */
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 18..22 = ? */
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AT_SECURE	23	/* secure mode boolean */
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Program header permission flags */
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_X            0x1
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_W            0x2
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_R            0x4
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Section header types */
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_NULL        0
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_PROGBITS    1
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_SYMTAB      2
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_STRTAB      3
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_RELA        4
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_HASH        5
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_DYNAMIC     6
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_NOTE        7
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_NOBITS      8
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_REL         9
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_SHLIB       10
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_DYNSYM      11
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_NUM         12
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_LOPROC      0x70000000
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_HIPROC      0x7fffffff
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_LOUSER      0x80000000
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHT_HIUSER      0xffffffff
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Section header flags */
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHF_WRITE       0x1
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHF_ALLOC       0x2
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHF_EXECINSTR   0x4
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHF_MASKPROC    0xf0000000
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Special section numbers */
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_UNDEF       0
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_LORESERVE   0xff00
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_LOPROC      0xff00
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_HIPROC      0xff1f
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_ABS         0xfff1
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_COMMON      0xfff2
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SHN_HIRESERVE   0xffff
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Symbol table definitions */
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* How to extract and insert information held in the st_info field.  */
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_ST_BIND(val)		(((unsigned char) (val)) >> 4)
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_ST_TYPE(val)		((val) & 0xf)
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_ST_INFO(bind, type)	(((bind) << 4) + ((type) & 0xf))
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF64_ST_BIND(val)		ELF32_ST_BIND (val)
23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF64_ST_TYPE(val)		ELF32_ST_TYPE (val)
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF64_ST_INFO(bind, type)	ELF32_ST_INFO ((bind), (type))
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Legal values for ST_BIND subfield of st_info (symbol binding).  */
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_LOCAL	0		/* Local symbol */
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_GLOBAL	1		/* Global symbol */
24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_WEAK	2		/* Weak symbol */
24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	STB_NUM		3		/* Number of defined types.  */
24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_LOOS	10		/* Start of OS-specific */
24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_HIOS	12		/* End of OS-specific */
24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_LOPROC	13		/* Start of processor-specific */
24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STB_HIPROC	15		/* End of processor-specific */
24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_NOTYPE	0		/* Symbol type is unspecified */
25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_OBJECT	1		/* Symbol is a data object */
25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_FUNC	2		/* Symbol is a code object */
25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_SECTION	3		/* Symbol associated with a section */
25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_FILE	4		/* Symbol's name is file name */
25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_COMMON	5		/* Symbol is a common data object */
25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_TLS		6		/* Symbol is thread-local data object*/
25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	STT_NUM		7		/* Number of defined types.  */
26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_LOOS	10		/* Start of OS-specific */
26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_HIOS	12		/* End of OS-specific */
26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_LOPROC	13		/* Start of processor-specific */
26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STT_HIPROC	15		/* End of processor-specific */
26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Symbol table indices are found in the hash buckets and chain table
26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   of a symbol hash table section.  This special index value indicates
26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   the end of a chain, meaning no further symbols are found in that bucket.  */
26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define STN_UNDEF	0		/* End of a chain.  */
27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Lenght of magic at the start of a file */
27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_NIDENT	16
27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Magic number constants... */
27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG0         0	/* e_ident[] indexes */
27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG1         1
27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG2         2
27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG3         3
28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_CLASS        4
28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_DATA         5
28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_VERSION      6
28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_OSABI        7
28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_PAD          8
28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG0         0x7f	/* EI_MAG */
28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG1         'E'
28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG2         'L'
28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG3         'F'
29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG          "\177ELF"
29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SELFMAG         4
29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASSNONE    0	/* EI_CLASS */
29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASS32      1
29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASS64      2
29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASSNUM     3
29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATANONE     0	/* e_ident[EI_DATA] */
29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATA2LSB     1
30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATA2MSB     2
30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EV_NONE         0	/* e_version, EI_VERSION */
30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EV_CURRENT      1
30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EV_NUM          2
30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFOSABI_NONE   0
30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFOSABI_LINUX  3
30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Intel 80386 specific definitions.  */
31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* i386 relocs.  */
31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_NONE	   0		/* No reloc */
31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_32	   1		/* Direct 32 bit  */
31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_PC32	   2		/* PC relative 32 bit */
31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_GOT32	   3		/* 32 bit GOT entry */
31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_PLT32	   4		/* 32 bit PLT address */
31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_COPY	   5		/* Copy symbol at runtime */
31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_GLOB_DAT	   6		/* Create GOT entry */
32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_JMP_SLOT	   7		/* Create PLT entry */
32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_RELATIVE	   8		/* Adjust by program base */
32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_GOTOFF	   9		/* 32 bit offset to GOT */
32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_GOTPC	   10		/* 32 bit PC relative offset to GOT */
32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_32PLT	   11
32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_TPOFF	   14		/* Offset in static TLS block */
32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_IE	   15		/* Address of GOT entry for static TLS
32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   block offset */
32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GOTIE	   16		/* GOT entry for static TLS block
32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   offset */
33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LE	   17		/* Offset relative to static TLS
33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   block */
33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GD	   18		/* Direct 32 bit for GNU version of
33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   general dynamic thread local data */
33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDM	   19		/* Direct 32 bit for GNU version of
33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   local dynamic thread local data
33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   in LE code */
33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_16	   20
33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_PC16	   21
33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_8		   22
34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_PC8	   23
34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GD_32	   24		/* Direct 32 bit for general dynamic
34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   thread local data */
34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GD_PUSH  25		/* Tag for pushl in GD TLS code */
34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GD_CALL  26		/* Relocation for call to
34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   __tls_get_addr() */
34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_GD_POP   27		/* Tag for popl in GD TLS code */
34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDM_32   28		/* Direct 32 bit for local dynamic
34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   thread local data in LE code */
34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDM_PUSH 29		/* Tag for pushl in LDM TLS code */
35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDM_CALL 30		/* Relocation for call to
35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   __tls_get_addr() in LDM code */
35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDM_POP  31		/* Tag for popl in LDM TLS code */
35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LDO_32   32		/* Offset relative to TLS block */
35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_IE_32	   33		/* GOT entry for negated static TLS
35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   block offset */
35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_LE_32	   34		/* Negated offset relative to static
35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   TLS block */
35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_DTPMOD32 35		/* ID of module containing symbol */
35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_DTPOFF32 36		/* Offset in TLS block */
36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_TLS_TPOFF32  37		/* Negated offset in static TLS block */
36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Keep this the last entry.  */
36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_386_NUM	   38
36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* AMD x86-64 relocations.  */
36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_NONE		0	/* No reloc */
36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_64		1	/* Direct 64 bit  */
36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PC32		2	/* PC relative 32 bit signed */
36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOT32		3	/* 32 bit GOT entry */
36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PLT32		4	/* 32 bit PLT address */
37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_COPY		5	/* Copy symbol at runtime */
37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GLOB_DAT	6	/* Create GOT entry */
37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_JUMP_SLOT	7	/* Create PLT entry */
37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_RELATIVE	8	/* Adjust by program base */
37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPCREL	9	/* 32 bit signed PC relative
37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   offset to GOT */
37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_32		10	/* Direct 32 bit zero extended */
37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_32S		11	/* Direct 32 bit sign extended */
37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_16		12	/* Direct 16 bit zero extended */
37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PC16		13	/* 16 bit sign extended pc relative */
38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_8		14	/* Direct 8 bit sign extended  */
38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PC8		15	/* 8 bit sign extended pc relative */
38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_DTPMOD64	16	/* ID of module containing symbol */
38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_DTPOFF64	17	/* Offset in module's TLS block */
38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TPOFF64	18	/* Offset in initial TLS block */
38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TLSGD		19	/* 32 bit signed PC relative offset
38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   to two GOT entries for GD symbol */
38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TLSLD		20	/* 32 bit signed PC relative offset
38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   to two GOT entries for LD symbol */
38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_DTPOFF32	21	/* Offset in TLS block */
39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTTPOFF	22	/* 32 bit signed PC relative offset
39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   to GOT entry for IE symbol */
39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TPOFF32	23	/* Offset in initial TLS block */
39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PC64		24	/* PC relative 64 bit */
39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTOFF64	25	/* 64 bit offset to GOT */
39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPC32	26	/* 32 bit signed pc relative
39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   offset to GOT */
39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOT64		27	/* 64-bit GOT entry offset */
39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPCREL64	28	/* 64-bit PC relative offset
39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   to GOT entry */
40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPC64	29	/* 64-bit PC relative offset to GOT */
40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPLT64	30 	/* like GOT64, says PLT entry needed */
40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_PLTOFF64	31	/* 64-bit GOT relative offset
40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   to PLT entry */
40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_SIZE32		32	/* Size of symbol plus 32-bit addend */
40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_SIZE64		33	/* Size of symbol plus 64-bit addend */
40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_GOTPC32_TLSDESC 34	/* GOT offset for TLS descriptor.  */
40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TLSDESC_CALL   35	/* Marker for call through TLS
40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman					   descriptor.  */
40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_TLSDESC        36	/* TLS descriptor.  */
41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_IRELATIVE	37	/* Adjust indirectly by program base */
41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define R_X86_64_NUM		38
41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif				/* _SYS_ELFCOMMON_H */
415