1/*
2 * Copyright 2012, Alex Smith, alex@alex-smith.me.uk.
3 * Distributed under the terms of the MIT License.
4 */
5
6#ifndef _KERNEL_ARCH_x86_64_ELF_BOOT_H
7#define _KERNEL_ARCH_x86_64_ELF_BOOT_H
8
9// Constants shared on x86 and x86_64 when _BOOT_MODE is enabled.
10
11/* Relocation types. */
12#define R_X86_64_NONE				0	/* No relocation. */
13#define R_X86_64_64					1	/* Direct 64-bit. */
14#define R_X86_64_PC32				2	/* PC relative 32-bit signed. */
15#define R_X86_64_GOT32				3	/* 32-bit GOT entry. */
16#define R_X86_64_PLT32				4	/* 32-bit PLT address. */
17#define R_X86_64_COPY				5	/* Copy symbol at runtime. */
18#define R_X86_64_GLOB_DAT			6	/* Create GOT entry. */
19#define R_X86_64_JUMP_SLOT			7	/* Create PLT entry. */
20#define R_X86_64_RELATIVE			8	/* Adjust by program base. */
21#define R_X86_64_GOTPCREL			9	/* 32-bit signed PC relative offset to GOT. */
22#define R_X86_64_32					10	/* Direct 32-bit zero-extended. */
23#define R_X86_64_32S				11	/* Direct 32-bit sign-extended. */
24#define R_X86_64_16					12	/* Direct 16-bit zero-extended. */
25#define R_X86_64_PC16				13	/* 16-bit sign-extended PC relative. */
26#define R_X86_64_8					14	/* Direct 8-bit sign-extended. */
27#define R_X86_64_PC8				15	/* 8-bit sign-extended PC relative. */
28#define R_X86_64_DTPMOD64			16	/* ID of module containing symbol. */
29#define R_X86_64_DTPOFF64			17	/* Offset in module's TLS block. */
30#define R_X86_64_TPOFF64			18	/* Offset in initial TLS block. */
31#define R_X86_64_TLSGD				19	/* 32-bit signed PC relative offset to two GOT entries (GD). */
32#define R_X86_64_TLSLD				20	/* 32-bit signed PC relative offset to two GOT entries (LD). */
33#define R_X86_64_DTPOFF32			21	/* Offset in TLS block. */
34#define R_X86_64_GOTTPOFF			22	/* 32-bit signed PC relative offset to GOT entry (IE). */
35#define R_X86_64_TPOFF32			23	/* Offset in initial TLS block. */
36#define R_X86_64_PC64				24	/* PC relative 64-bit. */
37#define R_X86_64_GOTOFF64			25	/* 64-bit offset to GOT. */
38#define R_X86_64_GOTPC32			26	/* 32 bit signed PC relative offset to GOT. */
39#define R_X86_64_GOT64				27	/* 64-bit GOT entry offset. */
40#define R_X86_64_GOTPCREL64			28	/* 64-bit PC relative offset to GOT entry. */
41#define R_X86_64_GOTPC64			29	/* 64-bit PC relative offset to GOT. */
42#define R_X86_64_GOTPLT64			30	/* Like GOT64, says PLT entry needed. */
43#define R_X86_64_PLTOFF64			31	/* 64-bit GOT relative offset to PLT entry. */
44#define R_X86_64_SIZE32				32	/* Size of symbol plus 32-bit addend. */
45#define R_X86_64_SIZE64				33	/* Size of symbol plus 64-bit addend. */
46#define R_X86_64_GOTPC32_TLSDESC	34	/* GOT offset for TLS descriptor. */
47#define R_X86_64_TLSDESC_CALL		35	/* Marker for call through TLS descriptor. */
48#define R_X86_64_TLSDESC			36	/* TLS descriptor. */
49#define R_X86_64_IRELATIVE			37	/* Adjust indirectly by program base. */
50
51#endif	/* _KERNEL_ARCH_x86_64_ELF_BOOT_H */
52
53